Mi pregunta está bastante relacionada con la superposición dividida sin respuesta entre polígonos en conjuntos disjuntos, excepto que no estoy usando shapely
, estoy usando PostGIS 2.4 en PostgreSQL 10.
Tengo una tabla que contiene multipolígonos para unidades administrativas. Las geometrías solo cubren el área del terreno. Mi objetivo es extenderlos una distancia dada en el agua.
Para extender los polígonos actuales al agua, hago un búfer seguido de restar todas las demás geometrías en la tabla. Esto recorta el búfer donde la geometría tiene vecinos y retiene el búfer donde la capa actualmente no tiene nada. Entonces, algo como:
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;
Sin embargo, esto, por supuesto, me da un búfer superpuesto donde dos polígonos se encuentran en el borde del agua, así como a través de estrechos estrechos:
(Tenga en cuenta que la pequeña astilla púrpura de la izquierda debe asignarse completamente al polígono rojo, ya que ningún punto en esa geometría está más cerca del azul que el rojo debido a la península tipo apéndice).
Aquí es donde estoy atrapado. Quiero cortar las superposiciones (partes moradas) en dos polígonos disjuntos a lo largo de una línea equidistante a los polígonos sin búfer, y luego restar esas astillas de los condados con búfer.
No creo que tenga un caso de tres o más memorias intermedias superpuestas. Cruzaré ese puente si llego a él.
A mí me huele a algo similar pero no bastante idéntico a usar ST_VoronoiPolygons
pero alrededor de polígonos en lugar de puntos.
¿Existe esto, idealmente, como funciones de PostGIS, como la funcionalidad de geoprocesamiento de QGIS o tal vez en algunas bibliotecas de Python?
ExteriorRing
y, Intersects
pero no he tenido tiempo de trabajar durante las vacaciones.