私の質問は、私がを使用していないことを除いて、ポリゴン間の素朴なセットへの未回答の分割オーバーラップにかなり関連していshapely
ます。PostgreSQL10でPostGIS 2.4を使用しています。
管理ユニットのマルチポリゴンを含むテーブルがあります。形状は陸域のみをカバーしています。私の目標は、それらを水中に一定距離伸ばすことです。
現在のポリゴンを水中に拡張するために、バッファを実行してから、テーブル内の他のすべてのジオメトリを差し引きます。これにより、ジオメトリに隣接するバッファーがクリップされ、レイヤーに現在何もないバッファーが保持されます。だから、次のようなもの:
SELECT c1.name
, ST_Difference( ST_Buffer( ST_Union(c1.geom), 250 )
, (SELECT ST_Union(c2.geom)
FROM foo.county AS c2
WHERE c2.name <> c1.name)
)
FROM foo.county AS c1
GROUP BY c1.name;
ただし、これはもちろん、2つのポリゴンが水の端で互いに出会うオーバーラッピングバッファーと、狭い海峡をまたがって与えます。
(付録のような半島のため、ジオメトリのポイントが赤よりも青に近くないため、左側の小さな紫のスライバーは完全に赤のポリゴンに割り当てられていることに注意してください。)
これは私が行き詰まっているところです。オーバーラップ(紫の部分)を、バッファリングされていないポリゴンと等距離の線に沿って2つのばらばらのポリゴンにカットし、それらのスリーバーをバッファリングされた郡から減算します。
バッファが3つ以上重なるケースはないと思います。そこに着いたら、私はその橋を渡ります。
ST_VoronoiPolygons
ポイントの代わりにポリゴンの周りを使用するのと似ていますが、まったく同じではないような匂いがします。
これは、理想的には、PostGIS関数として、QGISジオプロセシング機能として、または一部のPythonライブラリに存在しますか?
ExteriorRing
し、Intersects
しかし、休日の上にそれを仕事に時間がありませんでした。