180°子午線と極を正しく処理する交差アルゴリズム?


9

180子午線と極を正しく処理するよく知られた交差アルゴリズムはありますか?

たとえば、南極を表す緯度と経度の値のリストがあるとします。飛行機を表す単純なポリゴンもあるとします。飛行機が南極大陸の上にあるかどうかを知りたいです。

フラットな座標系には経度-180および180、緯度-90および90にエッジがあるため、一般的な2Dポリゴンの交差は、yに緯度を使用し、xに経度を使用するだけでは機能しません。南極大陸は3つの端でページから外れます。

回答:


14

(フィールドとしての)GISは、地球の表面に実際に取り組むときにそれほど熱くなりませんでした。

たとえば、問題が完全に定義されていません。ポリゴンのエッジが直線で構成されていることがわかっている2Dとは異なり、それらは地球上で何ですか?大円の弧は、頂点間の距離を最小化するのに適していますが、それだけではありません。たとえば、直線(つまり、地球の表面の下を移動する)は、別の選択肢です。(Rumbbラインも選択可能ですが、特に極の近くでは、おそらく馬鹿げたラインになります...)WRTエッジの解釈に関する優れたリンクは次のとおりです:http : //blog.opengeo.org/2010/08/10/shape-of -a-polygon /

他の人が言及した特異点に加えて、プロジェクトから2D、次に交差するアプローチのもう1つの大きな問題は、新しく作成された交差ポイント(ポリゴンエッジが交差する場所)が場違いになり、使用する投影に依存することです。(これが、高密度化の推奨の原因であると私は思います:中間の頂点のトンを追加することにより、ポリゴンエッジの中央の投影からのエラーを減らすことができます。)

2Dへの投影のすべての妥協案と回避策を作りたくないと考え、自分で何かを考えてコーディングすることを考えている場合、クライアントとの取引のために、プロトタイプ(およびプロトタイプのみ!)のコードを少し実行しました。これとともに。

これがアプローチのスケッチです。ベクトルとは何か、ドットクロス積の意味を知る必要があります。(注意:ウィキペディアはクイックリンクには便利ですが、トピックへの最初の導入であれば十分です。優れた3Dグラフィックチュートリアルが役立ちます。)

  • 球上の点を単位デカルト3Dベクトルで表します。地球の表面上の点は、ベクトルを無限に長い光線に延長した場合、それが地球の表面と交差する場所です。
  • 大円を原点を通る平面で表します。(3Dでは、原点を通る平面を定義するには、単一の単位ベクトルで十分です。これは平面に垂直です。)大円は、平面全体と地表面の交点です。
  • 2つの平面を交差させることにより、2つの大円の交点を見つけることができます。
  • 大円の弧を2点で定義します。大円の法線を定義するベクトルは、始点と終点のベクトルの外積です。
  • 大円上にあることがわかっている点が円弧内にあるかどうかを判断するには、次のような2つの平面を作成します。大円の平面に垂直で、1つは始点を含み、もう1つは終点を含み、向き合っています。次に、ポイントは、両方の平面の「内側」にある場合、円弧上にあります。(視覚化を助けるために、あなたはパックマンの笑顔を作成しました。彼が弧を押しつぶすときの笑顔です。テストポイントが顎の間にある場合は、大円の上にあることがわかっているので、弧の上にあります。)
  • 2つの円弧が交差するかどうかを判断するには、対応する大円の交点を2つ見つけ、各点をテストして、両方の円弧内にあるかどうかを確認します。
  • 曖昧さの少ない定義:ポリゴンはポイントのコレクションであり、各ポイントは大円の弧で構成されるエッジで接続されています。ポイントは、ポリゴンのエッジに沿って地球の表面に沿って歩く場合、ポリゴンの「内側」が左側になるように順序付けられています。ここでは、複雑なポリゴン(島、穴、自己交差)を除外します。
  • 対応するベクトルの内積の符号を使用して、点が平面の右側にあるか左側にあるかを確認できます。(これは、大円を移動するときに、球の表面上の点が左または右にあるかどうかに相当します。)
  • ポイントがポリゴンの内側にあるかどうかを判断する正確なテスト:すべてのエッジの左側にありますか?
  • これで、ポイントがポリゴンの内側にあるかどうかをテストし、エッジの交差を判別することができます。ポリゴンとポリゴンの交差の構成要素です!このコメントのマージンは小さすぎて完全なアルゴリズムを書き出すことはできませんが、基本的な手順は次のとおりです:(a)すべての交点を見つけてから(b)エッジをウォークし、交点に遭遇したときに歩くポリゴンを交互に切り替えます。
  • 上記のすべてが機能したら、高速化するためのインデックス作成戦略について考え始めます。これは、輪郭を描くポイントインポリゴンIがエッジ数でO(n)であり、ポリゴン交差O(m * n)がエッジ。

