Estoy buscando formas de calcular (en Python) la ubicación de destino desde un punto dado rumbo y rango.
Basado en la comparación de resultados de las 2 bibliotecas en el tema ( geopy
y pyproj
), noté que hay una diferencia creciente en el resultado final. Por ejemplo, a 100 km es aproximadamente del orden de decímetros. Este es un ejemplo mínimo de lo que quiero decir:
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))
Obtuve estos resultados:
| 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
Mi pregunta principal es si estoy haciendo algo mal (ambas configuraciones deberían estar usando WGS84
).
Si no, ¿la diferencia se debe a las diferentes fórmulas en uso (Vincenty para geopy
vs. Karney para pyproj
)? Por ejemplo, el error de redondeo citado aquí .