共有エリアの平均線ストリングで2つの交差するポリゴンを分割する方法(QGIS / python shapely)


9

2つのポリゴンがあります。

POLYGON((-5 -5、-5 5,5 5,5 -5、-5 -5))POLYGON((1 1、1 7、7 7、7 1、1 1))

そしてそれらを均等に分割したいと思います。結果は赤いマークされたラインに沿って分割されます。

私はqgis / pythonを使用していますが、pythonを使用したいと思っています。

LINESTRING(1 5,5 1)


4
あなたの問題は一般的ですか?明らかに、これら2つのポリゴン以外にも適用するソリューションを意図しています。どのようなポリゴンを考えていますか?「均等」とはどういう意味ですか?分割はラインセグメントに沿っている必要がありますか、それとも非線形アークに沿っている必要がありますか?ポリゴンの交差が複数のコンポーネントで構成されている場合、または単純に接続されていない場合はどうなりますか?出力はどのような形式を取る必要がありますか?それは交差点または各ポリゴンを分割するべきですか、それとも単に分割線である必要がありますか?
whuber

1
不規則なポリゴンで作業していますが、交差しない2つのポリゴンが必要です。この場合、言及されている元のポリゴンと望ましい結果はPOLYGON((-5 -5、-5 5,1 5,5 1,5 -5、-5 -5))POLYGON((1 5、1 7、 7 7、7 1,5 1,1 5))
OLS 2012年

1
ポリゴンのいずれかまたは両方にリングがある(つまり、単純に接続されていない)場合、問題は困難です。
whuber

回答:


5

ボロノイポリゴンを使用するアプローチを1回使用しました。私はそれを手作業で行い、手際よくどうやってそれを行うことができるのか漠然とした考えしかありませんが、これがその方法です。

まず、重なり合う各ポリゴンの頂点を抽出し、それらからボロノイポリゴンを作成します(ベクター>ジオメトリツール>ノードとベクターを抽出>ジオメトリツール>ヴォノノイ)。結果の形状を使用して、重なり合う領域を2つに正確に分割する線を描くことができます。(明るい緑の線) ボロノイ

重なり合うポリゴンでボロノイレイヤーをクリップし、元の形状から重なりを削除して、クリップしたボロノイポリゴンを元の形状で貼り付けます。選択、マージ、ボイラ!

さて、私のものは本当に単純な形なので、少し粗雑に見えます。しかし、それを高密度化し(ベクター>ジオメトリツール>密度ジオメトリ)、既存の各頂点の間に20個のノードを追加すると、次のようになります。

densigy_voronoi

それははるかに良いです。変更する形状が少量であれば簡単です。


これは良い考えです。しかし、その明るい緑色の線はどこから来ているのでしょうか。また、その領域が2つの等しい部分に分割されていることをどのようにして知るのでしょうか。
whuber

このプロセスは、 `SELECT astext(intersection(geomFromText( 'POLYGON((-5 -5、-5 5,5 5,5 -5、-5 -5))'、4326)、geomFromText( 'POLYGON( (1 1、1 7、7 7、7 1、1 1)) '、4326))); astext -------------------------------- POLYGON((1 5,5 5,5 1,1 1,1 5 )」?
OLS

ボロノイ多角形の妥当性から来ています。ポイント間のスペースを均等に分割します。そうでないと、「中央」の線が境界をたどらないため、ポリゴンを高密度化する必要があるのはそのためです。明るい線については、中央がどこにあるかを示すために手動で描きます... PostGISコマンド(私はPostGISの初心者です)については、交差する領域のみを選択し、分割はしないと思います。
fgcartographix '25年

1
そうは言っても、それが同等の部分になるとは言いませんでした。その方法は、川の中心線を見つけるために使用されます。川に湾がある場合は、真ん中の線がそこに引き寄せられます。しかし、それは入りませんので、それでもそれを「中央に」置きます。
fgcartographix
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.