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

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

Разберём на примере, как эта возможность работает на практике.
Пример: мониторинг растительности по спутниковым снимкам
Допустим, нужно оценить состояние растительности на выбранном участке за последний месяц. Без ручной работы с картами это можно свести к трём шагам, выполненным подряд в одном скрипте:
- Найти подходящий спутниковый снимок – инструмент planetary_search ищет сцены Sentinel-2 по заданной территории, диапазону дат и максимальной облачности.
- Рассчитать вегетационный индекс NDVI – инструмент spectral_indices берёт результат поиска напрямую, без скачивания промежуточного архива, и считает индекс.
- Нарезать результат на тайлы – инструмент raster2tiles превращает растровый слой NDVI в тайлсет (формат NGRC), который можно сразу загрузить в NextGIS Mobile и смотреть без интернета в полевых условиях.
Вот как это выглядит в коде:
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+ инструментов программно, использовать их в связке, чтобы автоматизировать объёмные рутинные процессы.