Ich suche nach Möglichkeiten, um (in Python) den Zielort aus einem Punkt zu berechnen, dem Peilung und Reichweite gegeben sind.
Basierend auf dem Ergebnisvergleich der beiden Bibliotheken in Betreff ( geopy
und pyproj
) habe ich festgestellt, dass es einen zunehmenden Unterschied in der endgültigen Ausgabe gibt. Zum Beispiel liegt bei 100 km ungefähr in der Größenordnung von Dezimetern. Dies ist ein minimales Beispiel dafür, was ich meine:
from __future__ import absolute_import, division, print_function
long_1 = -1.729722
lat_1 = 53.320556
bearing = 96.021667
distance = 124.8 #in km
# using geopy
import geopy
from geopy.distance import VincentyDistance
origin = geopy.Point(lat_1, long_1)
destination = VincentyDistance(kilometers=distance).destination(origin, bearing)
gp_lat_2 = destination.latitude
gp_long_2 = destination.longitude
# using pyproj
from pyproj import Geod
g = Geod(ellps='WGS84')
prj_long_2, prj_lat_2, prj_bearing_2 = g.fwd(long_1, lat_1, bearing, distance*1000)
# results comparison
print(" | pyproj | geopy")
print("long_2 %.6f %.6f" % (prj_long_2, gp_long_2))
print("lat_2 %.6f %.6f" % (prj_lat_2, gp_lat_2))
print("> DELTA pyproj, geopy")
print("delta long_2 %.7f" % (prj_long_2 - gp_long_2))
print("delta lat_2 %.7f" % (prj_lat_2 - gp_lat_2))
Ich habe diese Ergebnisse erhalten:
| pyproj | geopy
long_2 0.127201 0.127199
lat_2 53.188432 53.188432
> DELTA pyproj, geopy
delta long_2 0.0000021
delta lat_2 -0.0000002
Meine Hauptfrage ist, ob ich etwas falsch mache (beide Einstellungen sollten verwendet werden WGS84
).
Wenn nicht, ist der Unterschied auf unterschiedliche verwendete Formeln zurückzuführen (Vincenty für geopy
vs. Karney für pyproj
)? ZB der hier genannte Rundungsfehler .
geopy
Ticket geöffnet : github.com/geopy/geopy/issues/140Die Geopy-Pull-Anforderung behebt Ihr Problem mit Geopy. Sie müssen zuerst das Python-Paket geographiclib mit installieren
quelle