Ich habe eine benutzerdefinierte Funktion in R erstellt, um die Haversine-Distanz (km) zwischen zwei räumlichen Punkten unter Verwendung von Funktionen im R-Basispaket zu berechnen.
custom_hav_dist <- function(lat1, lon1, lat2, lon2) {
R <- 6371
Radian_factor <- 0.0174533
lat_1 <- (90-lat1)*Radian_factor
lat_2 <- (90-lat2)*Radian_factor
diff_long <-(lon1-lon2)*Radian_factor
distance_in_km <- 6371*acos((cos(lat_1)*cos(lat_2))+
(sin(lat_1)*sin(lat_2)*cos(diff_long)))
rm(lat1, lon1, lat2, lon2)
return(distance_in_km)
}
Beispieloutput
custom_hav_dist(50.31,19.08,54.14,19.39)
[1] 426.3987
PS: Um Entfernungen in Meilen zu berechnen, ersetzen Sie R in der Funktion (6371) durch 3958.756 (und für nautische Meilen verwenden Sie 3440.065).
0 Stimmen
Für eine bessere Genauigkeit - siehe stackoverflow.com/questions/1420045/…
4 Stimmen
Beachten Sie, dass Sie die Haversine-Formel nicht auf einem Rotationsellipsoid wie WGS 84 anwenden können. Sie können diese Methode nur auf einer Kugel mit einem Radius anwenden.
8 Stimmen
Die meisten Antworten hier verwenden einfache sphärische Trigonometrie, daher sind die Ergebnisse im Vergleich zu den WGS84-Ellipsoidentfernungen, die im GPS-System verwendet werden, ziemlich grob. Einige der Antworten beziehen sich zwar auf die Vincenty-Formel für Ellipsoide, aber dieser Algorithmus wurde für die Verwendung auf Schreibtischrechnern aus den 1960er Jahren entwickelt und weist Stabilitäts- und Genauigkeitsprobleme auf; wir haben jetzt bessere Hardware und Software. Bitte sehen Sie GeographicLib für eine hochwertige Bibliothek mit Implementierungen in verschiedenen Sprachen.
0 Stimmen
@MikeT - das stimmt, obwohl viele der Antworten hier nützlich zu sein scheinen über kleine Entfernungen: Wenn Sie Breiten- / Längengrad von WGS 84 nehmen und Haversine wie wenn es Punkte auf einer Kugel anwenden, erhalten Sie Antworten, deren Fehler nur auf den Erdabplattungsfaktor zurückzuführen sind, vielleicht also innerhalb von 1% einer genaueren Formel? Mit der Einschränkung, dass es sich um kleine Entfernungen handelt, sagen wir innerhalb einer einzigen Stadt.
1 Stimmen
Für diese Plattformen: Mono/.NET 4.5/.NET Core/Windows Phone 8.x/Universal Windows Platform/Xamarin iOS/Xamarin Android siehe stackoverflow.com/a/54296314/2736742
0 Stimmen
Siehe auch diese großartige Python-Antwort: Schnelle Haversine-Approximation (Python/Pandas)