Tôi đã có điểm trong WGS84 lat / long và tôi muốn đo khoảng cách "nhỏ" (chưa đến 5km) giữa chúng.
Tôi có thể sử dụng công thức haversine từ http://www.movable-type.co.uk/scripts/latlong.html và nó hoạt động rất tốt.
Tuy nhiên, tôi muốn sử dụng các thư viện Python Shapely để tôi có thể thực hiện nhiều thao tác hơn chỉ là khoảng cách và vì ở quy mô tôi đang làm việc, một trái đất phẳng là một xấp xỉ đủ tốt. Để dự đoán đáng tin cậy các hợp đồng địa lý theo tọa độ cartesian, tôi đang sử dụng Python proj4
, nhưng dường như nhận được các lỗi lớn hơn tôi muốn.
Nếu tôi sử dụng vùng UTM địa phương, tôi sẽ nhận được sự khác biệt giữa haversine của một vài mét, điều đó là tốt. Nhưng tôi không muốn phải tìm ra vùng UTM (điểm có thể trên toàn thế giới), vì vậy tôi đã thử với "Mercator hình cầu" nhưng giờ đây, sự khác biệt giữa haversine và khoảng cách dự kiến là hơn 100%. Điều này thực sự đúng cho Mercator hình cầu? Tất cả những gì tôi thực sự muốn là một phép chiếu Cartesian khả thi cho hai điểm trong phạm vi 5km của nhau ở bất cứ đâu trên thế giới.
from shapely.geometry import Point
from pyproj import Proj
proj = Proj(proj='utm',zone=27,ellps='WGS84')
#proj = Proj(init="epsg:3785") # spherical mercator, should work anywhere...
point1_geo = (-21.9309694, 64.1455718)
point2_geo = (-21.9372481, 64.1478206)
point1 = proj(point1_geo[0], point1_geo[1])
point2 = proj(point2_geo[0], point2_geo[1])
point1_cart = Point(point1)
point2_cart = Point(point2)
print "p1-p2 (haversine)", hdistance(point1_geo, point2_geo)
print "p1-p2 (cartesian)", point1_cart.distance(point2_cart)
Tại thời điểm này, khoảng cách haversine giữa chúng là 394m, và sử dụng utm vùng 27, 395m. Nhưng nếu tôi sử dụng Mercator hình cầu, khoảng cách Cartesian là 904m, đó là cách.