Проект «Уровень-Спутник»: разработка платформы для гидрологов

Как мы создали сервис для поиска спутниковых снимков, синхронизированных с уровнем воды на гидропостах

Приветствую. Меня зовут Александр Иннокентьев, и более года мы с Павлом Головлевым работаем над веб-инструментом для гидрологов — проектом «Уровень-Спутник».

Идея выросла из прикладной задачи. Изучая русловые процессы, состояние пойм или последствия половодий, постоянно сталкиваешься с одним препятствием: данных много, снимков из космоса ещё больше, но сопоставить эти массивы быстро и эффективно — задача не из легких.

На первый взгляд, всё просто: открыл архив, подобрал дату — готово. В реальности же — сплошные компромиссы. Снимок либо перекрыт облаками, либо сделан не вовремя, либо гидрологическая ситуация на фото не соответствует требуемой фазе водного режима. Для специалиста это критично: одна и та же речная протока при разных уровнях воды выглядит совершенно иначе, что делает прямое визуальное сравнение бессмысленным.

В какой-то момент нам надоело вручную стыковать эти разрозненные данные. Так родился «Уровень-Спутник» — сервис, позволяющий находить снимки Landsat и Sentinel не по календарным числам, а ориентируясь на конкретные значения уровня воды на гидропостах.

Главный вопрос: зачем привязывать космоснимки к уровню воды? Ответ прост — чтобы не сравнивать несравнимое.

Общий вид сайта
Общий вид сайта

Эволюция прототипа

Первый вариант сервиса я реализовал в Google Earth Engine. Платформа была удобна бесплатным доступом и наличием готовых спутниковых архивов. Тестировали систему на одном бассейновом округе, используя данные АИС ГМВО. Идея подтвердилась, но техническое исполнение оставляло желать лучшего: интерфейс был медленным, а количество запросов постоянно упиралось в лимиты GEE. Учитывая нынешнее ужесточение квот, решение уйти от этой платформы было верным.

Мы начали оптимизировать процесс. Ключевая мысль: если всё сводится к поиску «снимка по дате», не стоит каждый раз перефильтровывать огромные коллекции. Мы разработали механизм предобработки на основе GEE API: система проходила по гидропостам, выбирала подходящие сцены по геометрии и формировала индексную таблицу (идентификатор снимка, облачность, метаданные).

Это заметно разгрузило систему, но решение оставалось промежуточным:

  • Обработка одного бассейна занимала до 10 часов, а таких округов — более двадцати.

  • Отсутствие масштабируемости: любой новый пост или обновление данных требовали трудоемкого пересчета.

  • Хрупкость архитектуры: ошибка на этапе подготовки требовала перезапуска всего цикла.

Стало ясно: база заложена, но технология требует кардинальных перемен.

Борьба за данные

В самый ответственный момент появились слухи о закрытии доступа к гидрологическим данным. Это поставило проект на грань краха. Тогда я находился в полевой командировке.

Ситуация превратилась в детектив. Вечером, возвращаясь на лодке к точке выгрузки, я узнал, что портал закрывают буквально через час. Пока коллеги занимались бытом, я в лодке с помощью нейросетей дописывал парсер для экстренного скачивания базы. Успел за пять минут до отключения доступа. Этот нервный момент стал закалкой для проекта.

Это наши "поля"
Это наши «поля»

Переход на STAC и Microsoft Planetary Computer

На конференции в ИКИ РАН нам посоветовали обратить внимание на стандарт STAC и инфраструктуру Microsoft Planetary Computer. Это стало поворотным моментом.

STAC позволил упорядочить спутниковые данные, превратив хаотичный набор файлов в структурированный каталог. Платформа Microsoft дала доступ к этим каталогам через API, что позволило нам выстроить гибкую архитектуру: гидрологические данные лежат отдельно, поиск по метаданным — отдельно, а подгрузка тяжелых снимков происходит только тогда, когда это действительно нужно пользователю.

Отказ от таблиц в пользу БД

Когда число записей перевалило за десятки миллионов, Excel и CSV стали неэффективны. Пришлось погружаться в проектирование баз данных. Будучи «самоучкой», я осваивал принципы связей, SQL-запросов и индексации буквально в процессе работы, во многом благодаря помощи ИИ. Результат того стоил: вместо долгого ожидания обработки, поиск стал занимать миллисекунды.

Текущее состояние системы

Сегодня «Уровень-Спутник» — это полноценный рабочий сервис. Пользователь выбирает гидропост, задает критерии по уровню, датам и облачности, а система мгновенно выдает список релевантных сцен Sentinel-2 и Landsat. Интеграция гидрологических рядов с космическими снимками происходит в режиме реального времени.

Технический стек

Фундаментом системы стала эффективная связка: «гидрологическое наблюдение → дата → снимок». Мы ушли от тяжелых предрасчетов к быстрой работе с БД по индексированным параметрам.

Компонент

Технологии

Backend

Python, Flask, Gunicorn

База данных

PostgreSQL, PostGIS (ок. 28 млн записей)

Источники данных

Microsoft Planetary Computer

Frontend

Leaflet.js, Chart.js

Инфраструктура

Docker, nginx, SSL

Вместо заключения

Запуск своего домена level-satellite.ru стал для меня важным эмоциональным рубежом. Это проект, который прошел путь от локальных скриптов до реального рабочего инструмента. Он далек от совершенства, но он «живой» — развивается, исправляет ошибки и приносит пользу. Приглашаю ознакомиться с результатом: level-satellite.ru. Исходный код открыт на GitHub.

 

Источник

Читайте также