Як виміряти відстань між точками на основі висоти?


10

Мені потрібно вміти вимірювати відстані між точками, проте відстань потрібно розраховувати у співвідношенні до висоти. Точки - це будинки оповідачів 19 століття та місця, про які йдеться у їхніх розповідях. Отже, відстань має бути "пішохідною". Шлях по долині, ймовірно, буде коротшим, ніж шлях через гору, хоча фактична пряма відстань коротша. Додано скріншот, що ілюструє моє мислення. На зображенні шляхи A і C були б обчислені коротше, ніж шлях B.Точки та висота

Бали з CSV-файлу, але у мене також є растровий шар із даними про висоту.


1
Я думаю, що було б краще обчислити час пішки . Швидкість ходьби залежить від схилу, а вгору потрібно більше часу, ніж вниз.
AndreJ

1
"3D" відстань порівняно з відстані плоскою картою? Різниця, ймовірно, менша, ніж ви могли подумати. Пітер Гут, людина, що стоїть за MICRODEM, сказав: "Відстань або площа буде збільшена на секант кута нахилу, і поки ви не дістанетесь до дуже великих схилів, секан по суті становить 1."
nhopton

Відповіді:


6

Досягнення цієї мети є дещо основним завданням у ГІС, однак метод у QGIS може бути нетривіальним. Ваш найкращий шанс - використовувати r.walkфункцію GRASS , яка створює анізотропну поверхню витрат (dem + нахил + інші фактори).

По-перше, ви повинні створити поверхню тертя як вхід до r.walk. У вашому випадку це може бути однозначний растр (1.0), що відповідає обсягу вашої DEM. Ви можете створити його за r.mapcalculatorдопомогою формули: A*0+1де A - ваша DEM.

Далі ви повинні вибрати набір вихідних точок із свого CSV. Це бали, з яких буде обчислюватися поверхня накопиченої вартості. Ви повинні створити індивідуальну поверхню витрат з кожної початкової точки. Може бути розумним визначити кінцеві точки, пов'язані з кожною початковою точкою на цьому кроці (в окремих шарах поза курсом). Після цього можна запустити r.walkзі створеними входами. Початкові точки можуть бути в одному шарі, ви можете перебрати їх зеленою стрілкою в діалоговому вікні.

Тепер в ідеальному випадку у вас є поверхні витрат і кінцеві бали для кожної поверхні витрат. Теоретично ви могли знайти шляхи з найменшими витратами r.drain, але для мене це виявилося помилкою (python не міг імпортувати бібліотеку QgisRaster). Якщо ви працюєте в тому ж випуску, ви можете скористатися алгоритмом SAGA "Найменші шляхи витрат". Це створить точку та шар лінії для кожної кінцевої точки з поверхнею витрат (знову натисніть кнопку ітерації). Після того, як у вас з’являться всі рядки, ви можете об'єднати їх в єдиний файл форми за допомогою інструмента SAGA «Об’єднання шарів фігур».

Цей метод може бути дуже повільним із збільшенням очок, тому якщо у вас їх багато, ви можете спробувати автоматизувати метод за допомогою пітона. Вирахувати буде ще багато часу (особливо поверхонь вартості), але вам не доведеться створювати тонни кінцевих точкових шарів вручну.


Дякую за це, мабуть, мені доведеться почати вчитися користуватися GRASS. Я також думаю, що у мене можуть виникнути проблеми. На ілюстрації, яку я виклав, я вважаю, що багато гір непрохідні, тому мені доведеться додати щось на кшталт "якщо гора вище x, обійди її" ... Але спасибі за Відповідь, це, ймовірно, допоможе мені почати.
traustid

Це простий стан в Росії r.walk. Ви можете використовувати карту тертя для встановлення непрохідних комірок. Перекладіть DEM за r.reclassдопомогою правил, таких 1 thru 2000 = 1 2000 thru * = 9999у файлі правил (якщо ваш поріг становить 2000 м). Таким чином алгоритм не передасть комірки з високими значеннями тертя, обіймати його буде менше витрат.
Габор Фаркас

Дякую за це! Я дійсно мало знаю про GRASS, але це справді чудова відправна точка.
traustid

Ласкаво просимо. Якщо чесно, я все ще вражений вашим завданням. Це один з найкращих прикладів того, як ГІС можна застосовувати в найширшому масштабі дисциплін.
Габор Фаркас
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.