Haversine
URLs
https://www.kompf.de/gps/distcalc.html
Calculate distance between GPS coordinates
Below the Python example for the script from https://rosettacode.org/wiki/Haversine_formula#Python
1from math import radians, sin, cos, sqrt, asin
2
3def haversine(lat1, lon1, lat2, lon2):
4 R = 6372.8 # Earth radius in kilometers
5
6 dLat = radians(lat2 - lat1)
7 dLon = radians(lon2 - lon1)
8 lat1 = radians(lat1)
9 lat2 = radians(lat2)
10
11 a = sin(dLat / 2)**2 + cos(lat1) * cos(lat2) * sin(dLon / 2)**2
12 c = 2 * asin(sqrt(a))
13
14 return R * c>>> haversine(36.12, -86.67, 33.94, -118.40)
15
162887.2599506071106>>>And here the Godot piece:
1func haversineDistance(startPos, targetPos, debug=false):
2 var lat1 = deg_to_rad(startPos.x)
3 var lat2 = deg_to_rad(targetPos.x)
4 var lon1 = deg_to_rad(startPos.y)
5 var lon2 = deg_to_rad(targetPos.y)
6
7 var dlat = (lat2 - lat1)
8 var dlon = (lon2 - lon1)
9 if debug:
10 print("dlat, dlon, lat1, lat2------------------------------")
11 print(dlat)
12 print(dlon)
13 print(lat1)
14 print(lat2)
15
16 var a1:float = pow(sin(dlat/2.0), 2)
17 var a2:float = cos(lat1)
18 var a3:float = cos(lat2)
19 var a4:float = pow(sin(dlon/2.0),2)
20
21 var a:float = (a1+a2*a3*a4)
22
23 var aTest = pow(sin(dlat/2.0), 2) + cos(lat1) * cos(lat2) * pow(sin(dlon/2.0),2)
24 if debug:
25 print("------------------------------")
26 print(a1)
27 print(a2)
28 print(a3)
29 print(a4)
30 print(a)
31 print(aTest)
32 print("------------------------------")
33
34 var c = 2 * asin(sqrt(a))
35 if debug:
36 print(c)
37 return c * 6372.8