Alla ricerca di una funzione raster di costo-distanza veloce e open source da utilizzare nel codice


9

Ho cercato su Internet una funzione di costo-distanza veloce e open source che posso incorporare nel mio codice. La funzionalità dovrebbe fondamentalmente funzionare come l' implementazione di ArcGIS in cui posso specificare un raster di origine e un raster di costo e generare un raster di distanza di costo. Detto questo, l'implementazione non deve essere sofisticata come ArcGIS in quanto non ho necessariamente bisogno di inserire "raster" con metadati geografici incorporati - basterà una firma che prende semplici matrici numeriche poiché posso verificare che i dati si sovrappongano correttamente al momento chiamo la funzione.

Il mio intento specifico è calcolare la distanza di costo a un singolo punto al centro di un raster di costo 1000 x 1000 sulla base di un clic dell'utente, quindi l'esecuzione veloce è molto importante.

L'implementazione di AC # sarebbe l'ideale, ma guarderò tutto ciò che è là fuori.

Qualcuno sa di una libreria open source che supporta questo? Grazie per l'aiuto!

Risposte:


5

GRASS GIS ha un'implementazione in C r.cost( fonte , documentazione ) che utilizza un min-heap . In alternativa, è possibile utilizzare un pacchetto grafico come QuickGraph e Floyd-Warshall per calcolare il costo.

I recenti cambiamenti in GRASS 6.4 hanno reso r.cost significativamente più veloce , quindi forse le prestazioni potrebbero essere abbastanza buone: sul mio laptop, ci vogliono circa 3 secondi per una regione di celle 1M o 5 secondi con il movimento del cavaliere abilitato. GRASS è un'applicazione C, non una soluzione drop-in per una base di codice C #. Se stai bene aggiungendo al tuo stack, puoi utilizzare PyWPS per effettuare chiamate a GRASS, quindi utilizzare il risultato altrove nella tua applicazione.


Lo userò in un'applicazione Web, quindi il mio obiettivo è completare l'operazione in pochi secondi. Avrò solo una singola cella target e una distanza di costo massima relativamente stretta (la distanza dalla cella target centrale al bordo del raster di costo, assumendo una linea retta al costo minimo). I miei test con ArcMap in queste condizioni mi fanno pensare che sia possibile. Qualche suggerimento o esperienza con GRASS in C #?
atogle,

Ho aggiornato la mia domanda per rispondere alle tue domande, è iniziata come un commento, ma è durata troppo. Spero che aiuti!
scw,

Grazie scw! Queste sono tutte ottime informazioni, ma non mi portano dove devo essere a meno che non inizi a eseguire il porting del codice GRASS (cosa che non sono ansioso di fare). Forse ci sono altri geek raster là fuori con alcuni suggerimenti. Continuerò a scavare in questo e posterò la soluzione su cui mi accontento.
Atogle,

Forse puoi rivolgerti al tuo collega: azavea.com/research/staff-research-projects/map-algebra ;-) Ho suggerito il codice GRASS perché è un'implementazione robusta e veloce, C # è relativamente nuovo nello spazio di geoprocessing, quindi preesistente le implementazioni possono essere difficili da trovare.
scw,

scw - ecco dove è iniziato il mio viaggio, in realtà. Il mio problema è che la sua implementazione sacrifica i tempi di elaborazione per calcoli di alta qualità. Stiamo lavorando su un algoritmo per fare il contrario. GRASS è un ottimo suggerimento, non ho proprio modo di usarlo. =)
atogle il


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.