Перейти к содержанию

Источники рельефа и модели местности для симулятора БВС

Документ требований, не проектного решения. Отвечает на один вопрос: откуда сервис-симулятор берёт рельеф, поверхность, препятствия и ветер, чтобы возвращать планировщику числа, которые планировщик не может посчитать сам.

Терминология — docs/task5/00-brief/03-glossary.md (ПАФС, ЛАФС, галс, ЛЗП, GSD, makespan, превышение). ТТХ парка — docs/task5/10-hardware/fleet.yaml и payloads.yaml, единственный источник правды. Контракт с планировщиком — docs/task5/40-formats/03-our-mission-schema.md.

Единицы: длина и высота — метры, разрешение ЦМР — метры на ячейку, скорость — м/с, время — секунды, площадь — км², объём данных — МБ/ГБ.

Дата ревизии источников: 15.09.2026. Лицензии и квоты проверены на эту дату по первоисточникам (ссылки в конце).


0. Зачем симулятору геоданные — связь с планировщиком

Планировщик (geoscan) работает с плоской геометрией: полигоны, галсы, шаг галсов, запас хода. Рельефа в его модели нет — он выдаёт altitude_m и altitude_frame и помечает высоту warning'ом. Симулятор обязан закрыть ровно те позиции, где нужен третий измеритель:

Число, которое отдаёт симулятор Почему планировщик не может его посчитать сам Куда идёт
Фактический клиренс над рельефом и препятствиями, м Нужна ЦМР и слой вертикальных объектов violations.altitude, отчёт валидатора
Фактический GSD по кадрам, см/пикс GSD зависит от наклонной дальности до реальной поверхности, а не от номинальной H Проверка quality.gsd_cm задачи
Реальное время галса при профиле ветра по высоте, с В схеме сценария ветер — одно число (wind_speed_ms), в атмосфере это профиль makespan_s, total_flight_time_s
Достижимость точки при огибании рельефа (ЛАФС, геофизика) Требует трассировки по ЦМР unassigned с причиной
Проверка правила «не ниже точки старта» для Геоскан 201 Нужны абсолютные высоты рельефа вдоль всего маршрута violations.altitude
Кадры с камеры для демонстрации Нужна текстурированная 3D-сцена Демонстрация жюри, критерий «качество демонстрации»

Прямая цитата первоисточника, задающая планку для слоя препятствий:

«при планировании маршрута необходимо изучить район полета и убедиться, что планируемая траектория полета проходит не менее чем на 100 м выше элементов рельефа и высотных объектов (вышек, труб, опор ЛЭП и т.п.)» — РЭ Геоскан 201, раздел мер безопасности (files/Geoscan_201_Manual.pdf).

«БВС из состава БАС не способно выполнять полеты ниже высоты точки старта. В горной местности старт необходимо осуществлять в низшей точке, чтобы весь маршрут лежал выше точки старта» — там же.

«Значения в столбце Превышение — это разность абсолютной высоты точки ПЗ и рельефа под ней. Таким образом, высота рельефа обязательно учитывается» — РЭ Геоскан 201, раздел Geoscan Planner.

То есть отраслевой эталон (Geoscan Planner) уже работает с ЦМР, а не с плоскостью, и хранит превышение отдельной колонкой. Симулятор без рельефа в такой компании не читается как инструмент.


1. Сводная таблица источников

Столбец «Закрытый контур» — можно ли пользоваться в tailnet без выхода в интернет (после разовой выгрузки), не нарушая лицензию.

