Достижение этой цели является несколько основной задачей в ГИС, однако метод в 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. Это все еще будет много времени для расчета (особенно поверхности затрат), но вам не нужно создавать тонны слоев конечных точек вручную.