Extraindo a linha central de um polígono complexo em PostGIS / Python

8

Alguma idéia de como extrair a linha central do polígono a seguir (Fig1) usando funções PostGIS ou módulos Python? Eu estava tentando a função Voronoi, mas isso não é útil para esse tipo de forma. Eu quero algo como Fig2 blackline.

Fig1: Forma do polígono Fig2: Linha central

Zia
fonte
2
Você pode olhar para esta resposta: gis.stackexchange.com/questions/29863/… Sei que ele usa o ArcGIS, mas a abordagem pode ser útil.
precisa saber é o seguinte
@Jakub Estou tentando configurar SFCGAL (necessário para a função Skeleton) para o meu PostGIS db já existente. Embora eu tenha instalado o libSFCGAL.soarquivo no /usr/local/libdiretório, mas não sei como trazer ST_StriaghtSkeleton()o db? Qualquer ideia?
Zia
O PostGIS precisa ser compilado com o suporte da SFCGAL, mas essa é uma pergunta diferente e não é algo com o qual estou muito familiarizado.
Jakub Kania 23/09
@Jakub Obrigado. Tenho alguma forma resolvido esta configuração SFCGAL por mim aqui
Zia

Respostas:

4

Pode ser uma ferramenta errada para você, mas você pode fazê-lo simplesmente com o plugin OpenJUMP e Skeletonizer. O plug-in pode ser baixado em http://sourceforge.net/projects/jump-pilot/files/OpenJUMP_plugins/More%20Plugins/JUMP%20Skeletonizer%20Plugin/

O arquivo zip contém um bom manual. O plug-in é destinado a riachos e massas de água, mas seu polígono imita um riacho para mim.

Este é o seu polígono enquanto eu o digitalizava. Observe os vértices nas linhas centrais das entradas / saídas.

insira a descrição da imagem aqui

Pontos de entrada digitalizados em uma camada separada. Os pontos devem se ajustar aos vértices no limite do polígono.

insira a descrição da imagem aqui

Use as ferramentas Skeletonizer e preencha os campos

insira a descrição da imagem aqui

Obter o resultado

insira a descrição da imagem aqui

user30184
fonte
Infelizmente, o arquivo jar não contém manual. Poderia, por favor, me orientar como adicionar este plugin à minha OpenJump-GUI?
Zia
Olhe dentro do zip , em skeletonizer-1.0 \ doc \, você deve encontrar o arquivo "SkeletonizerUserGuide.doc". A instalação é feita largando os arquivos jar do skeletonizer-1.0 \ lib \ no diretório lib \ ext no OpenJUMP.
user30184
No entanto, parece que a maioria dos jars ou versões mais recentes dessas já estão incluídas no OpenJUMP no \ lib ou no \ lib \ ext. Talvez seja melhor copiar apenas aqueles que parecem estar faltando. É necessário reiniciar após adicionar novos jarros.
user30184
Encontrei este frasco aqui . Mas eu estou recebendo este erro java.lang.Exception: Could not determine shapefile type - data is either all GeometryCollections or empty (Illegal State Exception)durante a execução deste plugin Skeletonizer
Zia
3

Se o seu polígono for raster, digitalize-o.

Uma vez que seu polígono é realmente um polígono :), uma primeira solução está, como o @WhiteboxDev disse, é o esqueleto reto, mas há o problema de que, além da linha central desejada, ele também retorna muitos segmentos irradiando dessa linha para a borda do seu polígono. Mas se você possui o PostGIS 2.2+, pode usar ST_ApproximateMedialAxis()o que deseja.

Marcos Dione
fonte