NextGIS Toolbox SDK: автоматизация сложных процессов геообработки

NextGIS Toolbox – это больше 150 инструментов для обработки геоданных, которые обычно запускают через веб-интерфейс: выбрал инструмент, заполнил форму, получил результат. Но у каждого инструмента есть и вторая сторона – программный запуск (он же «запуск через API»). Для тех, кто пишет код на Python, есть официальная библиотека – Toolbox SDK, которая позволяет легко вызывать инструменты из скриптов, получать результаты, и, что особенно полезно, объединять их в цепочки.

Зачем нужен SDK, если есть веб-интерфейс

Через браузер удобно решать разовые задачи. Но если обработку данных нужно повторять регулярно – по расписанию, при поступлении новых данных, как часть более крупного пайплайна – ручной запуск через форму быстро становится узким местом.

SDK закрывает именно эти случаи:

  • автоматизация – инструмент запускается по расписанию или по событию, без участия человека;
  • интеграция – NextGIS Toolbox подключается к вашим ETL-процессам, CI/CD, корпоративным сервисам;
  • масштабирование – данные обрабатываются пакетно;
  • повторяемость – одинаковые входные параметры гарантированно дают одинаковый результат, что важно для регламентной отчётности.

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

Код инструмента NextGIS Toolbox

Главное отличие от прямых HTTP-запросов: цепочки инструментов

Помимо SDK, каждый инструмент в Toolbox можно вызвать напрямую через HTTP – у него есть эндпоинт, описание параметров, примеры на Python. Этого достаточно, если нужно встроить один конкретный инструмент в уже существующий код и не нужны дополнительные зависимости.

Запуск с SDK – это ещё меньше кода и удобнее там, где задачу нельзя решить одним инструментом. Результат одного вызова можно сразу передать на вход следующему – без промежуточного скачивания и повторной загрузки файла. Это и называется tool chaining.

Схема автоматизированного процесса геообработки с NextGIS Toolbox SDK

Разберём на примере, как эта возможность работает на практике.

Пример: мониторинг растительности по спутниковым снимкам

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

  1. Найти подходящий спутниковый снимок – инструмент planetary_search ищет сцены Sentinel-2 по заданной территории, диапазону дат и максимальной облачности.
  2. Рассчитать вегетационный индекс NDVI – инструмент spectral_indices берёт результат поиска напрямую, без скачивания промежуточного архива, и считает индекс.
  3. Нарезать результат на тайлы – инструмент raster2tiles превращает растровый слой NDVI в тайлсет (формат NGRC), который можно сразу загрузить в NextGIS Mobile и смотреть без интернета в полевых условиях. 

Вот как это выглядит в коде:

Python

from toolbox_sdk import ToolboxClient

toolbox = ToolboxClient()
ToolboxClient.configure_logger()

# Шаг 1: ищем снимок Sentinel-2 по территории и датам
imagery_task = toolbox.tool("planetary_search").submit({
    "collection": "sentinel-2-l2a",
    "bbox": {"west": -89.57, "south": 42.99, "east": -89.23, "north": 43.17},
    "start_date": "2024-10-01",
    "end_date": "2024-10-31",
    "max_cloud_cover": 30,
    "max_items": 1,
    "asset_keys": "B08,B04",
})
imagery_result = imagery_task.wait_for_completion(timeout=300, poll_interval=5)

# Шаг 2: считаем NDVI – результат первого шага передаётся напрямую,
# без скачивания и повторной загрузки файла
spectral_task = toolbox.tool("spectral_indices").submit({
    "sentinel_zip": imagery_result["result_file"],
    "index_type": "NDVI",
    "generate_series": False,
})
spectral_result = spectral_task.wait_for_completion(timeout=600, poll_interval=10)

# Шаг 3: нарезаем готовый слой NDVI на тайлы для NextGIS Mobile.
# Раскраска задаётся палитрой (значение NDVI -> цвет)
tiles_result = toolbox.tool("raster2tiles")({
    "raster_dataset": spectral_result["result_file"],
    "palette": toolbox.upload_file("ndvi_palette.txt"),
    "zoom_levels": "8-16",
})

print(tiles_result["result_file"])  # ссылка на готовый .ngrc для NextGIS Mobile
  

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

Похожим образом строятся и более простые цепочки – например, для векторных данных: результат пересечения слоёв (qgis_intersect) можно сразу передать в следующий инструмент, минуя промежуточное сохранение.

Синхронно или асинхронно

Для коротких операций (конвертация формата, генерализация, простая map-алгебра) SDK позволяет вызывать инструмент синхронно – скрипт просто дожидается результата. Для тяжёлых задач вроде поиска спутниковых снимков или расчёта спектральных индексов используется асинхронный запуск: задача отправляется на выполнение, а скрипт опрашивает её статус до готовности. Это особенность именно тяжёлых инструментов – важно не блокировать выполнение в ожидании обработки, которая может занять несколько минут.

Когда мы асинхронно связываем несколько инструментов, весь код не обязательно должен запускаться в одном процессе (скрипте). Можно получить идентификатор задачи и по нему уже совершенно отдельно (в другом скрипте или процессе) продолжить обработку дальше.


NextGIS Toolbox SDK не заменяет веб-интерфейс. Это ещё один способ добраться до тех же 150+ инструментов программно, использовать их в связке, чтобы автоматизировать объёмные рутинные процессы.

Комментарии запрещены.