Je cherche des moyens de calculer (en Python) l'emplacement de destination à partir d'un point et d'un angle donnés.
Sur la base de la comparaison des résultats des 2 bibliothèques dans le sujet ( geopy
et pyproj
), j'ai remarqué qu'il y a une différence croissante dans la sortie finale. Par exemple, à 100 km est à peu près de l'ordre du décimètre. Ceci est un exemple minimal de ce que je veux dire:
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))
J'ai obtenu ces résultats:
| 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
Ma principale question est de savoir si je fais quelque chose de mal (les deux paramètres doivent être utilisés WGS84
).
Sinon, la différence est-elle due aux différentes formules utilisées (Vincenty pour geopy
vs Karney pour pyproj
)? Par exemple, l'erreur d'arrondi citée ici .
geopy
ticket: github.com/geopy/geopy/issues/140La demande d'extraction de geopy résout votre problème avec geopy. Vous devrez d'abord installer le paquetage géographique Python avec
la source