1Открыть сессию и скачать вход
$api = "/api/v1"
Invoke-RestMethod "$api/session" -SessionVariable geoscanSession | Out-Null
curl.exe -fsS "$api/examples/01-rgb.json" -o mission.jsonТот же расчёт, что в «Плане» и «Лаборатории», через HTTP API.
Пять шагов от готового примера до файла маршрута.
PowerShell. Выполняйте шаги в одной оболочке: WebSession хранит cookie.
$api = "/api/v1"
Invoke-RestMethod "$api/session" -SessionVariable geoscanSession | Out-Null
curl.exe -fsS "$api/examples/01-rgb.json" -o mission.jsonInvoke-RestMethod -Method Post -Uri "$api/missions/validate" -ContentType "application/json" -InFile mission.json$key = [guid]::NewGuid().ToString()
$job = Invoke-RestMethod -Method Post -Uri "$api/planning-jobs" -WebSession $geoscanSession -ContentType "application/json" -InFile mission.json -Headers @{"Idempotency-Key"=$key}
$job.idОбычно ответ 202. Внутри одной сессии повтор с тем же ключом и входом возвращает существующее задание; другой вход с тем же ключом — 409.
$job = Invoke-RestMethod "$api/planning-jobs/$($job.id)" -WebSession $geoscanSession
$job.status
$job.result.plan.metricsПовторяйте запрос, пока статус QUEUED или RUNNING. К экспорту переходите только после SUCCEEDED.
$uavId = $job.result.plan.sorties[0].uavId
Invoke-WebRequest "$api/planning-jobs/$($job.id)/exports/$uavId/geojson" -WebSession $geoscanSession -OutFile route.geojsonПри первом расчёте интерфейс открывает анонимную сессию. После возвращения доступны ваши расчёты и экспорты. Черновики отдельно сохраняются в этом браузере.
GET /api/v1/session устанавливает HttpOnly cookie __Host-geoscan_session на HTTPS и geoscan_session при локальной работе по HTTP, на 90 дней. Она продлевается при открытии сессии, когда до истечения остаётся меньше 30 дней. На HTTPS используются Secure, Path=/ и префикс __Host- без Domain; SameSite=Lax ограничивает передачу cookie между сайтами. Поле id в ответе не является ключом доступа.
В браузере cookie передаётся автоматически. В командной строке сохраняйте cookie jar и используйте его при создании, опросе, отмене, скачивании отчёта и маршрутов. Примеры и проверка входа доступны без сессии. HTTP 401 означает отсутствие или истечение сессии; чужой расчёт возвращает 404.
После удаления cookie, истечения срока или на другом устройстве история недоступна. Регистрация и восстановление доступа пока не предусмотрены. Скачанный JSON позволяет сохранить важный результат отдельно.
До 4 активных расчётов на браузер и до 20 всего. При HTTP 429 дождитесь завершения или отмените один из расчётов; повтор с тем же Idempotency-Key не занимает новый слот.
Полный JSON миссии до 16 МиБ. Геометрия — Polygon или MultiPolygon в WGS84: [долгота, широта]. Начните с примера выше и изменяйте параметры.
area — что снимать; allowedAirspace — где разрешено лететь; запреты и здания задаются отдельно.rechargePolicy — до 20 последовательных вылетов на аппарат. modelId и sensorModelId обозначают выбранные профили; числовые характеристики остаются редактируемыми.safetyReserveRatio — доля полной ёмкости: заряд 25% и резерв 20% оставляют на миссию 5% ёмкости. Уход на резерв также должен помещаться в доступный ресурс.rechargePolicy.maxSortiesPerUav — лимит вылетов; durationS — время полной зарядки. Первый вылет использует исходный заряд, последующие — 100%. Нужна совместимая общая площадка взлёта и посадки с chargerCount > 0; при занятых зарядных местах появляется очередь. uavs[].initialSiteId закрепляет аппарат за базой.capacity — мест (по умолчанию 1); clearanceTimeS — время освобождения после посадки (30 с). Для одной точки эти параметры совпадают во всех ролях. Резервная площадка физически отличается от основной.headingDeg — истинный курс; runwayLengthM — длина ВПП. У самолёта нужны takeoffRunM и landingRunM. Длина воздушного захода approachLengthM задаётся отдельно.DEMO_SYNTHETIC создаёт искусственные высоты для опытов; это явно отмечается в источнике рельефа. Шаг 20–30 м. Максимумы ячеек сохраняются; verticalUncertaintyM — редактируемый запас на погрешность, 5 м для подготовленных данных, не гарантия точности источника.sortie-graph-v3. timeLimitMs и maxCandidateEvaluations ограничивают поиск; maxIterations — число пространственных порядков. Оптимальность в restrictedMasterOptimal относится только к сгенерированным вариантам вылетов, не ко всей задаче.Загрузите выбранный пример или вставьте свой JSON. Проверка не создаёт запись в истории расчётов.
result.plan.metrics — суммарный налёт, момент завершения, дистанция, энергия и покрытие. sorties — вылеты, фазы, площадки, резервные маршруты и интервалы занятости. Один uavId может повторяться: sequenceNumber задаёт номер вылета этого аппарата. rechargeBeforeS, rechargeStartS и rechargeEndS описывают зарядку; totalRechargeTimeS суммирует её по всем аппаратам и не входит в налёт.
QUEUED / RUNNINGПродолжайте опрашивать состояние раз в 1–3 секунды.
SUCCEEDEDДоступны метрики, маршруты, резервные пути и экспорт. Глобальная оптимальность не гарантируется.
NO_SOLUTIONПроверенные варианты не удовлетворили ограничениям. Посмотрите violations; это не доказательство невозможности задачи.
INVALID_INPUTИсправьте поля из issues. Валидация или создание задания также могут вернуть HTTP 422.
TIMED_OUTПроверенного плана нет. Если он был найден до лимита, вернётся SUCCEEDED с TIME_LIMIT_BEST_VERIFIED.
FAILED / CANCELLEDFAILED — техническая ошибка, CANCELLED — расчёт отменён. Экспорт недоступен.
HTTP 409 — конфликт ключа или результат ещё недоступен; 422 — неверный вход; 429 — очередь заполнена; 503 — сервис недоступен.
GeoJSON и KML включают все вылеты выбранного БВС. GeoJSON экспортирует геометрию WGS84, высоты MSL/AGL — в свойствах. KML использует AGL. Это план полёта, не протокол загрузки в автопилот.
Перечень и схемы запросов загружаются из текущей спецификации сервера.
Точные имена полей, диапазоны и обязательные свойства. Ссылки $ref ведут к именам схем из этого списка.