Каждый картограф хоть раз в жизни сталкивался с требованием, которое обычно формулируется так: «сделайте, чтобы реки текли!». Задача кажется простой – увеличивать толщину реки в зависимости от накопленного совокупного числа притоков. Но когда у вас в руках готовый (и большой!) набор векторных геоданных, последняя вещь, которой хочется заниматься – это вручную проставлять каждому сегменту речной сети его толщину, а ведь есть ещё много дополнительных метрик, которые хочется учесть, но непросто посчитать – например, расстояние до каждого из сегментов от устья или истока, или порядок конкретного притока. И хотя идея о том, что это задача на графах (и вроде бы не самая сложная), лежит на поверхности, простого готового инструмента для этого нет. А те, что есть – на растрах на основе ЦМР.
Хорошие новости! Миша
@mik_sar и Юля
@ChrisLisbon (оба выступали на семинарах спбгеотеха) разработали алгоритм и обернули его в QGIS-плагин – теперь заставить реки течь можно в пару кликов: достаточно выбрать векторный слой речной сети и точку устья, и вы получите копию вашего слоя с добавленными атрибутами ранга, количества притоков и накопленного расстояния от устья. Настроить с ними удачный стиль «текущих рек» - уже дело техники. Конечно, использовать алгоритм можно для любых сетей (например, дорожных), а не только для рек.
Вам понадобится QGIS 3.14+, на который дополнительно нужно установить python-библиотеки networkx и pandas. Ищите в официальном репозитории плагин Lines Ranking. Алгоритм подробно описан (с кодом) в статье на medium (на английском):
https://medium.com/@mik.sarafanov/the-algorithm-for-ranking-the-segments-of-the-river-network-for-geographic-information-analysis-b25cffb0d167и в jupyter-тетрадке (на русском):
https://github.com/Dreamlone/State_Hydrological_Institute/blob/master/River_ranking.ipynbРепозиторий с кодом плагина (там же в Readme указания по установке доп. библиотек):
https://github.com/ChrisLisbon/QGIS_LinesRankingPlugin