Suite

Comment créer un chemin à moindre coût entre deux polygones avec GRASS ?


Je suis complètement débutant en GRASS mais j'aimerais l'utiliser pour avoir le coût cumulé du déplacement entre deux polygones. Plus exactement, je voudrais pour obtenir le plus petit coût de n'importe quel point situé au bord d'un polygone (polygone A) à n'importe quel point situé au bord d'un autre polygone (polygone B).

Jusqu'à présent, j'utilisais la fonctionCoûtDistanceetCheminCoûtd'ArcGIS comme ceci :

CostDistance("start_polygon", "costs.tif", "", "outCostLink.tif") CostPath("end_polygon", "outCostDist.tif", "outCostLink.tif", "EACH_ZONE","FID")

J'aimerais faire la même chose avec GRASS. Je pense que la fonctionr.coûtpermet de faire cela. Mais le problème c'est que je ne comprends pas comment spécifier en paramètres les deux polygones dans GRASS ?

J'ai :

  • un raster de coût où chaque cellule a une valeur de coût.
  • un fichier de formes pour le premier polygone
  • un fichier de formes pour le deuxième polygone

Avez-vous un exemple d'utilisationr.coûtavec deux polygones ?

Merci beaucoup pour votre aide.


Je sais que c'est une vieille question, mais voici une fissure à la réponse. Mon approche me semble un peu alambiquée, mais c'est la meilleure à laquelle je puisse penser. J'ai utilisé GRASS 6.4.

g.region s=0 w=0 e=100 n=100 res=1 # mettre en place des polygones echo "B 4 10 10 10 20 20 10 10 10" | v.in.ascii -n input=- output=polygonA format=standard echo "B 4 90 90 90 80 80 90 90 90" | v.in.ascii -n input=- output=polygonB format=standard r.mapcalc cost=1.0 # générer des points sur les bords des polygones # dmax devrait probablement être inférieur à la résolution de votre raster v.to.points -i input=polygonA output=polygonA_pts dmax=1 v.to.points -i input=polygonB output=polygonB_pts dmax=1 # calcule le chemin le moins coûteux # cela commence le lcp à partir du centre du polygone B, mais j'imagine que le lcp va # traverser la limite du polygone au point qui entraînerait le lcp r.cost input=cost output=cummulative_cost start_points=polygonA_pts stop_points=polygonB_pts v.centroids input=polygonB output=polygonB_cent v.to.points input=polygonB_cent output=polygonB_cent_only type =centroid r.drain input=cummulative_cost output=lcp voutput=lcp vector_points=polygonB_cent_only # puisque le lcp commence au centre du polygone B, # divise le lcp au bord du polygone pour obtenir un nouveau point de départ sur le bord du polygone B # puis exécutez à nouveau r.drain pour obtenir le résultat final du bord du polygone t o bord du polygone v.patch input=lcp,polygonB output=temp v.clean input=temp output=lcp_from_edge tool=break error=new_starting_point r.drain input=cummulative_cost output=lcp voutput=lcp vector_points=new_starting_point --o

Présentation de l'analyse du chemin de moindre coût

L'analyse du chemin au moindre coût est un outil d'analyse de distance au sein du SIG qui utilise le chemin le moins coûteux ou le chemin entre deux emplacements qui coûte le moins cher à ceux qui le parcourent pour déterminer l'itinéraire le plus rentable entre une source et une destination. Le coût peut être fonction du temps, de la distance ou d'autres critères définis par l'utilisateur. Lors de l'utilisation de l'analyse du chemin au moindre coût dans le SIG, les huit voisins d'une cellule raster sont évalués et le chemin généré se déplace vers les cellules avec la plus petite valeur cumulée ou de coût (« Analyse de distance à l'aide d'ArcGIS »). Ce processus est répété plusieurs fois jusqu'à ce que la source et la destination soient connectées. Le chemin terminé est la plus petite somme de valeurs de cellules raster entre les deux points et il a le coût le plus bas.

