回答:
さて、私たちはここに私たちの質問に対する完全な答えではない答えを入れました、すなわち、質問は「答えるのにオープンなまま」になります。しかし、それは問題の問題の解決策です。これが私たちが使ったトリックです:
最初に結果を見てみましょう:
したがって、にleft
示すビルドされたポリゴンの特定のラインmiddle
。right
;)に示すように、これらは実際のポリゴンです。
以下のアルゴリズムShapely
では、Pythonのパッケージを使用しました。
MultiLineString
{:: M}buffer
と言いますeps
Polygon
{:: P}(ここの領域は正方形です)P.difference(MB)
{結果のポリゴン}注それは運転中に静かに高速であること。ただし、不足している点は、アルゴリズムが線からポリゴンを構築する元の方法ではないということです。それにもかかわらず、私たちが抱えていた問題には完璧に機能しました。
JTS Topology SuiteにはPolygonizerクラスがあり、これはほとんどこれを実行します。
あなたはPython Shapelyパッケージ、特にpolygonize ()を見るかもしれません
from shapely.ops import polygonize
)のpolygonizeはGEOSのGEOS.Polygonizeを使用することに注意してください。これはリンクへのリンクがあるリンクです...:|
polygonize
はまったく成功しませんでした。ただしShapely
、回答として投稿された解決策(実際にはトリック)を見つけることができたことを思い出していただきありがとうございます。
これが私たちが見つけた別の解決策です。
を使用し
DCEL
て、線に触れることからブロックを作成できます。
以下のためのPythonパッケージがある{ここ}。これは、いくつかのバグがある小さな実装です。それにもかかわらず、少し努力すれば、この問題に使用できます。次の段階にも注意してください。
ライン間のすべての交差が見つかる前処理段階。次に、すべての線が相互作用点でセグメントに分割されます。DCELに必要なのは、交点のリストと関連するエッジのリストです。
difference
操作が使用されている他の方法と比較してはるかに優れたパフォーマンスを提供します。