Как мы создали сервис для поиска спутниковых снимков, синхронизированных с уровнем воды на гидропостах
Приветствую. Меня зовут Александр Иннокентьев, и более года мы с Павлом Головлевым работаем над веб-инструментом для гидрологов — проектом «Уровень-Спутник».
Идея выросла из прикладной задачи. Изучая русловые процессы, состояние пойм или последствия половодий, постоянно сталкиваешься с одним препятствием: данных много, снимков из космоса ещё больше, но сопоставить эти массивы быстро и эффективно — задача не из легких.
На первый взгляд, всё просто: открыл архив, подобрал дату — готово. В реальности же — сплошные компромиссы. Снимок либо перекрыт облаками, либо сделан не вовремя, либо гидрологическая ситуация на фото не соответствует требуемой фазе водного режима. Для специалиста это критично: одна и та же речная протока при разных уровнях воды выглядит совершенно иначе, что делает прямое визуальное сравнение бессмысленным.
В какой-то момент нам надоело вручную стыковать эти разрозненные данные. Так родился «Уровень-Спутник» — сервис, позволяющий находить снимки 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.


