Vous recherchez une fonction de coût-distance raster open-source rapide à utiliser dans le code

9

J'ai parcouru Internet pour une fonction de coût-distance rapide et open-source que je peux intégrer dans mon code. La fonctionnalité devrait fonctionner essentiellement comme l' implémentation ArcGIS où je peux spécifier un raster source et un raster de coût et générer un raster de distance de coût. Cela dit, la mise en œuvre n'a pas besoin d'être aussi sophistiquée qu'ArcGIS dans la mesure où je n'ai pas besoin de saisir nécessairement des «rasters» avec des métadonnées géo intégrées - une signature qui prend des tableaux numériques simples suffira car je peux vérifier que les données se chevauchent correctement au moment où j'appelle la fonction.

Mon intention spécifique est de calculer la distance de coût à un seul point au centre d'un raster de coût 1000 x 1000 basé sur un clic d'utilisateur, donc une exécution rapide est très importante.

L'implémentation AC # serait idéale mais je regarderai tout ce qui existe.

Quelqu'un connaît-il une bibliothèque open source qui prend en charge cela? Merci de votre aide!

Google
la source

Réponses:

5

GRASS GIS a une implémentation C dans r.cost( source , documentation ) qui utilise un min-tas . Alternativement, vous pouvez utiliser un package graphique comme QuickGraph et Floyd-Warshall pour calculer le coût.

Les récents changements dans GRASS 6.4 ont rendu r.cost beaucoup plus rapide , donc peut-être que les performances peuvent être suffisantes: sur mon ordinateur portable, il faut environ 3 secondes pour une région de cellule de 1 M, ou 5 secondes avec le mouvement de chevalier activé. GRASS est une application C, pas une solution intégrée pour une base de code C #. Si vous êtes prêt à ajouter à votre pile, vous pouvez utiliser PyWPS pour appeler GRASS, puis utiliser le résultat ailleurs dans votre application.

scw
la source
Je vais l'utiliser dans une application Web, mon objectif est donc de terminer l'opération en quelques secondes seulement. Je n'aurai jamais qu'une seule cellule cible et une distance de coût maximale relativement serrée (la distance entre la cellule cible centrale et le bord du raster de coût, en supposant une ligne droite au coût minimum). Mes tests utilisant ArcMap dans ces conditions me font penser que c'est possible. Des conseils ou une expérience d'utilisation de GRASS en C #?
Google
J'ai mis à jour ma question pour répondre à vos questions, elle a commencé comme un commentaire, mais est devenue trop longue. J'espère que cela pourra aider!
scw
Merci scw! Ce sont toutes d'excellentes informations, mais cela ne m'amène pas vraiment là où je dois être, sauf si je commence à porter du code GRASS (ce que je ne suis pas impatient de faire). Il y a peut-être d'autres geeks raster avec quelques conseils. Je vais continuer à creuser là-dessus et je publierai la solution sur laquelle je m'installe.
atogle
Vous pouvez peut-être vous tourner vers votre collègue: azavea.com/research/staff-research-projects/map-algebra ;-) J'ai suggéré le code GRASS car c'est une implémentation robuste et rapide, C # est relativement nouveau dans l'espace de géotraitement, donc préexistant les implémentations peuvent être difficiles à trouver.
scw
scw - c'est là que mon voyage a commencé, en fait. Mon problème est que sa mise en œuvre sacrifie le temps de traitement pour des calculs de haute qualité. Nous travaillons maintenant sur un algorithme pour faire le contraire. GRASS est une excellente suggestion, je n'ai tout simplement pas de moyen de l'utiliser. =)
atogle
3

J'ai beaucoup utilisé la r.costfonction dans GRASS. Les grilles de 1000 * 1000 ne posaient aucun problème sur un ordinateur portable normal. Un package R (gdistance, http://r-forge.r-project.org/projects/gdistance/ ) est également en cours de développement. J'ai trouvé GRASS beaucoup plus rapidement.

johannes
la source