ふhe。

このアプローチにはいくつかの大きな利点があります。上記のすべての演算は、乗算と加算のみに要約されます。(データをこの表現に変換した後:たとえば、緯度/経度の座標はデカルトXYZベクトルを取得するためにいくつかのトリガーを必要とします。)極または座標系に特異点はなく、心配するほど多くの特殊なケースはありません(特殊なケースの例) :平行な重なり合うエッジ)。

コードを見ると、誰か他の人がリンクしているSpheresパッケージがこのアプローチの一部を実行しているように見えますが、少し半分焼き付けられているように見えます。

PostGISも同様にgeographyデータ型に対して同様のアプローチを使用する場合がありますが、私は内部を調べていません。空間インデックスの場合、少なくとも、3Dデカルト上のRツリーを使用することは知っています。

(注:この回答は長くなりすぎて、おそらくブログの投稿に編集するつもりです...フィードバック/コメントは大歓迎です!)


5

多くの大きなポリゴンで機能する一般的なソリューションを実際に探しています。

これまでに読んだ答えのほとんどは、当然、機能に適した投影法を見つけることに焦点を当てています。これは直感に反するかもしれませんが、ここでは、プロジェクションがうまく機能しない場合ではなく、プロジェクションが機能しない場合を検討する必要があります。

一部の予測は1点でのみ機能しません。これらはいわゆる「グローバル」予測の1つです。良い例は、方位角等距離です。投影できない唯一の点は、その原点と正反対の点です。(実際には、その最後の点を投影できないことは厳密には真実ではありません。技術的な問題に光沢があります。反対の極で投影が深刻な問題を経験することで十分です。)

したがって、操作するすべてのポリゴンの和集合の外側に単一の点Pを見つけることができる場合、必要なのは、この単一の点でのみ失敗するグローバル投影内で作業することだけです。(たとえばPの正反対の点を中心とする斜めの等距離の方位角を使用します。)

(そのようなポイントを自動的に見つけることができます。たとえば、地球を覆うポリゴンを作成し、すべてのフィーチャの結合をわずかにバッファーし、このバッファーを地球のポリゴンから削除し、残っているものの中の任意のポイントを選択します。バッファリングの理由投影が失敗する特異点に近づかないようにするのが最善であるということは、より良いことです。これは計算精度の問題です。)

等距離に、コンフォーマル(含む望ましい特性、グローバル突起がたくさんあり、例えば、ステレオ)と等しい面積は。したがって、分析にグローバルな予測を選択することは重大な制限ではありません。

