Источники рельефа и модели местности для симулятора БВС¶
Документ требований, не проектного решения. Отвечает на один вопрос: откуда сервис-симулятор берёт рельеф, поверхность, препятствия и ветер, чтобы возвращать планировщику числа, которые планировщик не может посчитать сам.
Терминология — 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. Правила, которые из этого следуют¶
- Каждый растровый и векторный слой хранит
crsиvertical_datumявно; слой без этих полей не принимается. - Сценарий имеет один опорный датум высот; все слои приводятся к нему при импорте, а не при отрисовке.
- Любая точка обмена с планировщиком несёт
altitude_frame∈{AGL, AMSL, ELLIPSOIDAL}— поле уже есть в схеме плана (sorties[].altitude_frame), симулятор делает его обязательным. - Все конверсии высот выполняются только через PROJ с явной моделью геоида; конверсия без модели (константой) запрещена и логируется как ошибка.
- МСК: параметры перехода не публичны и запрашиваются в Росреестре (порядок предоставления сведений из фонда — ПП РФ от 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-файлы парка; schema — 40-formats/03-our-mission-schema.md;
validator — 70-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 меняются чаще, чем выходят релизы ЦМР.