L'analyse du chemin à moindre coût est un outil SIG important à comprendre car elle a de nombreuses applications différentes, qui peuvent toutes aider les entreprises, les urbanistes et les autres utilisateurs à économiser du temps et de l'argent.


1 réponse 1

Concernant 1) :

nw:weighted-distance-to signale false si aucun chemin n'existe.

Comment peut-il n'y avoir aucun chemin, puisque votre réseau semble être entièrement connecté ? Eh bien, le problème, c'est que vous n'avez pas affaire qu'aux tortues de votre réseau : vous demandez à un loup de demander aux tortues-ici de trouver un chemin. Mais le loup lui-même est inclus dans Turtles-here , et le loup n'est pas connecté au réseau !

Vous pourriez peut-être vous en tirer en demandant à d'autres tortues-ici , mais vous devriez être sûr qu'il n'y a pas d'autre loup sur la même parcelle.

La chose la plus sensée à faire est probablement de créer une race distincte pour les nœuds de votre réseau. Si vous aviez une race appelée nodes , vous pourriez dire ask nodes-here et cela résoudrait bien votre problème.

Concernant 2) :

Votre code tel que vous l'avez publié ne se compile pas car vous essayez de laisser my-cost-of-path -1 en haut de votre rapporteur de chemin de moindre coût, mais my-cost-of-path est déjà une variable loup. Votre code est confus pour moi, donc je ne peux pas vous donner une solution complète.

Votre rapporteur de chemin de moindre coût est-il censé fonctionner sur une variable locale ou sur une variable wolf ? Si vous avez besoin d'une variable locale, elle doit avoir un nom différent. D'un autre côté, si vous voulez opérer directement sur votre variable wolf, cela n'a probablement pas beaucoup de sens que le chemin le moins coûteux soit un rapporteur (et vous ne pouvez certainement pas rapporter mon coût de chemin à la fin). Vous avez probablement besoin de restructurer un peu les choses.


Pour affecter un coût de chemin aux polygones dans un tampon

Je voudrais construire des chemins de moindre coût entre le polygone (par exemple le polygone A) où il y a un loup et tous les polygones qui sont situés dans un rayon de 3 km autour du loup et trouver le polygone qui a le coût le plus bas (voir aussi Comment puis-je accélérer la simulation de mon modèle de chemin à moindre coût. Ensuite, le loup se déplace vers ce polygone (par exemple le polygone B). Le processus est répété à partir du polygone B et ainsi de suite.

1) A partir du polygone A, le code fonctionne car seuls les polygones du buffer ont un coût de chemin. Mais à partir du polygone B, il y a un problème. Le code trouve le polygone qui a le coût le plus bas parmi les polygones qui sont situés dans la mémoire tampon du polygone A et dans la mémoire tampon du polygone B. Le code doit trouver uniquement le polygone qui a le coût le plus bas parmi les polygones dans la mémoire tampon du polygone B Comment puis-je résoudre ce problème ? Dois-je réinitialiser la variable d'état « path-cost » pour chaque parcelle de polygone avant de calculer le coût du trajet à partir du polygone B ?

2) Si un même polygone est inclus dans le tampon des trois loups, comment le coût du chemin sera-t-il affecté à la variable d'état "path-cost" pour chaque patch polygone, c'est-à-dire est-il possible d'avoir 3 x valeur de coût pour un même polygone ?

3) Dans la figure ci-dessous, pourquoi le chemin le moins coûteux ne suit-il pas une ligne droite ? Le chemin le moins coûteux prend la diagonale du patch au lieu du côté patch qui est le plus court.


EXEMPLES

Convertir bassin versant flux mappe la sortie sur une carte vectorielle

Définissez une table de couleurs différente pour la carte d'accumulation :

