Мне нужно уметь измерять расстояния между точками, однако расстояние нужно вычислять по отношению к высоте. Точки - дома рассказчиков 19-го века и места, которые упоминаются в их рассказах. Таким образом, расстояние должно быть «пешком». Путь вдоль долины, вероятно, будет короче, чем путь через гору, хотя фактическое прямое расстояние короче. Прилагается скриншот, иллюстрирующий мое мышление. Таким образом, на изображении пути A и C будут рассчитаны короче, чем путь B.
Точки взяты из CSV-файла, но у меня также есть растровый слой с данными высоты.
Ответы:
Достижение этой цели является несколько основной задачей в ГИС, однако метод в QGIS может быть не тривиальным. Ваш лучший шанс - использовать
r.walk
функцию GRASS , которая создает анизотропную поверхность затрат (dem + slope + другие факторы).Во-первых, вы должны создать поверхность трения в качестве входа для
r.walk
. В вашем случае это может быть однозначный растр (1.0), соответствующий экстенту вашей матрицы высот. Вы можете создать его сr.mapcalculator
помощью формулы:A*0+1
где A - ваша матрица высот.Затем вы должны выбрать набор начальных точек из вашего CSV. Это точки, из которых будет рассчитана поверхность накопленной стоимости. Вы должны создать отдельную поверхность затрат из каждой начальной точки. Может быть целесообразно определить конечные точки, связанные с каждой начальной точкой на этом шаге (в отдельных слоях вне курса). После вы можете запустить
r.walk
с созданными входами. Начальные точки могут быть в одном слое, вы можете перебирать их с помощью зеленой стрелки в диалоговом окне.Теперь в идеальном случае у вас есть поверхности затрат и конечные точки для каждой поверхности затрат. Теоретически вы могли бы найти пути с наименьшей стоимостью
r.drain
, но для меня это привело к ошибке (python не смог импортировать библиотеку QgisRaster). Если вы работаете с той же проблемой, вы можете использовать алгоритм SAGA «Пути наименьшей стоимости». Это создаст точку и линейный слой для каждой конечной точки с поверхностью затрат (снова используйте кнопку итерации). Получив все линии, вы можете объединить их в один шейп-файл с помощью инструмента SAGA «Объединить слои фигур».Этот метод может быть очень медленным с приращением точек, поэтому, если у вас их много, вы можете попробовать автоматизировать метод с помощью python. Это все еще будет много времени для расчета (особенно поверхности затрат), но вам не нужно создавать тонны слоев конечных точек вручную.
источник
r.walk
. Вы можете использовать карту трения, чтобы установить непроходимые клетки. Переклассифицируйте свою DEM сr.reclass
такими1 thru 2000 = 1
2000 thru * = 9999
правилами в файле правил (если ваш порог равен 2000м). Таким образом, алгоритм не пропустит ячейки с высокими значениями трения, обойдется дешевле.