Набор инструментов для построения цифрового двойника речной сети в QGIS. Плагин автоматизирует процесс выделения границ водоразделов на основе DEM, сетевых алгоритмов и GIS-алгоритмов.
Плагин River Network Twin (далее – RNT) предназначен для автоматизированного построения полигонов водоразделов на заданной территории в QGIS (версия 3.40.5). Основная идея:
- Построить граф «дорог» минимального перепада высот (Least-Cost-Path, LCP) с использованием библиотеки Networkit.
- Отсечь пути, пересекающие водную сеть.
- Сгруппировать LCP-маршруты по полю
start_id
, чтобы получить предварительные контурные линии. - Преобразовать линии в замкнутые полигоны (Polygonize) и выполнить финальное слияние (Dissolve).
RNT рассчитан на обработку областей до 1×1° (примерно 13 млн пикселов DEM) и сотен–тысяч точек-истоков. В результате пользователь получает готовый векторный слой полигонов водоразделов с атрибутами (id
истока, площадь, средняя высота и т.д.).
river-network-twin/
│
├── .github/
│ └── workflows/ # CI/CD: линтинг, автотесты, проверка статики
│
├── docs/ # Дополнительная документация, схемы, скриншоты
│ ├── screenshots/ # Скриншоты интерфейса и этапов работы плагина
│ └── demo_video.mp4 (опционально) # Демонстрационное видео (если есть)
│
├── src/ # Исходный код плагина QGIS
│ ├── __init__.py # Точка входа плагина (либо пустой файл, если используется metadata.txt)
│ ├── main.py # Регистрация и запуск плагина в QGIS
│ ├── gui/ # Файлы интерфейса (Qt Designer .ui + автогенерированные .py)
│ ├── algos/ # Алгоритмы (LCP, формирование графа, кластеризация)
│ ├── utils/ # Утилитарные функции (работа с DEM, генерация масок)
│ └── resources/ # Ресурсы: иконки, переводы, константы
│
├── __init__.py # Если плагин распознаётся из корня (реже)
├── metadata.txt # Обязательный файл метаданных QGIS-плагина:
│ # содержит name, description, version, qgisMinimumVersion, author, email и др.
│
├── .gitignore # Исключаемые файлы/папки при коммите
└── README.md # Этот файл (описание и инструкция)
Примечание: Файл
metadata.txt
обязательно должен находиться рядом с__init__.py
(в корнеsrc/
или сразу в корне репозитория, в зависимости от настроек). Внутри него указываются свойства плагина, которые QGIS использует для отображения в списке плагинов.
- ОС: Windows 10/11 или Linux (Ubuntu ≥ 20.04, Debian ≥ 11).
- QGIS: версия 3.40.5 (сборка, совместимая с Python 3.11).
- Python: Python 3.11 (интерпретатор, поставляемый вместе с QGIS).
- RAM: ≥ 8 ГБ ОЗУ для обработки области ≈13 млн пикселов DEM.
- Рабочая папка: путь к папке проекта не должен содержать кириллических символов (только латиница, цифры, подчёркивания и т.д.).
- Создайте каталог, где будут лежать демо-данные и проект QGIS.
- Убедитесь, что в пути нет русских букв: например,
C:\Projects\RNT_Work
или/home/user/RNT_Work
. - В противном случае QGIS может некорректно обрабатывать UTF-8 пути, и некоторые модули могут не загрузиться.
Для корректной работы LCP-алгоритма необходимы пакеты Networkit и NetworkX. Их можно установить следующим способом:
-
Запустите QGIS (версия 3.40.5).
-
Откройте Python-консоль (меню «Плагины» → «Python-консоль»).
-
Введите команду:
!pip install networkit networkx
-
Дождитесь сообщения об успешной установке.
-
Перезапустите QGIS (закройте и откройте заново).
Совет: после установки можно проверить в QGIS-консоли:
import networkit import networkx print(networkit.__version__, networkx.__version__)Если ошибок нет и версии отображаются, всё готово.
- Processing → Providers → SAGA NextGen Provider (версия ≥ 1.0.0).
- Processing → Providers → GRASS (будет использоваться для некоторых опций).
- QuickOSM (для выгрузки гидрографических данных из OpenStreetMap).
Проверьте, чтобы они были установлены и активированы:
- Меню «Плагины» → «Управление и установка плагинами…» → вкладка Установленные.
- Найдите SAGA NextGen Provider, GRASS, QuickOSM. Должны быть отмечены галочкой.
- Если нет — переключитесь на вкладку Все, найдите и установите.
- Скачайте архив
river-network-twin.zip
из корня репозитория. - В QGIS перейдите в меню «Плагины» → «Управление и установка плагинами…».
- Нажмите кнопку «Установить из ZIP…» (обычно справа внизу).
- Укажите путь к
river-network-twin.zip
и нажмите «Установить». - После установки плагин появится в списке «Установленные» под именем River Network Twin.
- Активируйте его галочкой. Плагины QGIS автоматически распакуют файлы в папку профиля пользователя (обычно
%APPDATA%/QGIS/QGIS3/profiles/default/python/plugins/river_network_twin
).
-
Клонируйте репозиторий:
git clone https://github.com/citec-spbu/river-network-twin.git
-
Скопируйте папку
river-network-twin/river_network_twin/
в директорию плагинов QGIS:-
Windows (OSGeo4W):
%APPDATA%\QGIS\QGIS3\profiles\default\python\plugins\river_network_twin
-
Linux:
~/.local/share/QGIS/QGIS3/profiles/default/python/plugins/river_network_twin
-
-
Убедитесь, что структура внутри папки выглядит так:
…/python/plugins/river_network_twin/ ├── __init__.py ├── main.py ├── gui/ ├── algos/ ├── utils/ └── resources/
-
Перезапустите QGIS. В меню «Плагины» → «Управление и установка плагинами…» появится River Network Twin. Активируйте галочкой.
Если после копирования исходников плагин не появился, проверьте, нет ли лишнего уровня вложенности (папки внутри папки). Структура должна начинаться сразу с
__init__.py
внутри папкиriver_network_twin
.
После установки (из ZIP или из исходников) у вас появится новая панель (или пункт в меню) River Network Twin. Ниже приведён пример пошагового запуска.
Плагин поддерживает два режима задания территории:
-
По четырём точкам
-
Нажмите кнопку «Область по 4 точкам».
-
Укажите последовательно четыре угловые точки на карте (в любом порядке, плагин сам распознает их как углы прямоугольника).
-
-
По центру и радиусу
-
Нажмите кнопку «Радиус вокруг точки».
-
Выберите «Выбрать точку на карте» для указания центра.
-
Кликните по карте, чтобы установить центр области.
-
Введите радиус (в градусах). Например,
0.05
~ 5 км (при широте около 55°). -
Нажмите «Применить», и плагин отобразит границу окружности.
-
-
Запустите плагин.
- В меню «Плагины» или на панели инструментов найдите иконку River Network Twin.
-
Выберите один из режимов расчёта.
-
Вычислить путь наименьшей стоимости — для классического построения LCP.
-
Вычислить путь наименьшей стоимости с кластеризацией — если нужно сразу объединить близкие истоки.
-
-
Задайте область анализа (смотрите раздел выше).
-
Введите необходимые параметры (слой DEM, точки-истоки, опции Slope/Variance и так далее).
-
Запустите расчёт.
-
Слияние по признаку (Dissolve).
-
В QGIS откройте Инструменты анализа → Слияние по признаку.
-
В качестве исходного слоя выберите
Output least cost path
(слой с путями). -
В поле «Поля классификации» укажите
start_id
. -
При необходимости сохраните результат в отдельный файл.
-
Нажмите «Выполнить».
-
-
Построить полигоны (Polygonize).
-
К слою, полученному после Dissolve, примените Vector → Geometry Tools → Построить полигоны.
-
Не используйте дополнительные параметры, если нет особых требований.
-
-
Повторное слияние по признаку.
- К полученному полигональному слою примените снова Слияние по признаку, без дополнительных параметров.
-
Итог: слой водоразделов.
- Вы получите готовый слой с полигонами водоразделов.
-
После успешного завершения процесса появится новый векторный слой в панели Слои.
-
Откройте таблицу атрибутов, чтобы увидеть поля
start_id
,area
,avg_elevation
. -
Рекомендуется сохранить результат в формате GeoPackage (
.gpkg
), чтобы внутри хранились атрибуты и метаданные:- Правый клик по слою → «Экспорт → Сохранить объекты как…» → выберите GeoPackage.
-
Демо-ролик: Команда подготовила короткое видео с демонстрацией всех шагов
- Загрузка DEM и точек-истоков.
- Выбор области анализа (4 точки или Центр+Радиус).
- Запуск расчётов и прогресс-бар.
- Получение результирующих полигонов.
Спасибо за использование River Network Twin! Если у вас возникли вопросы или предложения, создайте Issue в репозитории или напишите авторам.