Créez une carte de flux plus détaillée à l'aide de la carte d'accumulation et convertissez-la en une carte de sortie vectorielle. La coupure d'accumulation, et donc la dimension fractale, est arbitraire dans cet exemple, nous utilisons le nombre moyen de cellules de bassin versant en amont de la carte (calculé dans l'exemple ci-dessus par r.univar) comme valeur seuil. Cela ne fonctionne qu'avec SFD, pas avec MFD.

Créez une carte des bassins versants et convertissez-la en une carte polygonale vectorielle

Afficher la sortie d'une manière agréable


La génétique

Dans cette recherche, nous avons utilisé le F par pairesst matrice estimée dans Fresia et al. 2011. (texte complet disponible sur demande) comme distance génétique entre les échantillons de toutes les paires d'emplacements. Un total de 227 haplotypes mitochondriaux ont été identifiés chez 282 individus collectés dans 29 endroits à travers l'Amérique du Sud et regroupés en deux "groupes géographiques". De la matrice, ces paires avec Fst= 0 (échantillons génétiquement identiques) ont été retenus pour des travaux ultérieurs. Ce fstLa valeur =0 a été choisie en fonction de la capacité de dispersion du NWS et peut être ajustée dans n'importe quel cas particulier.


Conclusion

Dans cet article, un algorithme de recherche du plus court chemin sur des graphes réduits est développé. Les résultats expérimentaux montrent que l'algorithme proposé est plus efficace que l'algorithme de Dijkstra sur les grands graphes. De plus, nous pouvons conclure ce qui suit :

L'approche proposée est particulièrement applicable aux SIG, en raison de la manière dont les utilisateurs effectuent une recherche du chemin le plus court dans ce type de systèmes. Cela nous permet d'étendre les sommets en évitant l'influence du temps utilisé dans cette opération sur la recherche du chemin le plus court.

L'utilisation de graphes réduits réduit considérablement le temps de réponse dans la recherche du chemin le plus court. C'est l'une des deux principales approches utilisées dans la littérature pour réduire le coût de calcul de cette opération.

La recherche du chemin le plus court sur un graphe réduit assure une évolutivité quant à la taille du graphe sur lequel l'analyse est effectuée.

Nous montrons que l'algorithme proposé permet d'obtenir un chemin optimal dans un graphe réduit. Le coût du chemin obtenu est égal au coût du chemin trouvé à l'aide de l'algorithme de Dijkstra sur le graphe d'origine.

Nous avons développé une méthode capable d'effectuer la recherche du chemin le plus court dans un temps d'exécution similaire à l'algorithme A* (avec h=0 et h=distance euclidienne).


Est-il possible de créer des polygones de Thiessen au sein d'un logiciel SIG, mais pondérés selon un DEM ?

Fondamentalement, ce que je recherche, c'est un algorithme ou une extension similaire à l'analyse au moindre coût, mais au lieu d'utiliser des points au-dessus d'un DEM pour créer un chemin (vecteur linéaire) entre les points, je souhaite créer un Thiessen (Voronoi) des polygones (centrés sur des points), dont les limites spatiales seraient définies par le MNT.

Ainsi, par exemple, une frontière entre 2 polygones serait déterminée par l'analyse de moindre coût entre les points centraux des 2 polygones. Le but serait alors, au lieu d'obtenir un ensemble de polygones de Thiessen avec des bordures fléchées droites (comme sur la photo), de créer un ensemble de polygones dont les limites seraient déterminées par le DEM (relief). Un peu comme une ligne de partage des eaux centrée sur un seul point.

Au fait, ce serait formidable s'il y avait une solution applicable dans QGIS.


Barrière du chemin de moindre coût (R) (gdistance)

J'essaie de créer une barrière (rivières) qui ne peut pas être franchie par le chemin le moins coûteux.