Источник Что даёт Разрешение / точность Покрытие РФ Лицензия Цена Закрытый контур Вердикт
— A. Глобальные открытые ЦМР/ЦМП —
Copernicus DEM GLO-30 ЦМП (DSM), с растительностью и зданиями 1″ ≈ 30 м; абс. верт. < 4 м LE90, абс. гориз. < 6 м CE90; отн. верт. < 2 м при уклоне ≤ 20 %, < 4 м при > 20 % Полное; ограничения по AM/AZ/MD сняты в релизе 2023_1 Free & open worldwide, атрибуция «© DLR e.V. 2010-2014 и © Airbus DS GmbH 2014-2018 … под COPERNICUS» 0 Да — COG в S3 copernicus-dem-30m, анонимный доступ, зеркалится локально Берём — основа
Copernicus DEM GLO-90 То же, грубее 3″ ≈ 90 м, та же спецификация точности Полное Та же 0 Да, бакет copernicus-dem-90m Резерв — заполнение пробелов GLO-30
Copernicus DEM EEA-10 ЦМП 10 м 10 м Нет — 39 стран Европы, РФ не входит Ограниченный доступ по категории пользователя 0 для eligible Не берём — нет покрытия РФ
SRTM GL1 / GL3 ЦМП 30 / 90 м, EGM96 Частично — только 60° с.ш. … 56° ю.ш.; всё севернее Санкт-Петербурга/Вологды вне покрытия Public domain (NASA) 0 Да Не берём как основу — обрезано по 60° с.ш.
NASADEM ЦМП, улучшенный SRTM (ASTER GDEM + ICESat GLAS + PRISM для заполнения пустот) 1″ ≈ 30 м, EGM96 Та же граница 60° с.ш. … 56° ю.ш. (~80 % суши Земли) Public domain (NASA) 0 Да Резерв для южных регионов, где важна сравнимость с чужими расчётами
ASTER GDEM v3 ЦМП 30 м; v2 — ~20 м по вертикали при 95 % доверии, EGM96 Полное — 83° с.ш. … 83° ю.ш. Открытая (NASA/METI), атрибуция 0 Да Не берём — точность вдвое хуже GLO-30 при том же разрешении
ALOS AW3D30 v4.1 (JAXA) ЦМП 1″ ≈ 30 м, целевая точность 5 м RMSE Полное Бесплатно по условиям JAXA, атрибуция 0 Да Резерв — независимый контроль GLO-30
FABDEM V1-2 «Голая земля»: из GLO-30 сняты здания и лес 1″ ≈ 30 м Полное CC BY-NC-SA 4.0 — некоммерческая; коммерческая лицензия только через Fathom 0 для науки, коммерческая — по запросу Да технически, нет юридически Не берём — NC-лицензия несовместима с коммерческим продуктом
ArcticDEM v4.1 (PGC) ЦМП высокого разрешения, север мозаики 2 м / 10 м / 32 м, тайлы 50×50 км, GeoTIFF 32-бит; релиз 04.2025 Отлично для РФ севернее 60° с.ш. Public domain (финансирование NSF); 2 м — только education/research, 10 м и 32 м открыты всем 0 Да, публичный бакет AWS + портал PGC Берём — 10 м, только севернее 60° с.ш.
REMA (PGC) Антарктида 2–32 м Нет Аналогично ArcticDEM 0 Да Не берём — нет пересечения с задачей
OpenTopography API Точка доступа к COP30/COP90/SRTM/NASADEM/ALOS Транспорт, не данные Требует API-ключ 0, но 50 вызовов/сутки для не-академиков (250 для академиков) Нет — внешний HTTP Берём только для разовой выгрузки, не для рантайма
AWS Open Data (copernicus-dem-30m/90m, ArcticDEM, ESA WorldCover) Прямой S3-доступ к тем же данным COG, анонимный доступ (--no-sign-request) По лицензии набора 0, трафик за счёт AWS Нет при работе, да после зеркалирования Берём — основной канал выгрузки
— B. Готовые тайловые сервисы рельефа —
AWS Terrain Tiles (бывш. Mapzen) Готовые тайлы высот terrarium PNG, EPSG:3857, схема z/x/y, без авторизации Композит из SRTM/GMTED/NED и др. Полное Открытая, без SLA и гарантий доступности 0 Нет при работе, да после зеркалирования Резерв — быстрый старт, но источник неоднородный
Mapbox Terrain-RGB / Terrain-DEM v1 Тайлы высот, кодировка RGB с шагом 0,1 м 512 px тайлы Полное Коммерческие условия Mapbox, токен обязателен; ToS не даёт явного права на офлайн-кэш и перераспространение По тарифу Mapbox Нет — токен + неясность с кэшем Не берём — ключ и юридическая неопределённость убивают демо в закрытом контуре
MapTiler on-prem Terrain RGB + Terrain 3D (Cesium quantized-mesh) + контуры + отмывка, полностью self-hosted Планетарный охват Полное Коммерческая on-prem; Standard — 1 приложение, ≤ 500 MAU; Custom — офлайн-активация, Kubernetes Standard 2 500 $/год (без НДС); Terrain 3D — только в Custom, цена по договору Да — офлайн-активация в Custom Резерв — если время на генерацию тайлов окажется дороже 2 500 $
Cesium ion (SaaS) Cesium World Terrain (quantized-mesh с water mask и нормалями) Композит нескольких источников Полное Коммерческие планы от 149 $/мес (individual), 499 $/мес (premium) Нет — облачный токен Не берём — внешняя зависимость на защите
Cesium ion Self-Hosted То же on-prem, Kubernetes, 3D-тайлинг, REST API Enterprise-лицензия По запросу Да Не берём — enterprise-цикл продаж не влезает в 15 дней
— C. Фотореалистичный 3D —
Google Photorealistic 3D Tiles Готовая фотограмметрическая 3D-сетка городов, формат 3D Tiles 1.1 (OGC Community Standard) 2 500+ городов в 49 странах Практически нулевое по РФ (ДОПУЩЕНИЕ-1) Google Maps Platform ToS: запрещено пре-фетчить, индексировать, хранить и кэшировать контент; недоступно новым проектам с биллингом EU/EEA с 08.07.2025 1 000 бесплатных root-tile запросов/мес, далее 6 $ за 1 000 Нет: кэш запрещён ToS; Google Cloud недоступен российским пользователям с 20.03.2024 (санкционный пакет ЕС) Не берём — блокировано трижды: покрытие, ToS, доступность биллинга
Cesium ion → Google 3D Tiles Тот же контент через Cesium Те же Google Maps Content Third Party Terms Cesium-план + Google SKU Нет Не берём — наследует все ограничения Google
Microsoft Global ML Building Footprints 1,4 млрд контуров зданий + десятки млн оценок высоты; обновление 28.02.2025: +18 млн контуров, +4,2 млн высот Контуры из снимков Maxar/Vexcel 2017-2024 Есть: РФ — ~5,0 ГБ, 4-е место по объёму данных в наборе ODbL 0 Да — выгрузка по quadkey-партициям Берём — слой зданий там, где OSM пуст
OpenStreetMap (здания, мачты, ЛЭП) building + building:levels/height; power=tower/pole/line/minor_line; man_made=mast/tower/chimney Зависит от региона, высоты проставлены не везде Неполное, но по инфраструктуре ЛЭП в РФ пригодно ODbL 1.0 (данные), share-alike на производные базы 0 Да — региональный экстракт .osm.pbf → PMTiles Берём — основной слой препятствий
OSM2World / OSM Buildings Генерация 3D-геометрии из OSM Процедурная экструзия Открытые (LGPL/MIT-семейство) 0 Да Резерв — если своя экструзия окажется дороже
— D. Своя топосъёмка и российские источники —
GeoTIFF / COG (ЦМР, ЦММ, ортофото из Agisoft Metashape) Рельеф и поверхность заказчика Обычно 0,05–1,0 м при съёмке с БВС По факту работ Заказчика Да, файл Берём — приоритет над любым глобальным источником
LAS / LAZ 1.2–1.4, COPC Плотное облако точек с LiDAR- или фотограмметрической съёмки Плотность задаётся заказчиком По факту работ Заказчика Да Берём — растеризация в ЦМР/ЦМП
SXF / MTW («Панорама») Векторная топооснова / матрица высот Масштабы 1:500…1:1 000 000 По факту Заказчика Да Берём с оговоркой: GDAL-драйвер SXF read-only, требует RSC-классификатор; MTW читается драйвером RMF (16-бит int, 32/64-бит float, один канал)
Shapefile / DXF-DWG Зоны, границы, коммуникации По факту Заказчика Да Берём — SHP через GDAL напрямую, DWG — через конвертацию в DXF
НСПД / ЕЭКО (Росреестр) Государственная картооснова РФ Полное Полный доступ только через ЕСИА, не открытые данные, API для внешних сервисов не публичен Нет Не берём — нет пригодного канала интеграции в рамках хакатона
— E. Препятствия, лес, покров —
ESA WorldCover v200 (2021) 11 классов земного покрова 10 м, COG, тайлы 3×3°, EPSG:4326; общая точность 76,7 % Полное CC BY 4.0 0 Да — AWS Open Data Берём — маска «лес/застройка/вода» для слоя препятствий и для выбора мест посадки
ETH Global Canopy Height (2020) Высота полога леса 10 м; RMSE 6,0 м, 5,2 м после отбрасывания 20 % наименее уверенных оценок Полное Открытая, атрибуция ETH Zurich 0 Да Берём — высота полога поверх ЦМР «голой земли»
Meta 1 m Global Canopy Height Высота полога, детальнее 1 м; MAE 2,8 м; данные 2009-2020, 80 % — 2018-2020; систематически занижает высоту Полное Открытая, атрибуция 0 Да, но объём на порядок больше Резерв — только для демо-полигона
OSM power=* / man_made=* Опоры ЛЭП, мачты, трубы Точечная геометрия; height=* проставлен не везде Неполное ODbL 1.0 0 Да Берём — прямое исполнение правила «100 м над вышками, трубами, опорами ЛЭП»
— F. Ветер и погода —
Open-Meteo Forecast API Ветер на 10 / 80 / 120 / 180 м над землёй + на 19 уровнях давления (1000, 975, 950, 925, 900, 850, 800, 700, 600, 500, 400, 300, 250, 200, 150, 100, 70, 50, 30 гПа); шаг 1 ч, горизонт до 16 сут 1000 гПа ≈ 60–160 м над уровнем моря — высота уровня плавает Полное (глобальные модели) Данные CC BY 4.0; API бесплатен для некоммерческого использования, коммерческое — по платному тарифу; сервер AGPL-3.0, self-host в Docker 0 на free-тарифе: 10 000 вызовов/сут, 5 000/ч, 600/мин Да — self-host в Docker, либо снапшот Берём — основной источник профиля ветра
DWD ICON-EU (через Open-Meteo) Ветер высокого разрешения 0,0625° ≈ 6,5–7 км; домен 23,5° з.д. … 62,5° в.д., 29,5°…70,5° с.ш. Только европейская часть РФ до ~62,5° в.д. Открытая DWD 0 Да Берём для европейской части; восточнее автоматически GFS
NOAA GFS (через Open-Meteo) Глобальный ветер 0,25° ≈ 25 км Полное Public domain 0 Да Берём — фоллбэк для Сибири и Дальнего Востока
ERA5 (Copernicus CDS) Реанализ: u/v ветра на 37 уровнях давления (1000…1 гПа), сетка 0,25°, шаг 1 ч, с 1940 г. по настоящее Задержка ~5 суток Полное CC-BY, атрибуция «Generated using Copernicus Climate Change Service information [Year]» + DOI 0, доступ через cdsapi ≥ 0.7.7 / ecmwf-datastores-client Да после выгрузки в NetCDF/GRIB Берём — источник воспроизводимых сценариев («ветер 12.07.2025, 06:00 UTC»)

