Jak zmierzyć odległość między punktami na podstawie wysokości?

10

Muszę być w stanie zmierzyć odległości między punktami, jednak odległość należy obliczyć w stosunku do wysokości. Punkty to domy gawędziarzy z XIX wieku i miejsca wymienione w ich opowiadaniach. Odległość musi zatem być „odległością pieszą”. Ścieżka wzdłuż doliny będzie prawdopodobnie krótsza niż ścieżka nad górą, nawet jeśli faktyczna prosta odległość jest krótsza. W załączeniu znajduje się zrzut ekranu ilustrujący moje myślenie. Na obrazie ścieżki A i C zostałyby zatem obliczone krócej niż ścieżka B.Punkty i wysokość

Punkty pochodzą z pliku CSV, ale mam również warstwę rastrową z danymi wysokości.

traustid
źródło
1
Myślę, że lepiej byłoby obliczyć czas marszu . Prędkość chodzenia zależy od nachylenia, a w górę zajmuje więcej czasu niż w dół.
AndreJ
1
Odległość „3D” w porównaniu do odległości płaskiej mapy? Różnica jest prawdopodobnie mniejsza niż mogłoby się wydawać. Peter Guth, człowiek stojący za MICRODEM, powiedział: „Odległość lub obszar zostaną zwiększone o sieczność kąta nachylenia, a dopóki nie dojdziesz do bardzo dużych zboczy, sieczność jest zasadniczo 1.”
nhopton

Odpowiedzi:

6

Osiągnięcie tego celu jest nieco podstawowym zadaniem w GIS, jednak metoda w QGIS może nie być trywialna. Twoja najlepsza szansa to skorzystanie z r.walkfunkcji GRASS , która tworzy anizotropową powierzchnię kosztu (dem + nachylenie + inne czynniki).

Najpierw musisz utworzyć powierzchnię cierną jako wejście r.walk. W twoim przypadku może to być raster jednowartościowy (1.0) pasujący do zakresu twojego DEM. Możesz go utworzyć za r.mapcalculatorpomocą wzoru: A*0+1gdzie A jest Twoim DEM.

Następnie musisz wybrać zestaw punktów początkowych z pliku CSV. Są to punkty, na podstawie których obliczona zostanie skumulowana powierzchnia kosztów. Musisz stworzyć indywidualną powierzchnię kosztów z każdego punktu początkowego. Rozsądne może być zdefiniowanie punktów końcowych związanych z każdym punktem początkowym na tym etapie (w poszczególnych warstwach poza kursem). Następnie możesz uruchomić r.walkz utworzonymi danymi wejściowymi. Punkty początkowe mogą znajdować się na pojedynczej warstwie, możesz je powtarzać za pomocą zielonej strzałki w oknie dialogowym.

Teraz w idealnym przypadku masz powierzchnie kosztów i punkty końcowe dla każdej powierzchni kosztów. Teoretycznie można znaleźć ścieżki o najniższych kosztach r.drain, ale dla mnie zakończyło się to błędem (python nie mógł zaimportować biblioteki QgisRaster). Jeśli napotkasz ten sam problem, możesz skorzystać z algorytmu SAGA „Ścieżki najtańszych kosztów”. Utworzy punkt i warstwę liniową dla każdego punktu końcowego z powierzchnią kosztu (ponownie użyj przycisku iteracji). Po uzyskaniu wszystkich linii możesz połączyć je w jeden plik kształtu za pomocą narzędzia „Scal warstwy warstw” SAGA.

Ta metoda może być bardzo powolna z przyrostem punktów, więc jeśli masz ich dużo, możesz spróbować zautomatyzować metodę za pomocą Pythona. Będzie jeszcze dużo czasu na obliczenia (zwłaszcza powierzchni kosztów), ale nie trzeba ręcznie tworzyć ton warstw punktów końcowych.

Gabor Farkas
źródło
Dzięki za to prawdopodobnie będę musiał zacząć uczyć się korzystania z GRASS. Myślę też, że mogę mieć problemy, na zamieszczonej przeze mnie ilustracji zakładam, że wiele gór jest nieprzejezdnych, więc musiałbym dodać coś w stylu „jeśli góra jest wyższa niż x, obejdź ją” ... Ale dzięki za odpowiedź, to prawdopodobnie pomoże mi zacząć.
traustid
To łatwy warunek r.walk. Możesz użyć mapy tarcia, aby skonfigurować nieprzejezdne komórki. Ponownie przypisz DEM za r.reclasspomocą reguł, takich 1 thru 2000 = 1 2000 thru * = 9999jak plik reguł (jeśli twój próg wynosi 2000m). W ten sposób algorytm nie przepuści komórek o wysokich wartościach tarcia, obejście go będzie tańsze.
Gabor Farkas
Wielkie dzięki za to! Naprawdę nie mam dużej wiedzy na temat GRASS, ale to naprawdę świetny punkt wyjścia.
traustid
Nie ma za co. Szczerze mówiąc, nadal jestem zdumiony twoim zadaniem. Jest to jeden z najlepszych przykładów, w jaki sposób GIS można zastosować w najszerszej skali dyscyplin.
Gabor Farkas