Come implementare il calcolo del punto di vista?


11

Sto cercando un modo per implementare la visibilità (aka viewshed). Ho trovato una precedente domanda GIS SE che mi ha suggerito alcune applicazioni GIS (non quello di cui ho bisogno - sto cercando di incorporare i calcoli), e anche SAGA. SAGA assomiglia di più a ciò che sto cercando (classi C ++, Java, C #), ma non riesco a capire abbastanza della documentazione API per capire quali classi ho anche bisogno di istanziare (o sottoclasse).

Non sono legato all'idea di SAGA: sto solo cercando libreria / motore in grado di eseguire calcoli di intervisibilità.

I vincoli sono che deve essere:

  • ragionevolmente "leggero" (dal momento che mi piacerebbe essere in grado di coprire incorporato / mobile)
  • ragionevolmente open source (dal momento che la mia applicazione sarà open source, anche se sono flessibile su quale licenza purché sia ​​compatibile (L) GPL).

Qualcuno può raccomandare una libreria o un motore del genere e fornire una descrizione o un collegamento a quale parte della libreria o del motore è necessario utilizzare per i calcoli di visualizzazione?

In alternativa / in aggiunta, apprezzerei anche i riferimenti a documenti o tutorial che spiegano come eseguire questi calcoli in modo efficiente (come applicabile ai dispositivi incorporati / mobili, quindi un'implementazione basata su GPU potrebbe non essere utile come qualcosa che è più generale e gestisce dispositivi a bassa potenza)

La mia preferenza è un'implementazione esistente, piuttosto che creare qualcosa di me stesso (che è un'opzione di backup).

Modifica: C ++ non è un requisito fisso - qualsiasi cosa ragionevolmente portabile (C #, C ++, Java) farà. Sto cercando una libreria o modelli anziché incorporare un'applicazione di grandi dimensioni.


2
Hai davvero bisogno di un algoritmo ZTV completo? Forse modellare il terreno in OpenGL e analizzarne i risultati? Gli smartphone hanno un'accelerazione grafica sempre più buona che puoi sfruttare. OpenGL supporta anche le proiezioni ortografiche.
Matthew Snape,

Sono felice purché produca le risposte "giuste", quindi vale la pena dare un'occhiata a OpenGL. Hai un esempio / puntatore che lo fa dai dati di tipo GIS?
BradHards,

Risposte:


8

Come avresti visto dalla domanda GIS SE citata , non sembra esserci molto in termini di pacchetti stand-alone viewhed almeno nel mercato Open Source oltre SAGA e GRASS GIS. Oltre a scrivere un wrapper attorno al codice per questi algorthim, potresti finire per implementare il viewhed purtroppo. (Anche se mi piacerebbe essere corretto su questo.)

Se leggi la documentazione per la funzione GRASS r.viewshed fornisce un'ampia descrizione dell'algoritmo e un riferimento al seguente documento che discute approfonditamente un algoritmo viewhed:

Visibilità informatica su terreni nella memoria esterna . Herman Haverkort, Laura Toma e Yi Zhuang. Negli Atti del 9 ° Workshop su Algorithm Engineering and Experiments / Workshop on Analytic Algorithms and Combinatorics (ALENEX / ANALCO 2007).

In alternativa, l'articolo di Wikipedia su Viewshed fornisce riferimenti:

Wu, H., Pan, M., Yao, L., & Luo, B. (2007). Un algoritmo seriale basato su partizioni per la generazione di punti di vista su DEM massicci . International Journal of Geographical Information Science, 21 (9), 955-964.


Non esattamente la risposta che speravo, ma la migliore risposta fornita. Grazie mille per il tuo lavoro su questo.
BradHards,

Nessun problema. Buona fortuna!
om_henners,

4

Esiste un pacchetto freeware chiamato RadioMobile progettato per gli studi di comunicazione radio che genera una vista shed. L'output si basa su un input DEM e può essere un vettore (file di punti) o Raster. Sono stato in grado di utilizzare il file di punti vettoriali per creare poligoni attraverso alcuni script che sarò felice di condividere con voi. Dato che puoi impostare una tavolozza sull'output raster, puoi anche convertire il raster in vettoriale usando gdal.

Il programma ha una GUI ma può anche essere eseguito in modalità batch in modo da poterlo incorporare facilmente in un programma. Sebbene ci siano molte più opzioni di quelle richieste per un viewhed tradizionale, puoi impostarle su null in modo che gli effetti come la potenza del trasmettitore non siano inclusi - vedi http://www.g3tvu.co.uk/RM_Batch_Files.htm

Il programma è su http://www.cplus.org/rmw/rme.html Anche l'autore è molto utile.

Spero che questo ti aiuti,


Interessante, ma non sembra essere open source e solo per Windows. Quindi non funzionerà in un ambiente mobile.
BradHards,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.