球状メルカトルとゾーンUTMの距離の測定


11

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になります。


UTMゾーンは、経度に基づいて簡単に「解決」できます。典型的な経度ラムダ、-180 <= lambda <180を選択し、それを使用してゾーン番号をInt((180 + lambda)/ 6)+1として計算します。緯度の記号を使用して、北と南を決定します。高緯度では特別な極地を使用する必要はありません。実際、極に近い位置では、ほぼすべてのUTMゾーンを使用できます。
whuber

回答:


17

はい、グローバルメルカトル図法を使用すると、この種のエラーが発生します。赤道で正確であり、赤道から離れる緯度で歪みが指数関数的に増加します。距離の歪みは、緯度60度で正確に2(100%)です。テストの緯度(64.14度)で2.904の歪みを計算し、904/394 = 2.294の比率と正確に一致します。(以前に2.301を計算しましたが、これはWGS84楕円体ではなく球体に基づいていました。差(0.3%)は、楕円体ベースの投影と球体ベースのHaversine式を使用することで得られる精度の感覚を与えてくれます。 )

どこにでも非常に正確な距離をもたらすグローバルな投影のようなものはありません。これが、UTMゾーンシステムが使用される理由の1つです。

1つの解決策は、すべての計算に球面形状を使用することですが、それを拒否しました(複雑な操作を行う場合は合理的ですが、決定は再検討する価値があるかもしれません)。

別の解決策は、比較するポイントに投影適合させることです。たとえば、子午線が関心領域の中心近くにある状態で、横メルカトル図法(UTMシステムなど)を安全に使用できます。子午線の移動は簡単です。すべての経度から子午線の経度を減算し、主子午線を中心とした単一の TM投影を使用します(UTMシステムの0.9996ではなく、1のスケールファクターを使用)。あなたの仕事のために、これはより多くなる傾向がありますUTM自体を使用するよりも正確です。正しい角度が与えられ(TMはコンフォーマル)、わずか数十キロメートル離れたポイントに対して非常に正確になります。6桁よりも高い精度が期待されます。実際、これらの適応されたTM距離とヘイバーシン距離の間の小さな違いは、楕円の歪みではなく、楕円体(TM投影に使用)と球体(ヘイバーシンが使用)の違いに起因する傾向があります投影。


それはかなり完璧に聞こえますが、既存のEPSG文字列を使用できるようにするのではなく、proj4の独自の初期化文字列を作成する必要があると思いますか?
カールP

1
+1は投影をポイントに適合させます。横メルカトルよりも横プレートカレーの方が好きですが、十分に小さい領域(「大規模」)で、関心領域の近くに「中心」にあるほぼすべての投影が良好な精度を提供します。
デビッドケーリー

@David興味深いアイデア。球体では、横プレートCarree(Cassini)は、gis.stackexchange.com / posts / 2964 / editで与えた近似式に近くなります(ここで許容される解決策になる可能性があります)。TMとTPCの式は、球体で似ています。楕円体では、TPCはわずかに単純です。TMはおそらくより多くのソフトウェアでサポートされています。
whuber

@Karl必要に応じて、TMゾーンを使用できます。すべての経度をシフトして、関心領域の中心点が選択したゾーンの中央子午線と一致するようにします。すべての距離に1 / 0.9996を掛け(すべての面積にこの係数の2乗を掛ける)、角度や方位を変更しないでください-計算で新しいポイントが生成される場合は、経度を元の座標系に戻すだけです。
whuber

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.