2. Рекомендация — одна схема

2.1. Пирамида приоритета высот

Для каждой ячейки мира берётся первый доступный слой сверху вниз:

1. Своя топосъёмка заказчика (GeoTIFF/COG, LAS/LAZ, MTW)   — 0,05…1 м
2. ArcticDEM v4.1, мозаика 10 м                             — только севернее 60° с.ш.
3. Copernicus DEM GLO-30                                    — база по всей РФ
4. Copernicus DEM GLO-90                                    — заполнение пробелов GLO-30

Переход между слоями — с feathering по буферу 3 ячейки грубого слоя, чтобы на стыке не возникало ступеньки, которую физика примет за препятствие. Факт подмены слоя фиксируется в манифесте мира (см. SIM-GEO-17), потому что от этого зависит доверие к числу клиренса.

2.2. Поверхность и препятствия

GLO-30 и ArcticDEM — это ЦМП (DSM), то есть лес и застройка уже включены в высоты, но со сглаживанием 30-метровой ячейки: отдельная опора ЛЭП в такой сетке не видна вообще. Поэтому слой вертикальных препятствий строится независимо и складывается с рельефом:

obstacle_height = terrain_z + max(
    canopy_height(ETH 10 м)      где WorldCover = Tree cover,
    building_height(OSM height / building:levels × 3 м / MS ML footprints),
    point_obstacle_height(OSM power=tower|pole, man_made=mast|tower|chimney)
)

