
Привет Хабр! Предлагаю погрузиться в одну увлекательную гидрологическую тему - ранжирование речных систем. Под катом я постарался привести материал полезный как для географов, которые сталкиваются с проблемой ранжирования векторного слоя рек с помощью геоинформационных систем (ГИС), так и для всех неравнодушных, которые иногда видели «красивые реки» на карте, но не знают, как именно они оформляются в картографических материалах. Начнем с картинки:

Теперь вопрос: какая часть выглядит симпатичнее? — Для меня та, что внизу (b).
На самом деле, вторая визуализация более корректная и с точки зрения здравого смысла. Чем больше притоков впадает в русло реки, тем шире и полноводнее она будет. Например, одна из крупнейших рек мира, Нил, в своем истоке высоко в горах едва напоминает могучую реку в нижнем течении: с каждым километром пути к Средиземному морю река вбирает в себя все больше притоков и становится все более полноводной.
Представленная выше карта (Рисунок. 1b) была подготовлена на основе информации о структуре речной сети. В этом посте как раз хочется обсудить, какими способами можно получить эту дополнительную информацию о реках и какие инструменты для этого можно использовать.
Что такое река
Для начала объясним, как представляется информация о реках в геоинформационных системах. В картографии и Науках о Земле реки в большинстве случаев представляются в виде линейного векторного слоя: каждый участок реки изображается в виде линейного объекта с некоторыми характеристиками. Например, длина участка, его географические координаты (геометрия объекта), тип грунта, средняя глубина, скорость течения и т. д. (Анимация 1).

Таким образом, когда вы видите реку на карте, то вы видите набор именно этих простых геометрических примитивов (отдельные строки в атрибутивной таблице), собранных в одну большую систему. Для визуализации характеристик сегментов можно использовать различные цвета (Рисунок 2).

Для визуализации пространственных объектов и составления карт часто используются специализированное программное обеспечение, например ArcGIS (проприетарная ГИС) или QGIS (с открытым исходным кодом).
Структура рек
Информация для записи в таблицу атрибутов по рекам собирается разными способами: используются данные дистанционного зондирования, экспедиции, автоматические сенсоры на гидрологических станциях и т.д. Что же касается информации о структуре реки: она обычно присваивается специалистом в самый последний момент, когда он видит на карте, как выглядит вся система. Например, исследователь может сам добавить в атрибутивную таблицу векторного слоя новый столбец, в котором он присваивает ранг каждому сегменту реки (Рисунок 3).

Теперь мы видим, что Рисунок 3 напоминает схему из начала статьи (Рисунок 1b). Но возникает вопрос: по какому принципу можно присвоить такие значения? — Чтобы не затягивать, сразу ответ: их много. Существует несколько общепринятых систем ранжирования водотоков в гидрологии — см. например страницу википедии Stream order или для более глубокого погружения, книгу «Основы речной гидрологии и гидробиологии». Ниже приведены несколько подходов, которые я сам использовал (Рисунок 4).

Для чего это
Теперь пришло время ответить на вопрос для чего нужны такие системы ранжирования. Можно выделить две причины:
Визуализация — используя ранг как атрибут размера линейного объекта на карте, можно создавать красивые картографические материалы (Рисунок 1);
Дальнейший анализ.
Развивая второй пункт: знания о структуре речной сети могут быть объединены с другими характеристиками, например, для выявления следующих закономерностей (Рисунок 5). Как видно из рисунка, при увеличении ранга сегмента, скорость водотока уменьшается.

Какие инструменты можно использовать для ранжирования водотоков
Ранжировать большие речные с��стемы вручную очень долго, поэтому для автоматического расчета рангов были разработаны специализированные инструменты. Существует два принципиально разных способа:
Ранжирование водотоков по растровым данным (цифровая модель рельефа);
Ранжирование водотоков по векторным слоям.
Выше было описано как можно назначать ранги векторным слоям. Однако пространственные данные иногда представляются в другом формате - в виде растров (матриц) (Рисунок. 6). Особенно часто при расчете рангов рек используются цифровые модели рельефа (матрицы, в которых каждый пиксель имеет определенный размер, например 90 на 90 метров, и значение высоты над уровнем моря, которое хранится в каждой ячейке этой матрицы).

Цифровая модель рельефа используется для расчета матрицы направления стока (flow direction matrix) и аккумуляции (flow accumulation). По такому принципу работает, например, инструмент Stream Order (Spatial Analyst) в ArcGIS. В этой заметке я не буду подробно описывать, как работает такой алгоритм, поскольку в официальной документации есть довольно хорошие визуализации и описания (если хотите узнать больше, зайдите на страницу функции Flow Direction). Ниже я перечислил некоторые инструменты, которые можно использовать для получения порядка Штралеру с помощью растровых данных:
Однако все это требует большого количества манипуляций с растровыми данными. Что делать, если у вас уже есть векторный слой? (Это может произойти, если у вас есть, например, векторный слой речной сети, загруженный из OpenStreetMap). Рассмотрим дальше!
Как получить ранги по Шриву, Штралеру и Топологический порядок на векторном слое с помощью QGIS
Во время работы четыре года назад мы с коллегами реализовали алгоритм, позволяющий вычислять порядок Шрива, Штраглера и Топологический, основываясь только на векторном слое и конечной точке (точке, где речная система заканчивается и впадает в озеро/море/океан). Первая версия алгоритма описана подробнее в моей первой статье на хабре: «Алгоритм ранжирования сегментов речной сети с использованием графов для геоинформационного анализа» (смахиваю слезу ностальгии). Сам алгоритм подготовили в виде open‑source плагина Lines Ranking для QGIS и снабдили документацией. Подробного описания как именно алгоритм работает здесь не будет, ограничусь перечислением действий, которые потребуется совершить, чтобы осуществить расчет:
Загрузить векторный слой в проект QGIS
Перепроецировать в метрическую проекцию
Выбрать на карте точку «в которую» впадает река
Визуализировать результат используя параметр размера или цвета (Рисунок 7)

Таким образом мы немного углубились в тему ранжирования водотоков в гидрологии (бонитировка речной сети) и узнали как с помощью различных инструментов получить ранги из исходных данных (растровых или векторных). Получив информацию о структуре реки, вы можете подготовить красивые и понятные визуализации или продолжить анализ, объединив полученную информацию с другими характеристиками реки.
Полезные ссылки:
С рассказом про ранжирование рек выступал Михаил Сарафанов