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)
}