FABDEM, который дал бы честную «голую землю», отпадает по NC-лицензии — вместо него для контроля двойного счёта леса используется WorldCover-маска: там, где класс Tree cover, высота полога не добавляется к DSM, а сверяется с ним (разница > 2·RMSE = 12 м → предупреждение в отчёте мира).

2.3. Тайлинг и раздача

Один исходник — три производных представления, всё генерируется один раз и лежит локально:

Представление Для чего Формат
float32 COG в локальной UTM-зоне сценария Физика, коллизии, расчёт клиренса и GSD на бэкенде GeoTIFF COG
terrain-RGB MapLibre GL JS + deck.gl (2D/3D-карта планировщика) PMTiles
quantized-mesh Cesium (вкладка 3D-пролёта) PMTiles / статический каталог

Раздача — PMTiles по HTTP Range, без тайл-сервера, без внешних ключей. Это то же решение, что уже зафиксировано в docs/task5/50-stack/04-frontend-3d.md, и оно же закрывает требование «демо поднимается без интернета».

2.4. Путь загрузки своей топосъёмки

файл заказчика
  → определение CRS: из файла (EPSG/WKT/PRJ) → если нет, пользователь выбирает явно
  → если МСК без ключей перехода: ОТКАЗ с явной ошибкой (не молчаливый WGS84)
  → приведение по вертикали к опорному датуму сценария (PROJ + модель геоида)
  → LAS/LAZ: классификация ground (если нет) → растеризация в ЦМР и ЦМП с шагом, заданным пользователем
  → перепроецирование в локальную UTM-зону сценария
  → клип по полигону действия + feathering по границе
  → запись в пирамиду приоритета (уровень 1) + запись в манифест мира

Ортофотоподложка из своей топосъёмки принимается тем же путём и используется как текстура сцены. Внешние фотоподложки (Google, Mapbox, Bing) в схеме не участвуют вообще — по умолчанию сцена рисуется гипсометрией и отмывкой рельефа плюс векторные слои.

2.5. Ветер

рантайм-демо      → Open-Meteo (self-host в Docker или снапшот JSON в репозитории)
воспроизводимый прогон → ERA5 NetCDF, выгруженный заранее, привязан к world_snapshot_id
профиль по высоте → интерполяция между 10/80/120/180 м и уровнями давления по геопотенциалу

Оба источника дают вектор ветра как функцию высоты, а не одно число. Это прямой вход в модель ветра симулятора и прямое опровержение упрощения из схемы сценария планировщика, где ветер задан скаляром wind_speed_ms + wind_direction_deg. Симулятор считает разницу и возвращает её числом: насколько план, построенный на постоянном ветре, расходится с планом на профиле.


3. Системы координат и высоты

3.1. Обязательный минимум

Что Коды Почему обязательно
Плановые СК входа/выхода EPSG:4326 (WGS84) Контракт с планировщиком и выгрузка KML/GeoJSON
Плановые СК расчёта UTM-зоны над РФ (EPSG:326xx, зоны 35N…60N) Считать геометрию в градусах нельзя — см. 40-formats/03
СК заказчика, исторические EPSG:4284 Pulkovo 1942 + зоны Гаусса-Крюгера Основной массив архивных материалов в РФ
СК заказчика, действующая EPSG:7683 ГСК-2011 + ГСК 3GK (напр. EPSG:21320, 21336); заменяет Пулково-1995 с 21.10.2011, ГК-системы — с 01.01.2021 Государственная СК по ПП РФ от 24.11.2016 № 1240
МСК-зоны регионов Кодов в EPSG нет для большинства зон Реальный формат данных заказчика
Датумы высот EPSG:3855 EGM2008 (Copernicus DEM), EPSG:5773 EGM96 (SRTM/NASADEM/ASTER), EPSG:5705 Балтийская 1977 (государственная система высот по ПП № 1240), эллипсоидальная WGS84 Три разных нуля в одном проекте — норма, а не патология

3.2. Три высоты, которые путают

Обозначение Что это Кто её выдаёт
h — эллипсоидальная Над эллипсоидом WGS84 GNSS-приёмник борта (u-blox ZED-F9P у 201 и Gemini)
H — нормальная / ортометрическая (AMSL) Над квазигеоидом (БСВ-77) или геоидом (EGM2008/EGM96) Топокарты, ЦМР, авиационные документы
AGL — превышение Над рельефом под точкой Полётное задание, колонка «Превышение» в Geoscan Planner

Связь: h = H + ξ, где ξ — аномалия высоты. Она не мала: для точки 40°00′ с.ш., 46°00′ в.д. EGM2008 даёт 19,43 м. По территории РФ значения того же порядка — десятки метров (ДОПУЩЕНИЕ-4: точный диапазон по РФ не подтверждён первоисточником).

3.3. Чем грозит — цена ошибки в метрах

