WGS84 lat / longにポイントがあり、それらの間の「小さい」距離(たとえば5km未満)を測定したいと思います。
http://www.movable-type.co.uk/scripts/latlong.htmlのHaversine式を使用できますが、非常にうまく機能します。
ただし、Python Shapelyライブラリを使用して、距離よりも多くの操作を実行できるようにしたいと考えています。作業している規模では、平らな地球で十分な近似値であるためです。地理座標をデカルト座標に確実に投影するために、Pythonを使用proj4
していますが、思ったよりも大きなエラーが発生しているようです。
ローカルUTMゾーンを使用すると、数メートルのヘイバーシンの差が生じますが、これは問題ありません。しかし、UTMゾーンを解決する必要はありません(ポイントは世界中にある可能性があります)。そのため、「球面メルカトル」で試しましたが、ヘイバーシンと投影距離の違いは100%をはるかに超えています。これは、球形メルカトルに本当に適していますか?私が本当に欲しいのは、世界のどこからでも5km以内の2つのポイントの実行可能なデカルト投影です。
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)
この時点で、それらの間の避難距離は394mで、utmゾーン27、395mを使用しています。しかし、球体メルカトル図法を使用すると、デカルト距離は904mになります。