Гуляем по пересеченной местности в открытых ГИС: о базовых возможностях моделирования пеших перемещений на основе QGIS, GRASS и SAGA
Расчёт изохрон, оптимальных маршрутов и коридоров наименьших затрат для пеших перемещений на основе цифровых моделей рельефа в QGIS 3 (с использованием модулей GRASS и SAGA)
В статье рассмотрены решения некоторых отдельных, наиболее популярных задач, связанных с моделированием пеших перемещений (людей или животных) по пересечённой местности. Потребность в такого рода моделировании часто возникает при необходимости проложить маршрут в пешем походе, определить области перемещений пределах заданных временных интервалов, а также в задачах археологии, зоологии и других дисциплин.
Рассмотрим решения для трёх базовых проблем:
- Построение изохрон перемещений по пересеченной местности относительно одной или множества исходных точек
- Построение оптимального (с точки зрения временных затрат) маршрута по пересеченной местности между двумя точками
- Построение коридора оптимальных временных затрат между двумя точками
Для подготовки данных и моделирования будем использовать открытый пакет QGIS 3.0.2 с модулями GRASS и SAGA, вызов которых доступен из панели анализа. Тестирование осуществлялось в средах Windows 10 x64 и Linux Mint 18.2 x64
Подготовка данных
Для демонстрации будет использоваться набор данных для территории Республики Тыва, в горной местности к северо-востоку от Кызыла. У озера Маны-Холь. В качестве источников использовались:
- Данные OpenStreetMap. Способы их загрузки неоднократно описывались. В статье использовалась архивная выгрузка с NextGIS на Тыву. От OSM нам понадобятся границы озёр (а также, опционально, дороги, застройка, типы землепользования).
- Данные о рельефе. Чем точнее ваши данные, тем лучше. В статье использовались данные с http://viewfinderpanoramas.org/dem3.html, где собраны данные на весь мир с разрешением 3 секунды.
- Данные о типах подстилающей поверхности. В статье использовались данные MODIS Global Land Cover Climatology. Можно обойтись и без этих данных, в статье они приводятся только в целях демонстрации принципов их учёта.
Архив с данными для примера из статьи можно загрузить здесь.
Итак, приступаем к подготовке данных. Для начала загрузим всё необходимое в QGIS:
- Векторные слои с препятствиями. Это могут быть любые объекты, по которым нельзя ходить. В нашем случае это только площадная гидрография из OSM (озёра, реки). Потенциально это может быть что угодно - здания, закрытые территории карьеров, военные полигоны и прочее.
- Загруженные данные по рельефу в .hgt
- Данные по типам подстилающей поверхности
- Спутниковая подложка Bing из плагина QuickMapServices для наглядности.
Соберём данные по рельефу в единый растровый набор. Для этого воспользуемся функцией merge из GDAL - Raster miscellaneous.
Получившийся временный слой сохраним в geotiff, с которым продолжим работу (для этого в контекстном меню слоя нужно выбрать "сохранить как". При этом в процессе сохранения произведем некоторые манипуляции. Во-первых, выберем правильную систему координат, например UTM для подходящей зоны. Для тестового участка это зона 47N (EPSG:32647). Во-вторых, для будущих задач нам потребуются данные о рельефе такие, у которых пространственное разрешение по X и Y совпадает (т.е. пиксели должны быть квадратными или почти квадратными, с пренебрежимо малой разницей). Для этого вручную устанавливаем одинаковое разрешение для обоих измерений. Проще всего приравнять большее разрешение к меньшему. Результат запишем в файл DEM.tif
Теперь приведем к нужному виду данные о типах подстилающей поверхности. Через пункт контекстного меню "сохранить как" настраиваем нужное: устанавливаем систему координат UTM 47N и задаем новый охват равный охвату слоя с рельефом, для этого есть специальная кнопка. Всё лишнее будет отсечено. Результат сохраним в файл land_cover_cut.tif
Теперь поработаем со слоями препятствий на примере воды. На самом деле нам нужно в слое с ЦМР (DEM.tif) установить все пиксели с препятствиями в No Data. Сделать это можно множеством способов, посмотрим на один из них. Для начала сохраним слой water-polygon в систему координат UTM 47N, сохраняем как water.geojson
Одной из наших задач будет расчёт зон доступности озера Маны-Холь, поэтому по ходу дела получим точки его берега. Для этого выделяем в слое water это озеро, и с помощью инструмента Extract Verticies получаем слой с точками на береговой линии выделенного объекта.
Расчёт стоимости перемещений с использованием r.walk
Расчёт стоимости перемещений с использованием альтернативных функций
Построение оптимального маршрута
Расчёт коридора наименьших затрат
Дополнительные сведения
Для QGIS 2.* существует плагин Walking Time, использующий функцию Тоблера для построения маршрута.