Ошибка первого рода: перепутать h и H. Систематический сдвиг всей сцены на аномалию высоты. На десятках метров это означает, что планировщик выдаст задание «100 м AMSL», а борт, считающий эллипсоидальную высоту, полетит на ~80 м над геоидом. Для Геоскан 201 с altitude_agl_min: 100 (fleet.yaml) это уже выход за нижний эксплуатационный предел.

Ошибка второго рода — она же дороже: перепутать AGL и AMSL. Полигон ПАФС размером 5×5 км с перепадом рельефа 50 м — обычная средняя полоса, не горы. Задание «100 м AGL», поданное как «100 м AMSL» от нуля площадки старта, даёт на возвышенной части полигона фактический клиренс 50 м. Это ровно вдвое ниже требования РЭ Геоскан 201 («не менее чем на 100 м выше элементов рельефа и высотных объектов») и, для того же 201, нарушение правила «не способно выполнять полеты ниже высоты точки старта». Дополнительно уезжает GSD: при geoscan_pf1b с gsd_coefficient = 1,9583e-4 (payloads.yaml) высота 100 м даёт 1,96 см/пикс, высота 50 м — 0,98 см/пикс, то есть полоса захвата сужается вдвое, шаг галсов оказывается больше ширины захвата, и в покрытии появляются дыры, которых планировщик не видит.

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

3.4. Правила, которые из этого следуют

  1. Каждый растровый и векторный слой хранит crs и vertical_datum явно; слой без этих полей не принимается.
  2. Сценарий имеет один опорный датум высот; все слои приводятся к нему при импорте, а не при отрисовке.
  3. Любая точка обмена с планировщиком несёт altitude_frame{AGL, AMSL, ELLIPSOIDAL} — поле уже есть в схеме плана (sorties[].altitude_frame), симулятор делает его обязательным.
  4. Все конверсии высот выполняются только через PROJ с явной моделью геоида; конверсия без модели (константой) запрещена и логируется как ошибка.
  5. МСК: параметры перехода не публичны и запрашиваются в Росреестре (порядок предоставления сведений из фонда — ПП РФ от 04.03.2017 № 262). Сервис принимает их от пользователя как PROJ-строку или 7 параметров Гельмерта, не хранит в репозитории и не отдаёт наружу через API.

4. Риски и юридические ограничения

Риск Вероятность / эффект Что делаем
R-1 Google Photorealistic 3D Tiles недоступны: покрытие РФ фактически отсутствует; ToS прямо запрещает пре-фетч, индексацию, хранение и кэширование контента; Google Cloud закрыт для российских пользователей с 20.03.2024 Высокая / отменяет весь вариант «фотореализм из коробки» Исключён из архитектуры. Фотореализм — только из топосъёмки заказчика
R-2 FABDEM CC BY-NC-SA 4.0 — лучший открытый bare-earth нельзя использовать в коммерческом продукте Высокая / теряем качество «голой земли» Компенсируем связкой WorldCover + canopy height поверх GLO-30; FABDEM не попадает в сборку
R-3 ArcticDEM 2 м доступен только для education/research Высокая / нельзя брать самое точное разрешение Используем открытые 10 м и 32 м
R-4 Mapbox / Cesium ion требуют токен, ToS не даёт явного права на офлайн-кэш Высокая / демо без интернета невозможно Исключены; тайлы генерируем сами
R-5 OpenTopography: 50 вызовов/сутки для не-академиков Высокая / нельзя строить рантайм на API Только разовая выгрузка; рантайм — локальное зеркало
R-6 AWS Open Data без SLA, бакет может стать недоступен Средняя / срыв сборки мира Зеркало всех исходников в локальном объектном хранилище + проверка контрольных сумм
R-7 Доступность dataspace.copernicus.eu и AWS из контура заказчика не гарантирована Средняя / нет исходников Архив предвыгруженных тайлов на демо-полигон входит в поставку
R-8 ODbL share-alike (OSM, MS Building Footprints): производная база препятствий подпадает под share-alike; отрисованная картинка — produced work, требует только атрибуции Средняя / ограничение на закрытие исходников слоя Слой препятствий хранится как отдельный артефакт с ODbL-атрибуцией; ядро симулятора от него отделено
R-9 Российская регуляторика: 431-ФЗ регулирует геодезическую и картографическую деятельность; исторически п. 15 перечня сведений, подлежащих засекречиванию, относил к гостайне координаты географических объектов, определённые точнее 30 м в СК-42 и геоцентрических СК. Действующая редакция перечня непублична Средняя / может ограничить публикацию 3D-модели реального объекта ОТКРЫТЫЙ ВОПРОС к заказчику (см. раздел 6). Демо строится на открытом полигоне; режимные объекты в поставку не входят
R-10 Нет интернета на защите Высокая (по опыту) docker compose up без сети — обязательный приёмочный тест, см. SIM-GEO-16
R-11 МСК-параметры не получены к моменту работ Средняя / чужая топосъёмка не читается Явная ошибка импорта с инструкцией, а не молчаливая подстановка WGS84

5. Требования SIM-GEO

Приоритеты: MUST — без этого симулятор не выполняет свою функцию; SHOULD — заметно усиливает результат; COULD — делается при остатке времени.

Колонка «Источник»: ТЗ — ТЗ хакатона; РЭ-201 — руководство по эксплуатации Геоскан 201; fleet/payloads — YAML-файлы парка; schema40-formats/03-our-mission-schema.md; validator70-plan/01-validator-first.md; research — исследование источников в разделе 1; ДОП-n — допущение из раздела 6.

