Buffer de polígono até atingir o vizinho usando PyQGIS?

8

Eu tenho um shapefile composto de vários polígonos. Polígonos vizinhos geralmente compartilham um atributo.

O que preciso fazer é armazenar em buffer esses polígonos com base no atributo comum. No entanto, eu gostaria de expandir os referidos buffers até que eles se encontrem, momento em que eles podem parar.

Eu tenho uma maquete às pressas:

poorlyDrawExample

Tudo o que tenho em termos de código é o seguinte:

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)

Na verdade, não sou muito versado na documentação da API do QGIS e, apesar dos meus melhores esforços, não consigo encontrar um método adequado para isso. QgsGeometryAnalyzer().dissolveme permite dissolver o buffer, mas não é isso que eu estou procurando.

Talvez eu devesse estar olhando em outra direção aqui?

Ingwe
fonte

Respostas:

5

Algo que você poderia tentar é um processo em que você voronoi os polígonos e depois se dissolve por atributos semelhantes. Eu não sei o que isso seria em python, mas talvez as etapas sejam úteis para você.

Cavaleiro
fonte
Vou tentar descobrir a rota de Voronoi usando pyQGIS e ver aonde isso me leva. Eu prefiro a idéia de usar uma solução de código aberto.
Ingwe
O que você quer dizer com código aberto? O QGIS e todas as suas ferramentas estão sob a licença de código aberto gratuita.
Knightshound
2

Você provavelmente deseja explorar as funções de análise de varredura. Consulte Criando uma linha central para cada polígono no banco de dados do canyon submarino usando o ArcGIS for Desktop Basic? e Criando polígonos de Thiessen (Voronoi) usando linhas (em vez de pontos) como os recursos de entrada? para mais inspiração.

Isso requer que você use uma resolução de varredura adequada, é claro.

bugmenot123
fonte
Eu gosto dessa idéia de converter em uma varredura e isso me ocorreu, mas um grande conjunto de dados não resultaria em um tempo de processamento muito lento?
precisa saber é o seguinte
Talvez não seja mais lento do que fazer o mesmo iterativamente com vetores.
precisa saber é o seguinte
1

Eu tive uma tarefa um pouco relacionada no outro dia. Em teoria, polígonos de voronoi com pontos de centro de construção (ponderados) devem ser apenas a solução para o seu caso, mas não funcionou para mim; O PostgreSQL não é o que você solicitou, mas, como solução alternativa, se for a 'linha central' entre cada edifício que você procura na primeira etapa, vale a pena tentar usar o PostGIS ST_ApproximateMedialAxis . Você teria que criar um polígono de base para toda a área de estudo e cortar os polígonos da construção antes de aplicar a função no polígono de base para obter resultados relacionados. Pode funcionar, pode não ...

geozelot
fonte