高德 GCJ02 经纬度计算距离 golang

446 阅读1分钟

func GeoDistance(lon1 float64, lat1 float64, lon2 float64, lat2 float64) float64 {
   radLat1 := math.Pi * lat1 / 180
   radLat2 := math.Pi * lat2 / 180

   theta := lon1 - lon2
   radTheta := math.Pi * theta / 180

   dist := math.Sin(radLat1)*math.Sin(radLat2) + math.Cos(radLat1)*math.Cos(radLat2)*math.Cos(radTheta)

   if dist > 1 {
      dist = 1
   }

   dist = math.Acos(dist)
   dist = dist * 180 / math.Pi
   dist = dist * 60 * 1.1515

   return dist * 1609.344
}


	func CalculateLineDistance(longitude1,latitude1, longitude2,  latitude2 float64) float64 {

	var2 := longitude1
	var4 := latitude1
	var6 := longitude2
	var8 := latitude2

	var2 *= 0.01745329251994329
	var4 *= 0.01745329251994329
	var6 *= 0.01745329251994329
	var8 *= 0.01745329251994329
	var10 := math.Sin(var2)
	var12 := math.Sin(var4)
	var14 := math.Cos(var2)
	var16 := math.Cos(var4)
	var18 := math.Sin(var6)
	var20 := math.Sin(var8)
	var22 := math.Cos(var6)
	var24 := math.Cos(var8)
	var28 := [3]float64{}
	var29 := [3]float64{}
	var28[0] = var16 * var14
	var28[1] = var16 * var10
	var28[2] = var12
	var29[0] = var24 * var22
	var29[1] = var24 * var18
	var29[2] = var20
	return (math.Asin(math.Sqrt((var28[0]-var29[0])*(var28[0]-var29[0])+(var28[1]-var29[1])*(var28[1]-var29[1])+(var28[2]-var29[2])*(var28[2]-var29[2]))/2.0) * 1.27420015798544E7)
}