Como implementar o cálculo de viewshed?

11

Estou procurando uma maneira de implementar a visibilidade (também conhecida como viewhed). Encontrei uma pergunta anterior do GIS SE que sugeria alguns aplicativos GIS (não é o que eu preciso - estou tentando incorporar os cálculos) e também o SAGA. O SAGA se parece mais com o que estou procurando (classes C ++, Java, C #), mas não consigo entender o suficiente da documentação da API para descobrir quais classes eu preciso instanciar (ou subclasse).

Não estou ligado à ideia do SAGA - estou apenas procurando por biblioteca / mecanismo que possa fazer cálculos de intervisibilidade.

As restrições são que ele precisa ser:

  • razoavelmente "leve" (como eu gostaria de poder cobrir incorporado / móvel)
  • código-fonte aberto razoavelmente (já que meu aplicativo será código-fonte aberto, embora eu seja flexível em exatamente qual licença, desde que seja compatível com GPL).

Alguém pode recomendar tal biblioteca ou mecanismo e fornecer uma descrição ou link para qual parte da biblioteca ou mecanismo eu preciso usar para cálculos de exibição?

Como alternativa / além disso, também aprecio referências a documentos ou tutoriais que explicam como fazer esses cálculos de maneira eficiente (conforme aplicável a dispositivos embarcados / móveis, para que uma implementação baseada em GPU possa não ser tão útil quanto algo que é mais geral e lida com dispositivos de baixa potência)

Minha preferência é uma implementação existente, em vez de criar algo pessoalmente (que é uma opção de backup).

Edit: C ++ não é um requisito firme - qualquer coisa razoavelmente portátil (C #, C ++, Java) fará. Estou tentando criar uma biblioteca ou modelos em vez de incorporar um aplicativo grande.

BradHards
fonte
2
Você realmente precisa de um algoritmo ZTV completo? Talvez modele o terreno no OpenGL e analise os resultados disso? Os smartphones possuem uma aceleração gráfica cada vez mais boa que você pode explorar. O OpenGL suporta até projeções ortográficas.
Matthew Snape
Estou feliz desde que produza as respostas "certas", portanto o OpenGL vale a pena dar uma olhada. Você tem um exemplo / ponteiro que faz isso nos dados do tipo GIS?
21312 BradHards

Respostas:

8

Como você já viu na pergunta GIS SE mencionada , não parece haver muito na maneira de exibir pacotes independentes, pelo menos no mercado de código aberto, além do SAGA e GRASS GIS. Além de escrever um wrapper em torno do código para esses itens, você pode acabar implementando o viewhed infelizmente. (Embora eu gostaria de ser corrigido nisso.)

Se você ler a documentação para a função GRASS r.viewshed , ela fornece uma descrição ampla do algoritmo e uma referência ao documento a seguir, que discute minuciosamente um algoritmo de visualização:

Visibilidade computacional em terrenos na memória externa . Herman Haverkort, Laura Toma e Yi Zhuang. Nos Anais do 9º Workshop de Engenharia de Algoritmos e Experiências / Workshop de Algoritmos Analíticos e Combinatória (ALENEX / ANALCO 2007).

Como alternativa, o artigo da Wikipedia no Viewshed fornece referências:

Wu, H., Pan, M., Yao, L. e Luo, B. (2007). Um algoritmo serial baseado em partição para gerar Viewshed em DEMs maciços . Revista Internacional de Ciência da Informação Geográfica, 21 (9), 955-964.

om_henners
fonte
Não é exatamente a resposta que eu esperava, mas a melhor resposta fornecida. Muito obrigado pelo seu trabalho nisso.
28812 BradHards
Não se preocupe. Boa sorte com isso!
Om_henners #
4

Existe um pacote de freeware chamado RadioMobile, projetado para estudos de comunicação por rádio que gera um ponto de vista. A saída é baseada em uma entrada DEM e pode ser um vetor (arquivo de ponto) ou Raster. Consegui usar o arquivo de pontos vetoriais para criar polígonos através de alguns scripts que terei prazer em compartilhar com você. Como você pode definir uma paleta na saída de varredura, também pode converter a varredura em vetor usando gdal.

O programa possui uma interface gráfica, mas também pode ser executado em modo de lote, para que você possa incorporá-lo facilmente a um programa. Embora existam muito mais opções do que as necessárias para um viewhed tradicional, você pode configurá-las como nulas para que efeitos como a potência do transmissor não sejam incluídos - consulte http://www.g3tvu.co.uk/RM_Batch_Files.htm

O programa está em http://www.cplus.org/rmw/rme.html O autor também é muito útil.

Espero que isto ajude,

GeorgeC
fonte
Interessante, mas não parece ser de código aberto e apenas para janelas. Portanto, isso não vai funcionar em um ambiente móvel.
28812 BradHards