主な制限は、世の中で最も人気のあるソフトウェアであるArcGISが、グローバルプロジェクションの多くの斜めバージョンをサポートしていないことです。:-(


3

これは予測で解決できます!

縮尺の「端」が-180と+180にあるからといって、それらの端でマップを考慮する必要があるという意味ではありません。

EPSG:32761(http://spatialreference.org/ref/epsg/32761/)を使用します

緯度と経度の値をUPS空間の座標に変換すると、通常のジオメトリ計算を使用して、飛行機が南極上空にあるかどうかを判断できます。

Universal Polar Stereographic座標系の詳細については、http//en.wikipedia.org/wiki/Universal_Polar_Stereographic_coordinate_systemをご覧ください。

巨大なポリゴンの交差アルゴリズムを決定するだけの場合は、地球を回転楕円体(または球体)として扱い、球体ジオメトリを使用してポリゴンを分析します。

GPL化されたSpheresと呼ばれるライブラリを見つけたので、そのコードを確認して、弧の交差と「球面ポリゴン内のポイント」にどのアルゴリズムを使用するかを正確に確認できます。

ただし、これらのポリゴンを平面(紙や画面など)に描画する場合は、プロジェクションまたは少なくともプロジェクションスタイルを選択する必要があります。


しかし、どの投影法を使用するかをどのように決定しますか?Antarticaの特定のケースではUPSを使用できることに同意しますが、半球を横切る任意の多角形がある場合はどうなりますか?おそらく、南極よりも良い例は、現在日光がある場所を表すポリゴンです。
Sean、

「正しい投影法を選択する」は、おそらくコミュニティのwikiトピックとして素晴らしいでしょう。一般的に、プロジェクションを選択したのは、特定のケースにすでに到達しているためです。ポリゴンがどこにあるかわからない場合は、地球の原点をポリゴンの中心に変換し、デカルト座標を使用することをお勧めします。
mwalker

多くの大きなポリゴンで機能する一般的なソリューションを探しています。各ポリゴンにカスタムプロジェクションを使用する必要がある場合、パフォーマンスが低下するようです。
ショーン

1

デカルト座標の使用には問題がありますが、あなたが提供した例には問題がありません。座標空間のエッジで囲まれた南極大陸を多角形で覆った場合、次のようになります。

南極大陸
(ソース:geohack.net

平面と大陸の交点は、複雑な変換を実行せずに安全に計算できます。


実際、これは機能し、別の投影法に変換する必要はありません。交差する3つのエッジに沿って「南極」ポリゴンを閉じるだけです。飛行機のポリゴンの重心も使用します。これは、ポリゴンの交差よりも、ポイントがポリゴン内にあるかどうかを判断する方が簡単だからです。
mwalker 2010

このアプローチはあまり好きではありません。大きな歪みが発生し、交差が真となる場合がありますが、そうではありません。
George Silva、

大円の距離を計算したり、極付近の面積を計算したりするなど、これ投影することが重要になるいくつかのケースを考えることができます。おそらく何かが足りないかもしれませんが、ここで要求された交差点がこれらの条件でどのように変化するかはわかりません。
scw

飛行機の例は完璧ではなかったと思います。より良い例は大きな雲かもしれません。
Sean、

実際、scw、あなたは正しいです。ポイント分析では、これはまったく問題ではなく、距離と面積の計算にのみ当てはまります。私の間違い:P
ジョージシルバ

0

この問題の1つの解決策は、2次元の座標系ではなく、地球のある種の3次元の座標系を使用することです。2Dポリゴンに地球の中心への半分の距離など、大きな仮想的な深さを与える場合、ポリゴンは地球の表面上の曲線としてモデル化する必要はありません。頂点のみが表面にあることで十分です。


0

可能な解決策は、ポリゴンをすべてのエッジ(子午線と極)でサブポリゴンにカットすることです。ソフトウェアは、元のポリゴンとサブポリゴンの間の何らかの参照を維持することもできます。


0

飛行機の重心を取り、方位角投影の接点として使用します。また、現在日光が当たっている地球の領域のような場合に、ジオメトリを投影する前にジオメトリを高密度化する必要があります。


これは高価に聞こえます。飛行機が多い、または雲が多い場合はどうなりますか?「デンシファイ」の意味も教えてください。
Sean、

はい、それは高価になります。これをグローバルに行うために、多分平面はおそらく行く方法ではありません。球面三角法アプローチは、ワールドワイドデータセットのベクトルポリゴンオーバーレイの基礎として使用できるようです(たとえば、地球の何パーセントが昼光と雲で覆われているか)。私が知っているすべてのポリゴンオーバーレイは平面ベースです。en.wikipedia.org/wiki/Spherical_trigonometry
Kirk Kuykendall 2010
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.