J'ai créé une couche de transition en utilisant des "zones" qui contiennent les valeurs de transition sur terre et sur les rivières. Cependant, la barrière a un "tampon" autour d'elle, avec des valeurs croissantes, au lieu d'être une barrière discrète.

Raster de coût et couche de transition Comme on peut le voir, il y a un "tampon" autour de la barrière dans la couche de transition.

Des idées sur la façon de créer une frontière discrète? de préférence avec la barrière comme valeur 1000, avec partout ailleurs une valeur de 1.

code: library(gdistance) ## Créer une surface de coût où "land" existe au milieu cost <- raster(nrow=100, ncol=100, xmn=0, xmx=100, ymn=0, ymx=100, crs= "+proj=utm") cost[] <- 10 cost[cellFromRowColCombine(cost, 50:55,20:80)] <- 1000 costf <- asFactor(cost < 100) ## Produire des matrices de transition et corriger car 8 directions trCost <- transition(costf, "areas", directions=16) trCost1 <- geoCorrection(trCost[[2]], type="c") plot(cost) plot(raster(trCost[[1]]))


Modèle étendu des relations topologiques entre objets spatiaux dans les systèmes d'information géographique

Cet article présente un modèle étendu pour décrire les relations topologiques entre deux ensembles (objets) dans les systèmes d'information géographique (SIG). Tout d'abord, à partir de la définition des relations topologiques entre deux objets, nous découvrons une séquence de relations topologiques entre deux ensembles convexes.

Deuxièmement, un modèle étendu pour les relations topologiques entre deux ensembles est proposé sur la base de la nouvelle définition. Les relations topologiques entre deux ensembles convexes sont exprimées comme une séquence de matrices 4 × 4, qui sont les propriétés topologiques de A o B o , A o B, B o A, ∂A ∩ ∂B. Le modèle est également étendu pour gérer les propriétés des relations topologiques entre deux ensembles non convexes, où le facteur du premier groupe fondamental est ajouté à A B pour gérer ces relations complexes.

Les résultats montrent que le nombre de relations topologiques entre les deux ensembles n'est pas aussi simple que fini mais infini et peut être approché par une séquence de matrices.


Une approche vectorielle pour modéliser les corridors paysagers et la connectivité des habitats

La connectivité des paysages est une considération importante dans la compréhension et le raisonnement sur les systèmes écologiques. Deux entités dans un paysage peuvent être considérées comme connectées chaque fois qu'un chemin existe entre elles. Dans de nombreuses applications, la pertinence d'un chemin potentiel est évaluée par rapport au coût ou à la résistance qu'il présente à la traversée. En règle générale, les chemins les moins coûteux entre les caractéristiques du paysage sont utilisés pour approximer le potentiel de connectivité. Cependant, la traversée d'un paysage entre deux emplacements ne se conforme pas nécessairement à un chemin de moindre coût. De plus, des recherches récentes ont commencé à jeter un doute sur la façon dont différents types de caractéristiques du paysage peuvent influencer le mouvement. Ainsi, il est important de considérer les limites géographiques du mouvement de manière plus large. Les représentations continues (c'est-à-dire raster) et discrètes (c'est-à-dire vectorielles) de la connectivité sont couramment utilisées pour modéliser les relations spatiales entre les caractéristiques du paysage. Bien que les approches existantes puissent apporter des informations significatives sur la topologie et la connectivité du système, elles sont encore limitées dans leur capacité à représenter certains types de mouvement et sont fortement influencées par l'échelle des unités de surface et la manière dont le coût de la traversée du paysage est dérivé. Afin de mieux répondre à ces problèmes, cet article propose une nouvelle approche vectorielle pour délimiter l'étendue géographique des corridors et évaluer la connectivité entre les caractéristiques du paysage. L'approche développée est appliquée pour évaluer la connectivité de l'habitat des salamandres afin de mettre en évidence les avantages de cette approche de modélisation.

Ceci est un aperçu du contenu de l'abonnement, accessible via votre institution.