球の可視性グラフを計算する


9

いくつかのポリゴンを含むPostGISテーブルがあります(geographyデータタイプを使用して保存されています)。それらは球形の地球上の領域を表しています。

すべてのポリゴンの中から選択した頂点のペアごとに、これらの2つの頂点が互いに「見える」かどうかを計算します。(n *n -1)/ 2のペアがあります。ここで、nはテーブル内のすべてのポリゴンにわたる一意の頂点の総数です。 "お互いに見える"とは、 2つの頂点がテーブル内のどのポリゴンとも交差していません。

その計算を実行する最も速い方法は何ですか(できればPostgreSQL / PostGISで)。

うまくいくものを持っていますが、遅いです。私は単純にすべてのペアを反復処理し、それらの間のLineStringがポリゴンと交差するかどうかを確認します。(PostGISのgeographyデータ型は、球体に関するすべての難しい計算を処理します。)それで、速度を上げるかもしれない巧妙なデータ構造またはアルゴリズムがあるかどうか疑問に思います。


6
関連する概念:可視性グラフ。これを3Dではなく2Dで実行したい場合は、Gnomonic投影
whuber

「すべてのペアを反復する」とは、1つのラインがすべてのポリゴンと交差するかどうかをテストするFORループの手順があるということですか?その場合は(おそらく)より高速で、考えられるすべての組み合わせでラインストリングテーブルを作成し、ラインがポリゴンテーブルと交差するかどうかをテストする1つのクエリを実行します
シンプレックス10

問題のイラストを教えてください。
addcolor

球形の水平線を超えてすべてを除外できます(エッジ近くの高いオブジェクトのビットもプラス)。これは、近似座標境界ボックスですばやく実行できます。それ以外の場合は、基本的にNPは難しいと思います。
AnserGIS

回答:


1

見えないものを推測します。ビーチの頂点に立ち、隣接するポリゴンの2つの離れた頂点を見ているとします。次に、これらの頂点の背後にあるセクター全体の頂点は、この頂点からは見えないものと想定できます。

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