package tool import ( "math" ) var a = float64(6378137) var b = 6356752.3142 var asqr = a * a var bsqr = b * b var e = math.Sqrt((asqr - bsqr) / asqr) var eprime = math.Sqrt((asqr - bsqr) / bsqr) func Xyz2Wgs84(X, Y, Z float64) (lng, lat, height float64) { var p = math.Sqrt(X*X + Y*Y) var theta = math.Atan((Z * a) / (p * b)) var sintheta = math.Sin(theta) var costheta = math.Cos(theta) var num = Z + eprime*eprime*b*sintheta*sintheta*sintheta var denom = p - e*e*a*costheta*costheta*costheta //Now calculate LLA var latitude = math.Atan(num / denom) var longitude = math.Atan(Y / X) var N = getN(latitude) var altitude = (p / math.Cos(latitude)) - N if X < 0 && Y < 0 { longitude = longitude - math.Pi } if X < 0 && Y > 0 { longitude = longitude + math.Pi } return radiansToDegrees(longitude), radiansToDegrees(latitude), altitude } func getN(latitude float64) float64 { var sinlatitude = math.Sin(latitude) var denom = math.Sqrt(1 - e*e*sinlatitude*sinlatitude) var N = a / denom return N } func radiansToDegrees(radians float64) float64 { return radians * 180 / math.Pi } //106.54959740614493 23.47200769358978