ID Требование Приоритет Критерий приёмки Источник
SIM-GEO-01 Базовый рельеф мира строится из Copernicus DEM GLO-30 с заполнением пробелов из GLO-90 MUST Для произвольного bbox в границах РФ мир собирается без обращения к внешней сети; покрытие 100 % площади сценария; шаг сетки ≤ 30 м; объявленная точность ≤ 4 м LE90 research
SIM-GEO-02 Севернее 60° с.ш. базовый слой замещается мозаикой ArcticDEM v4.1 10 м SHOULD Для тестового полигона на 68° с.ш. шаг сетки итогового ЦМР = 10 м; факт замещения виден в манифесте мира research
SIM-GEO-03 Импорт собственной ЦМР/ЦММ заказчика в GeoTIFF/COG с произвольным EPSG MUST Файл ≤ 4 ГБ импортируется без ручной подготовки; в 20 контрольных точках высота после импорта совпадает с исходной ≤ 0,10 м; исходное разрешение сохраняется без ресемплинга вниз ДОП-2, research
SIM-GEO-04 Импорт облаков точек LAS/LAZ 1.2–1.4 и COPC с растеризацией в ЦМР и ЦМП SHOULD Шаг растеризации задаётся пользователем в диапазоне 0,25–5,0 м; для файла 100 млн точек импорт завершается ≤ 15 мин; в отчёте импорта указана доля ячеек без точек ДОП-2
SIM-GEO-05 Импорт векторных слоёв зон и объектов: GeoJSON, KML/KMZ — обязательно; Shapefile, DXF, SXF — дополнительно MUST (GeoJSON, KML) / SHOULD (SHP, DXF, SXF) Файл, выгруженный планировщиком в KML и GeoJSON, загружается в симулятор без ручной правки; round-trip экспорт→импорт сохраняет геометрию с точностью ≤ 0,01 м; для SXF явно сообщается о необходимости RSC-классификатора ТЗ, schema, research
SIM-GEO-06 Поддержка плановых СК: EPSG:4326, UTM 35N–60N, EPSG:4284 (Пулково-1942) с зонами ГК, EPSG:7683 (ГСК-2011) с ГСК 3GK MUST Round-trip WGS84 → целевая СК → WGS84 даёт расхождение ≤ 0,05 м на всех 4 семействах; площадь полигона в проекции отличается от геодезической ≤ 0,1 % ПП РФ № 1240, validator
SIM-GEO-07 Данные в МСК принимаются только при явно заданных пользователем параметрах перехода; параметры не сохраняются в репозиторий и не отдаются через API MUST Импорт файла, помеченного как МСК, без параметров завершается ошибкой с кодом CRS_MSK_KEYS_REQUIRED; тест проверяет, что молчаливой интерпретации как WGS84 не происходит; grep по репозиторию не находит числовых ключей МСК ПП РФ № 262, R-11
SIM-GEO-08 Каждый слой хранит crs и vertical_datum; поддерживаются EGM2008 (3855), EGM96 (5773), Балтийская 1977 (5705), эллипсоидальная WGS84; в одной сцене — один опорный датум MUST Слой без vertical_datum отклоняется; попытка смешать два датума в одной сцене даёт ошибку VDATUM_MISMATCH; конверсия выполняется через PROJ с моделью геоида, конверсия константой отклоняется research, ПП РФ № 1240
SIM-GEO-09 Любой обмен высотами с планировщиком содержит обязательное altitude_frame ∈ {AGL, AMSL, ELLIPSOIDAL} MUST Полётное задание без altitude_frame отклоняется с кодом ALT_FRAME_REQUIRED; регрессионный тест на 5 сценариях schema, раздел 3.3
SIM-GEO-10 Симулятор возвращает превышение (AGL) для каждой путевой точки принятого задания MUST Для задания из 112 точек выдаётся 112 значений AGL; значения совпадают с независимым расчётом по ЦМР ≤ 0,5 м РЭ-201 (колонка «Превышение»), schema
SIM-GEO-11 Симулятор считает минимальный клиренс над рельефом и над вертикальными препятствиями по всей траектории MUST Для geoscan_201 клиренс < 100 м даёт violations.altitude ≠ 0; шаг дискретизации траектории ≤ 10 м; для мультироторов порог берётся из fleet.yaml, при отсутствии — помечается как assumed РЭ-201, fleet, validator
SIM-GEO-12 Слой вертикальных препятствий строится из OSM (power=tower/pole/line/minor_line, man_made=mast/tower/chimney, building) и Microsoft ML Building Footprints MUST На демо-полигоне ≥ 95 % объектов OSM указанных типов попадают в слой; объекты без height=* получают значение по умолчанию, помеченное height_source: assumed, и попадают в «известные ограничения» РЭ-201 («вышек, труб, опор ЛЭП»), ДОП-3
SIM-GEO-13 Высота полога леса учитывается из ETH Global Canopy Height 10 м с маской ESA WorldCover SHOULD Разница между DSM GLO-30 и (bare-earth + canopy) в классе Tree cover > 12 м (2 × RMSE 6,0 м) фиксируется предупреждением в отчёте мира research
SIM-GEO-14 Модель ветра принимает профиль по высоте, а не скаляр: узлы 10/80/120/180 м и уровни давления MUST Для заданных координат и времени симулятор выдаёт ≥ 4 узла профиля; интерполяция между узлами линейна по геопотенциальной высоте; конвенция направления — метеорологическая («откуда дует»), как в schema research (Open-Meteo), schema
SIM-GEO-15 Воспроизводимые прогоны используют предвыгруженный ERA5 (0,25°, шаг 1 ч, 37 уровней давления), привязанный к снапшоту мира SHOULD Прогон сценария «ветер на дату T» даёт идентичные метрики при повторе через неделю; исходный NetCDF лежит локально research (ERA5), validator
SIM-GEO-16 Полный прогон демо-сценария выполняется без доступа в интернет MUST docker compose up при отключённой внешней сети поднимает сцену, выполняет задание и выдаёт метрики; в логах нет исходящих DNS-запросов за пределы контура ТЗ (демонстрация), R-10
SIM-GEO-17 Каждый снапшот мира сопровождается манифестом: источник, версия/релиз набора, дата выгрузки, bbox, CRS, датум высот, sha256 каждого файла MUST Манифест — обязательное поле ответа API world/{id}; отсутствие любого из перечисленных полей — ошибка сборки мира validator
SIM-GEO-18 Headless-режим детерминирован: одинаковые world_snapshot_id + seed + задание дают идентичные метрики MUST Два прогона подряд дают побитово совпадающий JSON метрик; прогон через 7 суток на том же снапшоте — тоже validator
SIM-GEO-19 Симулятор считает фактический GSD по наклонной дальности до реальной поверхности и сравнивает с заданным quality.gsd_cm SHOULD Для полигона с перепадом ≥ 50 м выдаётся распределение GSD по кадрам (min/median/max); превышение заданного GSD более чем на 10 % отмечается предупреждением payloads (gsd_coefficient), schema
SIM-GEO-20 Высота площадок старта и посадки сверяется с ЦМР SHOULD Расхождение launch_sites[].elevation_m из сценария с ЦМР > 5 м даёт предупреждение ELEV_MISMATCH с указанием обоих чисел schema, research (LE90 < 4 м у GLO-30)
SIM-GEO-21 В сборку по умолчанию не входят наборы с некоммерческой или запрещающей кэширование лицензией MUST CI-проверка манифеста зависимостей: отсутствие FABDEM, Google 3D Tiles, ArcticDEM 2 м, Mapbox-тайлов; список лицензий всех включённых наборов публикуется в документации R-1, R-2, R-3, R-4
SIM-GEO-22 Геоданные обновляются без пересборки образа SHOULD Замена файлов снапшота в подключённом томе и рестарт сервиса меняют world_snapshot_id; образ не пересобирается research (релизы GLO-30 и ArcticDEM выходят ежегодно)
SIM-GEO-23 Для Геоскан 201 проверяется правило «не ниже точки старта» MUST Траектория с точкой ниже абсолютной высоты площадки старта даёт violations.altitude ≠ 0 РЭ-201, fleet (can_fly_below_launch_point: false)
SIM-GEO-24 Все внешние наборы зеркалируются локально с проверкой контрольных сумм при загрузке MUST Сборка мира из локального зеркала проходит при отключённом внешнем DNS; несовпадение sha256 прерывает сборку R-6, R-7

