交差する線のセットからポリゴンを生成する


10

これは、すでに別の目的のために頼まれた、シンプルで非常に一般的な質問です(参照このリンクをし、これも、例えば)、ここでは、しかし、私たちは、探しているではないソフトウェアパッケージが、アルゴリズム我々が言う実装しようとすることができていることPython

したがって、以下に示すように、一連の線がマップされます(これらは既にトリミングされていますが、BTW)。
ポリゴンを生成するためのアルゴリズム/アイデア(赤いものを示しています)

ここに画像の説明を入力してください


外側の正方形の境界は既知ですか、それとも、入力ラインから読み取ることができますか?
Devdatta Tengshe 2013

回答:


5

さて、私たちはここに私たちの質問に対する完全な答えはない答えを入れました、すなわち、質問は「答えるのにオープンなまま」になります。しかし、それは問題の問題の解決策です。これが私たちが使ったトリックです:

最初に結果をみましょう:
ここに画像の説明を入力してください

したがって、にleft示すビルドされたポリゴンの特定のラインmiddleright;)に示すように、これらは実際のポリゴンです。

以下のアルゴリズムShapelyでは、Pythonのパッケージを使用しました。

  • 行==> MultiLineString {:: M}
  • 小さなを追加し、{:: MB} bufferと言いますeps
  • region ==> Polygon {:: P}(ここの領域は正方形です)
  • P.difference(MB) {結果のポリゴン}

それは運転中に静かに高速であること。ただし、不足している点は、アルゴリズムが線からポリゴンを構築する元の方法ではないということです。それにもかかわらず、私たちが抱えていた問題には完璧に機能しました。


4

JTS Topology SuiteにはPolygonizerクラスがあり、これはほとんどこれを実行します。

ここにあるソースコードを見て、それをPythonに変換できます


コードの説明にあるように、質問の作成者は期待どおりに機能しません。ノードのエッジ」
パブロ

1
JTSには、頂点で線を正しく分割するための操作があります。多分、OPもそれを見ることができます。
Devdatta Tengshe 2013

3

あなたはPython Shapelyパッケージ、特にpolygonize ()を見るかもしれません


Shapely(from shapely.ops import polygonize)のpolygonizeGEOSのGEOS.Polygonizeを使用することに注意してください。これはリンクへのリンクがあるリンクです...:|
開発者

での私たちの裁判polygonizeはまったく成功しませんでした。ただしShapely、回答として投稿された解決策(実際にはトリック)を見つけることができたことを思い出していただきありがとうございます。
開発者

2

これが私たちが見つけた別の解決策です。

を使用し DCELて、線に触れることからブロックを作成できます。

以下のためのPythonパッケージがある{ここ}。これは、いくつかのバグがある小さな実装です。それにもかかわらず、少し努力すれば、この問題に使用できます。次の段階にも注意してください。

ライン間のすべての交差が見つかる前処理段階。次に、すべての線が相互作用点でセグメントに分割されます。DCELに必要なのは、交点のリストと関連するエッジのリストです。


この方法は独自のソリューションであり、difference操作が使用されている他の方法と比較してはるかに優れたパフォーマンスを提供します。
開発者
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.