Estou procurando maneiras de calcular (em Python) o local de destino a partir de um ponto determinado com o alcance e o alcance.
Com base na comparação de resultados das duas bibliotecas no assunto ( geopy
e pyproj
), notei que há uma diferença crescente na saída final. Por exemplo, a 100 km é aproximadamente da ordem dos decímetros. Este é um exemplo mínimo do que quero dizer:
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))
Eu obtive estes 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
Minha principal pergunta é se estou fazendo algo errado (ambas as configurações devem estar sendo usadas WGS84
).
Caso contrário, a diferença se deve a diferentes fórmulas em uso (Vincenty for geopy
vs. Karney for pyproj
)? Por exemplo, o erro de arredondamento citado aqui .