Tôi đang xem xét các cách tính toán (bằng Python) vị trí đích từ một điểm và phạm vi cho trước.
Dựa trên so sánh kết quả từ 2 thư viện trong chủ đề ( geopy
và pyproj
), tôi nhận thấy rằng có sự khác biệt ngày càng tăng trong đầu ra cuối cùng. Ví dụ, ở 100 km là khoảng thứ tự của decimet. Đây là một ví dụ tối thiểu về những gì tôi muốn nói:
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))
Tôi đã nhận được những kết quả này:
| 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
Câu hỏi chính của tôi là liệu tôi có làm gì sai không (cả hai cài đặt nên được sử dụng WGS84
).
Nếu không, sự khác biệt là do các công thức khác nhau được sử dụng (Vincenty cho geopy
so với Karney cho pyproj
)? Ví dụ, lỗi làm tròn được trích dẫn ở đây .