Comment mesurer la distance entre des points en fonction de l'altitude?


10

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.Points et élévation

Les points proviennent d'un fichier CSV mais j'ai également une couche raster avec les données d'altitude.


1
Je pense qu'il serait préférable de calculer le temps de marche . La vitesse de marche dépend de la pente et la montée prend plus de temps que la descente.
AndreJ

1
Distance "3D" par rapport à la distance à plat? La différence est probablement plus petite que vous ne le pensez. Peter Guth, l'homme derrière MICRODEM, a déclaré: "La distance ou l'aire sera augmentée de la sécante de l'angle de pente, et jusqu'à ce que vous atteigniez de très grandes pentes, la sécante est essentiellement de 1".
nhopton

Réponses:


6

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.walkfonction 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éer r.mapcalculatoravec la formule: A*0+1où 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.walkavec 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.


Merci pour cela, je vais probablement devoir commencer à apprendre à utiliser GRASS. Je pense aussi que je pourrais avoir des problèmes, dans l'illustration que j'ai postée, je suppose que beaucoup de montagnes sont impraticables, donc je devrais ajouter quelque chose comme "si la montagne est plus haute que x, contournez-la" ... Mais merci pour la réponse, cela m'aidera probablement à démarrer.
traustid

C'est une condition facile r.walk. Vous pouvez utiliser la carte de friction pour configurer les cellules infranchissables. Reclassifiez votre DEM avec r.reclassdes règles telles que 1 thru 2000 = 1 2000 thru * = 9999dans 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.
Gabor Farkas

Merci beaucoup pour cela! Je n'ai vraiment pas beaucoup de connaissances sur GRASS mais c'est un très bon point de départ.
traustid

De rien. Pour être honnête, je suis toujours étonné de votre tâche. C'est l'un des meilleurs exemples, comment le SIG peut être appliqué à l'échelle la plus large des disciplines.
Gabor Farkas
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.