WGS84 enlem / boylamda puanlarım var ve aralarındaki "küçük" (5 km'den az) mesafeleri ölçmek istiyorum.
Http://www.movable-type.co.uk/scripts/latlong.html adresinden haversin formülünü kullanabilirim ve çok iyi çalışıyor.
Yine de Python Shapely kütüphanelerini kullanmak istiyorum, böylece sadece mesafeden daha fazla işlem yapabiliyorum ve çalıştığım ölçekte düz bir dünya yeterince iyi bir yaklaşım. Coğrafi koordinatları güvenilir bir şekilde kartezyen bir koordine yansıtmak için Python'ları kullanıyorum proj4
, ancak istediğimden daha büyük hatalar alıyor gibi görünüyor.
Yerel UTM bölgesini kullanırsam, birkaç metrelik haversin arasında farklar elde ederim, ki bu iyi. Ama UTM bölgesini çalışmak zorunda değilim (noktalar dünya çapında olabilir), bu yüzden "küresel Mercator" ile denedim ama şimdi haversin ve öngörülen mesafeler arasındaki farklar% 100'ün üzerinde. Küresel Mercator için bu gerçekten doğru mu? Gerçekten tek istediğim, dünyanın herhangi bir yerinde 5 km'lik iki nokta için uygulanabilir bir Kartezyen projeksiyon.
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)
Bu noktada, aralarındaki haversin mesafesi 394m ve utm bölgesi 27, 395m'dir. Ancak küresel Mercator kullanırsam, Kartezyen mesafesi 904m'dir, bu da yoldan çıkar.