Meine Frage hängt ziemlich mit der unbeantworteten Überlappung zwischen Polygonen in disjunkte Mengen zusammen, außer ich verwende nicht shapely
, ich verwende PostGIS 2.4 unter PostgreSQL 10.
Ich habe eine Tabelle mit Multipolygonen für Verwaltungseinheiten. Die Geometrien decken nur die Landfläche ab. Mein Ziel ist es, sie um eine bestimmte Distanz ins Wasser zu verlängern.
Um die aktuellen Polygone ins Wasser zu erweitern, mache ich einen Puffer und subtrahiere anschließend alle anderen Geometrien in der Tabelle. Dadurch wird der Puffer abgeschnitten, in dem die Geometrie Nachbarn hat, und der Puffer wird beibehalten, in dem die Ebene derzeit nichts enthält. Also so etwas wie:
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;
Dies führt jedoch natürlich zu überlappenden Puffern, bei denen zwei Polygone am Wasserrand sowie über schmale Meerengen aufeinander treffen:
(Beachten Sie, dass das kleine lila Faserband links vollständig dem roten Polygon zugeordnet werden sollte, da kein Punkt in dieser Geometrie aufgrund der anhangartigen Halbinsel näher an Blau als an Rot liegt.)
Hier stecke ich fest. Ich möchte die Überlappungen (violette Teile) in zwei disjunkte Polygone entlang einer Linie schneiden, die gleich weit von den ungepufferten Polygonen entfernt ist, und diese Splitter dann von den gepufferten Landkreisen subtrahieren.
Ich glaube nicht, dass ich drei oder mehr überlappende Puffer habe. Ich werde diese Brücke überqueren, wenn ich dazu komme.
Es riecht für mich nach etwas ähnlichem, aber nicht ganz Identischem wie die Verwendung ST_VoronoiPolygons
von Polygonen anstelle von Punkten.
Existiert dies entweder - idealerweise - als PostGIS-Funktion, als QGIS-Geoverarbeitungsfunktion oder vielleicht in einigen Python-Bibliotheken?
ExteriorRing
und Intersects
haben aber keine Zeit , um die Arbeit an es über die Feiertage hatte.