Skip to content
Haversine

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