![Превью картинка для привлечения внимания Превью картинка для привлечения внимания](https://habrastorage.org/getpro/habr/upload_files/3c8/a59/dcc/3c8a59dcc3133917e99c364eb7d2ea12.png)
Привет хабр! Предлагаю погрузиться в одну увлекательную гидрологическую тему - ранжирование речных систем. Под катом я постарался привести материал полезный как для географов, которые сталкиваются с проблемой ранжирования векторного слоя рек с помощью геоинформационных систем (ГИС), так и для всех неравнодушных, которые иногда видели "красивые реки" на карте, но не знают, как именно они оформляются в картографических материалах. Начнем с картинки:
![Рисунок 1. Изображение реки в двух вариантах (a и b) Рисунок 1. Изображение реки в двух вариантах (a и b)](https://habrastorage.org/getpro/habr/upload_files/8ce/36a/57f/8ce36a57f74e77ea5cfcb93a3f79bbbf.png)
Теперь вопрос: какая часть выглядит симпатичнее? - Для меня та, что внизу (b).
На самом деле, вторая визуализация более корректная и с точки зрения здравого смысла. Чем больше притоков впадает в русло реки, тем шире и полноводнее она будет. Например, одна из крупнейших рек мира, Нил, в своем истоке высоко в горах едва напоминает могучую реку в нижнем течении: с каждым километром пути к Средиземному морю река вбирает в себя все больше притоков и становится все более полноводной.
Представленная выше карта (Рисунок. 1b) была подготовлена на основе информации о структуре речной сети. В этом посте как раз хочется обсудить, какими способами можно получить эту дополнительную информацию о реках и какие инструменты для этого можно использовать.
Что такое река
Для начала объясним, как представляется информация о реках в геоинформационных системах. В картографии и Науках о Земле реки в большинстве случаев представляются в виде линейного векторного слоя: каждый участок реки изображается в виде линейного объекта с некоторыми характеристиками. Например, длина участка, его географические координаты (геометрия объекта), тип грунта, средняя глубина, скорость течения и т. д. (Анимация 1).
![Анимация 1. Линейный векторный слой. В таблице атрибутов записан идентификатор сегмента реки (id), его геометрия (geometry) и скорость водотока (скорость течения, м/с). Важное замечание: геометрия отдельных линейных сегментов может определяться не двумя точками, а большим их количеством Анимация 1. Линейный векторный слой. В таблице атрибутов записан идентификатор сегмента реки (id), его геометрия (geometry) и скорость водотока (скорость течения, м/с). Важное замечание: геометрия отдельных линейных сегментов может определяться не двумя точками, а большим их количеством](https://habrastorage.org/getpro/habr/upload_files/afe/eef/ae2/afeeefae23c9c4a2b52b45967408146c.gif)
Таким образом, когда вы видите реку на карте, то вы видите набор именно этих простых геометрических примитивов (отдельные строки в атрибутивной таблице), собранных в одну большую систему. Для визуализации характеристик сегментов можно использовать различные цвета (Рисунок 2).
![Рисунок 2. Визуализация скорости водотока участков реки с помощью градаций красного Рисунок 2. Визуализация скорости водотока участков реки с помощью градаций красного](https://habrastorage.org/getpro/habr/upload_files/812/847/e9f/812847e9fccf79ae4a7575a9f315a9bb.png)
Для визуализации пространственных объектов и составления карт часто используются специализированное программное обеспечение, например ArcGIS (проприетарная ГИС) или QGIS (с открытым исходным кодом).
Структура рек
Информация для записи в таблицу атрибутов по рекам собирается разными способами: используются данные дистанционного зондирования, экспедиции, автоматические сенсоры на гидрологических станциях и т.д. Что же касается информации о структуре реки: она обычно присваивается специалистом в самый последний момент, когда он видит на карте, как выглядит вся система. Например, исследователь может сам добавить в атрибутивную таблицу векторного слоя новый столбец, в котором он присваивает ранг каждому сегменту реки (Рисунок 3).
![Рисунок 3. Добавление нового поля и его визуализация с помощью толщины линии Рисунок 3. Добавление нового поля и его визуализация с помощью толщины линии](https://habrastorage.org/getpro/habr/upload_files/1be/495/586/1be4955868fb4f6bdf7842e0cc9aee7a.png)
Теперь мы видим, что Рисунок 3 напоминает схему из начала статьи (Рисунок 1b). Но возникает вопрос: по какому принципу можно присвоить такие значения? - Чтобы не затягивать, сразу ответ: их много. Существует несколько общепринятых систем ранжирования водотоков в гидрологии - см. например страницу википедии Stream order или для более глубокого погружения, книгу “Основы речной гидрологии и гидробиологии”. Ниже приведены несколько подходов, которые я сам использовал (Рисунок 4).
![Рисунок 4. Некоторые из подходов к упорядочиванию водотоков в гидрологии Рисунок 4. Некоторые из подходов к упорядочиванию водотоков в гидрологии](https://habrastorage.org/getpro/habr/upload_files/6f5/482/c69/6f5482c69ec1ff08704a5f7495d25288.png)
Для чего это
Теперь пришло время ответить на вопрос для чего нужны такие системы ранжирования. Можно выделить две причины:
Визуализация - используя ранг как атрибут размера линейного объекта на карте, можно создавать красивые картографические материалы (Рисунок 1);
Дальнейший анализ.
Развивая второй пункт: знания о структуре речной сети могут быть объединены с другими характеристиками, например, для выявления следующих закономерностей (Рисунок 5). Как видно из рисунка, при увеличении ранга сегмента, скорость водотока уменьшается.
![Рисунок 5. Зависимость скорости течения от порядка по Шриву Рисунок 5. Зависимость скорости течения от порядка по Шриву](https://habrastorage.org/getpro/habr/upload_files/dc2/015/055/dc20150551ed7c00088bee78512773fa.png)
Какие инструменты можно использовать для ранжирования водотоков
Ранжировать большие речные системы вручную очень долго, поэтому для автоматического расчета рангов были разработаны специализированные инструменты. Существует два принципиально разных способа:
Ранжирование водотоков по растровым данным (цифровая модель рельефа);
Ранжирование водотоков по векторным слоям.
Выше было описано как можно назначать ранги векторным слоям. Однако пространственные данные иногда представляются в другом формате - в виде растров (матриц) (Рисунок. 6). Особенно часто при расчете рангов рек используются цифровые модели рельефа (матрицы, в которых каждый пиксель имеет определенный размер, например 90 на 90 метров, и значение высоты над уровнем моря, которое хранится в каждой ячейке этой матрицы).
![Рисунок 6. Цифровая модель рельефа (ЦМР) в виде растрового слоя. Часто используется для расчета направления потока, а затем и его порядка Рисунок 6. Цифровая модель рельефа (ЦМР) в виде растрового слоя. Часто используется для расчета направления потока, а затем и его порядка](https://habrastorage.org/getpro/habr/upload_files/9ac/59c/86f/9ac59c86fa656a2887d13f4746d6dad9.png)
Цифровая модель рельефа используется для расчета матрицы направления стока (flow direction matrix) и аккумуляции (flow accumulation). По такому принципу работает, например, инструмент Stream Order (Spatial Analyst) в ArcGIS. В этой заметке я не буду подробно описывать, как работает такой алгоритм, поскольку в официальной документации есть довольно хорошие визуализации и описания (если хотите узнать больше, зайдите на страницу функции Flow Direction). Ниже я перечислил некоторые инструменты, которые можно использовать для получения порядка Штралеру с помощью растровых данных:
Однако все это требует большого количества манипуляций с растровыми данными. Что делать, если у вас уже есть векторный слой? (Это может произойти, если у вас есть, например, векторный слой речной сети, загруженный из OpenStreetMap). Рассмотрим дальше!
Как получить ранги по Шриву, Штралеру и Топологический порядок на векторном слое с помощью QGIS
Во время работы четыре года назад мы с коллегами реализовали алгоритм, позволяющий вычислять порядок Шрива, Штраглера и Топологический, основываясь только на векторном слое и конечной точке (точке, где речная система заканчивается и впадает в озеро/море/океан). Первая версия алгоритма описана подробнее в моей первой статье на хабре: "Алгоритм ранжирования сегментов речной сети с использованием графов для геоинформационного анализа" (смахиваю слезу ностальгии). Сам алгоритм подготовили в виде open-source плагина Lines Ranking для QGIS и снабдили документацией. Подробного описания как именно алгоритм работает здесь не будет, ограничусь перечислением действий, которые потребуется совершить, чтобы осуществить расчет:
Загрузить векторный слой в проект QGIS
Перепроецировать в метрическую проекцию
Выбрать на карте точку “в которую” впадает река
Визуализировать результат используя параметр размера или цвета (Рисунок 7)
![Рисунок 7. Топологический порядок водотоков для реки Обь с использованием векторного слоя и плагина QGIS Lines Ranking Рисунок 7. Топологический порядок водотоков для реки Обь с использованием векторного слоя и плагина QGIS Lines Ranking](https://habrastorage.org/getpro/habr/upload_files/bc7/c6c/84a/bc7c6c84a752ce6145c42a00ae9a4e7d.png)
Таким образом мы немного углубились в тему ранжирования водотоков в гидрологии (бонитировка речной сети) и узнали как с помощью различных инструментов получить ранги из исходных данных (растровых или векторных). Получив информацию о структуре реки, вы можете подготовить красивые и понятные визуализации или продолжить анализ, объединив полученную информацию с другими характеристиками реки.
Полезные ссылки:
Lines ranking документация: https://linesranking.readthedocs.io/en/latest
Репозиторий с исходным кодом: https://github.com/ChrisLisbon/QGIS_LinesRankingPlugin
С рассказом про ранжирование рек выступал Михаил Сарафанов
Комментарии (4)
mirwide
21.07.2024 18:02+2Почему-то ничего лучше, удобнее и детальнее обозначений Генштабовских топокарт за 100 лет не придумали.
Обозначения рек
Dreamlone Автор
21.07.2024 18:02+1Вы говорите верно, однако я хотел бы подсветить следующий момент:
Если замерить ширину реки (буквально каждой реки в системе) нет возможности или сбор и визуализация такой информации будет избыточным из-за масштаба карты (неважно что ширина реки 5 м или 50 м, когда в рамке карты показана вся Евразия, все равно обе такие реки попадут в условную категорию "до 100 метров"), то назначать ширину реки обычно принято не по полевым измерениям а по эвристике "ширина реки на карте пропорциональна совокупному количеству притоков в неё втекающих". А это будет как раз порядок реки обсуждаемый в статье. Можно конечно как при составлении топокарт исходить из фактических измерений ширины, но иногда это избыточно.
Плюс еще имеет смысль рассуждать какими материалами картограф оперирует при составлении карт. Если у него / неё есть хорошая растровая подложка (можно даже сьемку с летательного аппарата, не затрагивая тему топокарт) и пару недель в запасе, то можно и в ручную оцифровать с высокой детальностью. Другое дело, если гидрология не является ключевым элементом на картографическом изображении, карту нужно скомпановать за пару часов, а из доступных данных только данные OSM. В таком случае детализация не требуется. В общем, везде есть свои нюансы
Javian
Есть реки пересыхающих на некоторых участках в середине течения. Формально на карте она есть, а по факту там дорога.
Dreamlone Автор
Да, вы верно заметили граничный случай, однако в контексте задачи анализа структуры речной сети могу рассудить следующим образом:
Если на данный момент участок речной сети не связан с главной системой (пересох), то следовательно из морфологического анализа речной сети его можно исключить. И потому при назначении рангов даже корректно, как мне кажется, будет такой участок не рассматривать. А когда наполнится водой и мы, например, по спутниковым снимкам отрисуем новую речную сеть, то в анализ можно и включить будет, но это уже потом
С другой стороны, это все конечно очень специфичные примеры. Все таки порядки рек в основном рассчитываются для крупных речных систем, в которых ключевые притоки (для Оби это скажем, будет Иртыш) из системы не выпадают. А если и выпадают, то всегда можно применить подход выше - в зависимости от сезона по разному анализировать, в межень включать только основную систему в анализ, а в половодье - всё до чего руки доятнутся