Esqueletizar vetores em QGIS / Python

8

Estou tentando encontrar uma ferramenta para criar um esqueleto de um grande conjunto de dados vetoriais usando o QGIS e seu pacote. Ele deve ser diretamente programável através de Python ou linha de comando (QGIS, GRASS, OGR etc. estão todos bem).

O alvo é um polígono grande e fino, com buracos que representam as áreas das ruas e eu preciso obter uma aproximação da rede de estradas por esqueletização.

O que eu encontrei até agora:

  • O GRASS 7.0 tem v.skeletonque deve ser bom o suficiente, mas parece não ter integração com o QGIS em um futuro próximo.
  • A CGAL possui algoritmos de esqueletização, é claro, mas o suporte ao Python é muito ruim.
  • pySkeleton não funciona para mim e provavelmente não tenho tempo para salvar o código.

Outras alternativas (esqueletizador openJump, esse antigo plug-in do ArcGIS ...) não podem ser facilmente conectadas ao QGIS / Python.

Alguma outra sugestão?

Jan Šimbera
fonte
4
O GRASS 7.0 é "diretamente programável por meio de Python ou linha de comando", então por que sua solução também deve estar tão fortemente ligada ao QGIS? Além disso, e o PostGIS? Como seus dados são armazenados?
alphabetasoup
2
Gostaria de postar a solução como um plug-in QGIS diretamente utilizável - portanto, gostaria de manter a versão GRASS fornecida pelo QGIS.
: 22615 Jan Šimbera

Respostas:

6

Este documento "Esqueletizando polígonos usando o PostGIS" descreve um processo que utiliza ferramentas do PostGIS e GRASS , que podem ser chamadas. Ele menciona o uso do PostGIS para criar um esqueleto dos vetores e limpá-lo usando o PostGIS novamente ou o GRASS.

Existem ferramentas existentes na caixa de ferramentas de processamento que, esperançosamente, simplificam as coisas ao chamar a partir do Python / linha de comando, como:

Espero que isto ajude!

Joseph
fonte
Obrigado! No entanto, tenho que supor que não PostGIS é instalado ...
Jan Šimbera
@ JanŠimbera - Muito bem-vindo amigo e boa sorte! Soa como um problema muito interessante você tem :)
Joseph
4

Uma opção, de certa forma geral, pode ser usar o módulo de esqueletização da grade do SAGA ( http://www.saga-gis.org/saga_module_doc/2.1.3/imagery_segmentation_1.html ), através do QGIS ou usando o saga_cmdutilitário de linha de comando. Você teria que converter seu polígono em uma varredura SAGA primeiro.

Caso contrário, conforme declarado por @ Alpha-beta-soup, você poderá usar o v.skeletonGRASS na linha de comando.

Para usar uma ferramenta de linha de comunicação no Python, use o subprocessmódulo para passar a cadeia de comandos para o sistema.

Paulo Raposo
fonte
Obrigado pela sugestão. Prefiro não converter para varredura, pois a extensão é grande e preciso do resultado com uma boa resolução; Estou pensando nisso como uma opção de último recurso.
Jan Šimbera 22/11/2015