Ich habe versucht, diese Formel zu implementieren: http://andrew.hedges.name/experiments/haversine/ Das Aplet ist gut für die beiden Punkte, die ich teste:
Mein Code funktioniert jedoch nicht.
from math import sin, cos, sqrt, atan2
R = 6373.0
lat1 = 52.2296756
lon1 = 21.0122287
lat2 = 52.406374
lon2 = 16.9251681
dlon = lon2 - lon1
dlat = lat2 - lat1
a = (sin(dlat/2))**2 + cos(lat1) * cos(lat2) * (sin(dlon/2))**2
c = 2 * atan2(sqrt(a), sqrt(1-a))
distance = R * c
print "Result", distance
print "Should be", 278.546
Die zurückgegebene Entfernung beträgt 5447.05546147 . Warum?
radians(abs(52.123))
sollte den Trick machen ...Update: 04/2018: Beachten Sie, dass die Vincenty-Entfernung seit GeoPy Version 1.13 veraltet ist - Sie sollten stattdessen geopy.distance.distance () verwenden!
Die obigen Antworten basieren auf der Haversine-Formel , die davon ausgeht, dass die Erde eine Kugel ist, was zu Fehlern von bis zu etwa 0,5% führt (gemäß
help(geopy.distance)
). Vincenty Distance verwendet genauere Ellipsoidmodelle wie WGS-84 und ist in Geopy implementiert . Beispielsweise,druckt die Entfernung von
279.352901604
Kilometern mit dem Standardellipsoid WGS-84. (Sie können auch eine.miles
oder mehrere andere Entfernungseinheiten auswählen ).quelle
print geopy.distance.VincentyDistance(coords_1, coords_2).km 279.352901604
geopy.distance.distance(…)
Code verwenden, der ein Alias der derzeit besten (= genauesten) Entfernungsformel ist. (Vincenty im Moment.)geopy.distance.geodesic
(oder die Standardeinstellunggeopy.distance.distance
), was genauer ist und immer konvergiert.Für Leute (wie mich), die über eine Suchmaschine hierher kommen und nur nach einer Lösung suchen, die sofort funktioniert, empfehle ich die Installation
mpu
. Installieren Sie es überpip install mpu --user
und verwenden Sie es wie folgt , um den Haversine-Abstand zu ermitteln :Ein alternatives Paket ist
gpxpy
.Wenn Sie keine Abhängigkeiten möchten, können Sie Folgendes verwenden:
Das andere alternative Paket ist
[haversine][1]
Sie behaupten, eine Leistungsoptimierung für Abstände zwischen allen Punkten in zwei Vektoren zu haben
quelle
Ich bin zu einer viel einfacheren und robusteren Lösung gekommen, die
geodesic
aus demgeopy
Paket verwendet wird, da Sie sie höchstwahrscheinlich sowieso in Ihrem Projekt verwenden werden, sodass keine zusätzliche Paketinstallation erforderlich ist.Hier ist meine Lösung:
Geopy
quelle
quelle