Контракт снапшота мира — перечень полей

Не реализация, а то, что обязано присутствовать в ответе и в манифесте.

Поле Смысл Единицы / тип
world_snapshot_id Идентификатор неизменяемого состояния мира строка
bbox Границы мира градусы, WGS84
crs_working Рабочая метрическая проекция EPSG-код
vertical_datum Опорный датум высот сцены EPSG-код
terrain_layers[] Слои рельефа по приоритету список
terrain_layers[].source_id Идентификатор набора строка
terrain_layers[].release Версия/релиз набора строка
terrain_layers[].resolution_m Шаг сетки м
terrain_layers[].accuracy_le90_m Заявленная вертикальная точность м
terrain_layers[].sha256 Контрольная сумма файла hex
obstacle_layer.source_ids[] Источники препятствий список
obstacle_layer.default_heights Дефолтные высоты по типам объектов, помеченные assumed м
wind_source Источник ветра open-meteo / era5 / fixed
wind_profile_levels[] Узлы профиля ветра м над землёй / гПа
generated_at Время сборки снапшота ISO-8601 UTC
licenses[] Лицензии и строки атрибуции всех включённых наборов список

6. Допущения и открытые вопросы

ID Формулировка Как проверяем
ДОП-1 Google Photorealistic 3D Tiles не покрывают территорию РФ. Официальный список 49 стран Google не публикует полностью; вывод сделан по косвенным данным. Для решения это не критично — набор отсекается ещё двумя независимыми причинами (ToS и недоступность биллинга) Проверка по интерактивной карте покрытия Google (требует аккаунта)
ДОП-2 Числа «≤ 4 ГБ», «≤ 15 мин на 100 млн точек», «шаг 0,25–5,0 м» в SIM-GEO-03/04 — инженерная оценка, в источниках отсутствует Замер на реальном файле заказчика
ДОП-3 Дефолтные высоты объектов без height=*: опора ЛЭП, мачта, труба. В OSM и РЭ чисел нет Запрос к заказчику либо статистика по региону; до тех пор — height_source: assumed
ДОП-4 Диапазон аномалии высоты ξ по территории РФ — «десятки метров». Подтверждено только одно значение: 19,43 м в точке 40° с.ш., 46° в.д. по EGM2008 Расчёт по сетке EGM2008 для bbox РФ
ДОП-5 Доступность dataspace.copernicus.eu и бакетов AWS Open Data из контура заказчика Проверка в контуре до начала работ
ДОП-6 Правило «клиренс ≥ 100 м» взято из РЭ Геоскан 201. Для geoscan_801 и geoscan_gemini в выданных материалах минимального клиренса нет — применять к ним то же число нельзя Запрос к заказчику; в fleet.yaml поля altitude_agl_min у 801 и Gemini отсутствуют
ОВ-1 Действующая редакция перечня сведений, подлежащих засекречиванию, в части координат объектов точнее 30 м — непублична. Влияет на то, можно ли отдавать наружу 3D-модель конкретного объекта заказчика Вопрос режимной службе заказчика
ОВ-2 В РЭ Геоскан 201 сказано: «Рекомендуется использовать карту высот GEM (установлена по умолчанию)». Что такое GEM и какова его точность — в руководстве не раскрыто Вопрос производителю
ОВ-3 Есть ли у заказчика МСК-ключи на регион работ, и в какой форме он готов их передать Вопрос заказчику

