Buscando una función de costo-distancia ráster de código abierto rápida para usar en el código

9

He estado buscando en Internet una función de costo-distancia rápida y de código abierto que puedo insertar dentro de mi código. La funcionalidad debería funcionar básicamente como la implementación de ArcGIS donde puedo especificar un ráster de origen y un ráster de costo y generar un ráster de distancia de costo. Dicho esto, la implementación no necesita ser tan sofisticada como ArcGIS, ya que no necesito ingresar necesariamente "rásteres" con metadatos geográficos incrustados; una firma que tome matrices numéricas simples será suficiente ya que puedo verificar que los datos se superpongan correctamente en el momento en que llamo a la función.

Mi intención específica es calcular la distancia de costo a un solo punto en el centro de un ráster de costo de 1000 x 1000 basado en un clic del usuario, por lo que la ejecución rápida es muy importante.

La implementación de AC # sería ideal, pero analizaré cualquier cosa que exista.

¿Alguien sabe de una biblioteca de código abierto que soporte esto? ¡Gracias por tu ayuda!

atogle
fuente

Respuestas:

5

GRASS GIS tiene una implementación en C en r.cost( fuente , documentación ) que utiliza un montón mínimo . Alternativamente, podría usar un paquete de gráficos como QuickGraph y Floyd-Warshall para calcular el costo.

Los cambios recientes en GRASS 6.4 han hecho que r.cost sea significativamente más rápido , por lo que quizás el rendimiento sea lo suficientemente bueno: en mi computadora portátil, se necesitan alrededor de 3 segundos para una región celular de 1 M, o 5 segundos con el movimiento de caballero habilitado. GRASS es una aplicación C, no una solución directa para una base de código C #. Si está de acuerdo con agregar a su pila, puede usar PyWPS para hacer llamadas a GRASS y luego usar el resultado en otra parte de su aplicación.

scw
fuente
Voy a usar esto en una aplicación web, por lo que mi objetivo es completar la operación en solo unos segundos. Solo tendré una sola celda objetivo y una distancia de costo máxima relativamente ajustada (la distancia desde la celda objetivo central hasta el borde del ráster de costos, suponiendo una línea recta al costo mínimo). Mis pruebas con ArcMap en estas condiciones me hacen pensar que es posible. ¿Algún consejo o experiencia con GRASS en C #?
atogle
He actualizado mi pregunta para responder a sus preguntas, comenzó como un comentario, pero se hizo demasiado larga. ¡Espero que ayude!
scw
Gracias scw! Esta es toda una gran información, pero realmente no me lleva a donde necesito estar a menos que empiece a portar código GRASS (que no estoy ansioso por hacer). Tal vez hay otros geeks rasterizados con algunos consejos. Continuaré investigando esto y publicaré la solución en la que me conformo.
atogle
Quizás pueda recurrir a su colega: azavea.com/research/staff-research-projects/map-algebra ;-) Sugerí el código GRASS porque es una implementación robusta y rápida, C # es relativamente nuevo en el espacio de geoprocesamiento, por lo que es preexistente Las implementaciones pueden ser difíciles de conseguir.
scw
scw: ahí es donde comenzó mi viaje, en realidad. Mi problema es que su implementación sacrifica el tiempo de procesamiento por cálculos de alta calidad. Estamos trabajando ahora en un algoritmo para hacer lo contrario. GRASS es una gran sugerencia, simplemente no tengo forma de usarla. =)
atogle
3

He usado mucho la r.costfunción en GRASS. 1000 * 1000 cuadrículas no fueron un problema en una computadora portátil normal. También hay un paquete R (gdistance, http://r-forge.r-project.org/projects/gdistance/ ) en desarrollo. Encontré GRASS mucho más rápido.

johannes
fuente