Estou procurando uma maneira de criar um diagrama de voronoi com base em segmentos de linha em vez de pontos. Veja o exemplo abaixo (extraído desta apresentação ).
Idealmente, eu gostaria de algo que eu possa escrever em Python, mas uma solução usando ArcGIS ou similar também seria aceitável.
A única biblioteca para fazer isso que encontrei até agora é o openvoronoi , que parece promissor. Existem outros?
line
voronoi-thiessen
Snorfalorpagus
fonte
fonte
Respostas:
Nós (uma equipe da universidade) projetamos uma implementação para isso usando um complemento ArcGIS 10.0 e ArcObjects. O aplicativo é totalmente gratuito. A implementação usa uma metodologia raster que usa como pontos de entrada, linhas ou polígonos para criar diagramas de Voronoi comuns ou com pesos múltiplos (ou uma combinação dos itens acima, ou seja, você pode usar um de cada tipo de forma, criando um único diagrama definido de até três classes de recursos distintos). Ele ainda está em desenvolvimento, mas deve ser bastante estável, especialmente se você quiser apenas criar linhas. O complemento requer a licença do Spatial Analyst para operar. O código em si é de código aberto, portanto, sinta-se livre para fazer o que quiser.
https://github.com/UNTGeography/VoronoiDiagramsGIS
Ele usa um método semelhante ao da "Alocação Euclidiana" descrita na resposta do @ radouxju e usa o raster Flow Flow / Basin para criar polígonos vetoriais a partir do raster resultante.
fonte
Voronoï é inicialmente projetado para ganhar pontos. Aqui estão os dois métodos que posso imaginar para o seu problema (citando ferramentas do ArcGIS, mas provavelmente possíveis com formas bem torneadas):
1)
a) criar pontos ao longo das linhas (por exemplo, densificar e apresentar vértices para a linha)
b) criar polígonos de Thiessen
c) dissolva os polígonos de Thiessen com base nas linhas que eles cruzam
2)
a) com o analista espacial, calcule a alocação euclidiana para as linhas
b) converta cada zona em um polígono
fonte
Para alguns clientes, eu e alguns colegas de trabalho estamos trabalhando na criação de duas ferramentas de geoprocessamento que fazem isso. Embora as ferramentas de geoprocessamento não estejam disponíveis ao público, o python e o C # que usamos são:
Tanto o C # quanto o wrapper python realmente contam com a API C ++ Boost Voronoi: http://www.boost.org/doc/libs/1_54_0/libs/polygon/doc/voronoi_main.htm
Observe que a API consome muita memória. Isso não é um problema se você estiver usando Geoprocessamento para 64 bits, ArcGIS Pro ou QGIS. Essa é uma limitação se você estiver no ArcGIS Desktop, pois possui 32 bits. (Uma rede rodoviária detalhada de 40.000 linhas ou mais deve ser suficiente para atingir o limite de memória)
fonte
ET Geowizards (um plugin para Arc) tem uma ferramenta para isso que aceita Polylines (veja a captura de tela abaixo). Infelizmente, você precisará do produto licenciado para executar a ferramenta, mas acho que deve funcionar.
fonte
Além disso, mais uma maneira de resolver sua tarefa usando o PostgreSQL / PostGIS.
Se as linhas forem curtas e simples, execute o script:
Veja o resultado.
Se as linhas forem longas, execute o script:
Veja o resultado.
Se necessário, compacte o número de pontos nas linhas; no meu exemplo, este é o ponto 10.
Soluções originais.
Este script é chamado: ST_VoronoiDiagramsFromLines.
fonte