7. Расхождения между источниками — зафиксировано, не замазано

# Расхождение Следствие для симулятора
1 ТЗ требует поддержки типов съёмки LiDAR и геофизика, но в payloads.yaml раздел gaps прямо фиксирует: таких нагрузок нет ни у одного из трёх бортов ТЗ Симулятор не имеет права «дорисовать» LiDAR. Виртуальный сенсор допустим только как явно помеченная assumed-нагрузка, и это должно быть видно в отчёте
2 ТЗ рекомендует стек Leaflet/OpenLayers — это 2D-библиотеки. Симулятор 3D из рекомендованного стека выходит Не нарушение: стек в ТЗ назван «рекомендуемым». Фиксируем осознанно, чтобы вопрос на защите не был неожиданным
3 fleet.yaml задаёт altitude_agl_min: 100 только для geoscan_201; у geoscan_801 и geoscan_gemini поля нет, а РЭ 201 формулирует правило 100 м как общее требование безопасности Порог клиренса берётся пер-борт из fleet.yaml; универсальный порог не вводится (ДОП-6)
4 Схема сценария планировщика описывает ветер скаляром (wind_speed_ms, wind_direction_deg), а все реальные источники дают профиль по высоте Симулятор принимает оба представления и возвращает числовую разницу между планом на скаляре и планом на профиле. Это самостоятельный результат для защиты
5 Copernicus GLO-30 — это ЦМП (DSM), а планировщик по смыслу считает превышение над землёй. Без снятия леса и застройки клиренс систематически занижается Компенсация через WorldCover + canopy height (SIM-GEO-13); FABDEM, который решал бы это напрямую, отсечён лицензией

Источники

Копернику и рельеф: Copernicus DEM — Data Space, Copernicus DEM Product Handbook (PDF), Copernicus DEM на AWS Open Data, OpenTopography — Copernicus DEM, OpenTopography: обновление COP30, OpenTopography: API-ключи и лимиты, OpenTopography for Developers, NASADEM — NASA Earthdata, ALOS AW3D30 v4.1 (JAXA, PDF), FABDEM V1-2 (data.bris), ArcticDEM — Polar Geospatial Center, PGC DEM Products.

Тайлы и 3D: Terrain Tiles — AWS Registry of Open Data, Mapbox Terrain-RGB v1, Mapbox ToS, MapTiler on-prem pricing, MapTiler Terrain 3D (quantized mesh), Cesium ion pricing, Cesium ion Self-Hosted, Cesium quantized-mesh spec, OGC: 3D Tiles v1.1 Community Standard, Google Photorealistic 3D Tiles overview, Map Tiles API — usage and billing, Map Tiles API — policies, Cesium — Google Maps Content Third Party Terms, Google/Microsoft/Amazon: прекращение облачных услуг для РФ с 20.03.2024.

Объекты и покров: Microsoft GlobalMLBuildingFootprints, OSM wiki — Key:power, ESA WorldCover 2021, ESA WorldCover Product Validation Report (PDF), ESA WorldCover на AWS, ETH Global Canopy Height (Nature Ecology & Evolution), Meta: Estimating Canopy Height at Scale.

Погода: Open-Meteo docs, Open-Meteo pricing и лицензии, Open-Meteo GitHub (AGPL-3.0, self-host), DWD ICON-EU — домен и сетка, ERA5 hourly on pressure levels (CDS), CDS API setup.

СК, высоты, форматы, право: EPSG:3855 — EGM2008 height, EPSG:7683 — ГСК-2011, EPSG:4284 — Пулково 1942, ПП РФ от 24.11.2016 № 1240, ФЗ от 30.12.2015 № 431-ФЗ, Росреестр: применение местных систем координат, GDAL — драйвер SXF, GDAL — драйвер RMF (MTW), НСПД (nspd.gov.ru) — обзор, Модель геоида EGM2008 для России.

Первоисточники проекта: files/Geoscan_201_Manual.pdf, files/Geoscan_801.pdf, files/Gemini_Specs_EN_RUS.pdf, hackathon/5. Геоскан.html, docs/task5/10-hardware/fleet.yaml, docs/task5/10-hardware/payloads.yaml, docs/task5/40-formats/03-our-mission-schema.md, docs/task5/70-plan/01-validator-first.md.


Составлено 15.09.2026. Ревизия лицензий и квот обязательна перед релизом — условия Mapbox, Cesium, Google и Open-Meteo меняются чаще, чем выходят релизы ЦМР.