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.skeleton
que 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?
Respostas:
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:
Importar para PostGIS - use para importar seu conjunto de dados.
O PostGIS executa SQL - use para executar a
ST_StraightSkeleton
função.v.clean - use para executar a
rmdangle
ferramenta.Espero que isto ajude!
fonte
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_cmd
utilitá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.skeleton
GRASS na linha de comando.Para usar uma ferramenta de linha de comunicação no Python, use o
subprocess
módulo para passar a cadeia de comandos para o sistema.fonte