¿Buffering polígono hasta que golpea al vecino usando PyQGIS?

8

Tengo un archivo shape formado por varios polígonos. Los polígonos vecinos a menudo comparten un atributo.

Lo que necesito hacer es amortiguar estos polígonos en función del atributo común. Sin embargo, me gustaría expandir dichos búferes hasta que se encuentren, momento en el que pueden detenerse.

Tengo una maqueta a toda prisa:

malDrawExample

Todo lo que tengo en cuanto al código es lo siguiente:

from qgis.core import *
from qgis.analysis import *

layer=qgis.utils.iface.activeLayer() 

QgsGeometryAnalyzer().dissolve(layer, "D:/test_dissolved.shp", onlySelectedFeatures=False, uniqueIdField=3, p=None)

A decir verdad, no conozco muy bien la documentación de QGIS API y, a pesar de mis mejores esfuerzos, no puedo encontrar un método adecuado para esto. QgsGeometryAnalyzer().dissolveme permite disolver el búfer, pero eso no es lo que busco.

¿Debería estar mirando en otra dirección aquí?

Ingwe
fuente

Respuestas:

5

Algo que podría probar es un proceso de Thiessen en el que voronoi los polígonos y luego se disuelven con atributos similares. No sé qué sería esto en Python, pero tal vez los pasos sean útiles para usted.

Caballero
fuente
Voy a intentar descubrir la ruta Voronoi usando pyQGIS y ver a dónde me lleva. Prefiero la idea de usar una solución de código abierto.
Ingwe
¿Qué quieres decir con código abierto? QGIS y todas sus herramientas están bajo la licencia gratuita de código abierto.
Knightshound
2

Probablemente desee explorar las funciones de análisis de ráster. Consulte ¿Cómo crear una línea central para cada polígono en la base de datos de cañones submarinos utilizando ArcGIS for Desktop Basic? y ¿ Crear polígonos de Thiessen (Voronoi) usando líneas (en lugar de puntos) como características de entrada? para mayor inspiración

Esto requiere que utilice una resolución de trama adecuada, por supuesto.

bugmenot123
fuente
Me gusta esta idea de convertirla en un ráster y se me ocurrió, pero ¿un conjunto de datos grande no daría lugar a un tiempo de procesamiento muy lento?
Ingwe
Tal vez no sea más lento que hacer lo mismo iterativamente con vectores.
bugmenot123
1

Tuve una tarea ligeramente relacionada el otro día. En teoría, los polígonos voronoi con puntos centrales de construcción (ponderados) deberían ser la solución para su caso, pero no funcionó para mí; PostgreSQL no es lo que solicitó, pero, como solución alternativa, si se trata de la 'línea central' entre cada edificio que está buscando para el primer paso, vale la pena probar PostGIS ST_ApproximateMedialAxis . Tendría que crear un polígono base para toda el área de estudio y recortar los polígonos de construcción antes de aplicar la función en el polígono base para obtener resultados relacionados. Podría funcionar, podría no ...

geozelot
fuente