Saya punya poin di WGS84 lat / panjang dan saya ingin mengukur jarak "kecil" (kurang dari 5km) di antara mereka.
Saya dapat menggunakan rumus haversine dari http://www.movable-type.co.uk/scripts/latlong.html dan itu berfungsi dengan sangat baik.
Saya ingin menggunakan Python Shapely libraries, sehingga saya bisa melakukan lebih banyak operasi daripada hanya jarak, dan karena pada skala yang saya kerjakan, bumi yang rata adalah perkiraan yang cukup baik. Untuk memproyeksikan koordinat geografis dengan andal ke coes kartesius, saya menggunakan Python proj4
, tetapi tampaknya mendapatkan kesalahan yang lebih besar daripada yang saya inginkan.
Jika saya menggunakan zona UTM lokal, saya mendapatkan perbedaan antara haversine beberapa meter, yang baik-baik saja. Tapi saya tidak ingin harus bekerja di zona UTM (poin bisa di seluruh dunia), jadi saya mencoba dengan "Mercator bola" tetapi sekarang perbedaan antara jarak haversine dan proyeksi lebih dari 100%. Apakah ini benar untuk Mercator bola? Yang saya inginkan adalah proyeksi Cartesian yang bisa diterapkan untuk dua titik dalam jarak 5 km satu sama lain di mana pun di dunia.
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)
Pada titik ini, jarak haversine di antara mereka adalah 394m, dan menggunakan zona utm 27, 395m. Tetapi jika saya menggunakan Mercator bola, jarak Cartesian adalah 904m, yang jauh.