Je dois pouvoir mesurer les distances entre les points, mais la distance doit être calculée par rapport à l'altitude. Les points sont des maisons de conteurs du 19ème siècle et les lieux qui sont mentionnés dans leurs histoires. La distance doit donc être "distance de marche". Un chemin le long d'une vallée sera probablement plus court qu'un chemin au-dessus d'une montagne, même si la distance droite réelle est plus courte. Ci-joint une capture d'écran illustrant ma pensée. Dans l'image, les chemins A et C seraient donc calculés plus courts que le chemin B.
Les points proviennent d'un fichier CSV mais j'ai également une couche raster avec les données d'altitude.
Réponses:
Atteindre cet objectif est quelque peu une tâche fondamentale dans le SIG, mais la méthode dans QGIS n'est peut-être pas triviale. Votre meilleure chance est d'utiliser la
r.walk
fonction de GRASS , qui crée une surface de coût anisotrope (dem + pente + autres facteurs).Tout d'abord, vous devez créer une surface de friction en entrée
r.walk
. Dans votre cas, il peut s'agir d'un raster à valeur unique (1.0) correspondant à l'étendue de votre DEM. Vous pouvez le créerr.mapcalculator
avec la formule:A*0+1
où A est votre DEM.Ensuite, vous devez sélectionner un ensemble de points de départ dans votre CSV. Ce sont les points, la surface de coût cumulée sera calculée à partir de. Vous devez créer une surface de coût individuelle à partir de chaque point de départ. Il peut être judicieux de définir les points de fin associés à chaque point de départ de cette étape (dans les couches individuelles bien sûr). Après, vous pouvez exécuter
r.walk
avec les entrées créées. Les points de départ peuvent être dans une seule couche, vous pouvez les parcourir à l'aide de la flèche verte dans la boîte de dialogue.Maintenant, dans un cas idéal, vous avez les surfaces de coût et les points de fin pour chaque surface de coût. En théorie, vous pourriez trouver les chemins les moins coûteux avec
r.drain
, mais pour moi, cela s'est terminé par une erreur (python n'a pas pu importer la bibliothèque QgisRaster). Si vous exécutez le même problème, vous pouvez utiliser l'algorithme "Seast Cost Paths" de SAGA. Il créera un point et un calque de ligne pour chaque point d'arrivée avec la surface de coût (utilisez à nouveau le bouton d'itération). Une fois que vous avez toutes les lignes, vous pouvez les fusionner en un seul fichier de formes avec l'outil "Fusionner les couches de formes" de SAGA.Cette méthode peut être très lente avec l'incrémentation de points, donc si vous en avez beaucoup, vous pouvez essayer d'automatiser la méthode avec python. Il faudra encore beaucoup de temps pour calculer (en particulier les surfaces de coût), mais vous n'avez pas à créer manuellement des tonnes de couches de points de fin.
la source
r.walk
. Vous pouvez utiliser la carte de friction pour configurer les cellules infranchissables. Reclassifiez votre DEM avecr.reclass
des règles telles que1 thru 2000 = 1
2000 thru * = 9999
dans un fichier de règles (si votre seuil est 2000m). De cette façon, l'algorithme ne passera pas les cellules avec des valeurs de frottement élevées, il en coûtera moins de le contourner.