feat(foundry): add OSM cache survey presets

This commit is contained in:
Codex
2026-07-16 16:03:32 +03:00
parent e96401358b
commit 751d9963f1
7 changed files with 656 additions and 31 deletions
+48 -2
View File
@@ -329,7 +329,24 @@ Adapter добавляет `nodedc_cache_refresh=1` в provider resource root. D
Это одноразовый refresh. Renderer пересоздаётся с `nodedc_cache_refresh=1`, помечает root provider resources текущего view, после первого render возвращается к сохранённой steady-state policy.
### 7.5 Gateway-level modes
### 7.5 OSM Buildings в persistent TileCache
Asset `96188` не является отдельным browser-only слоем. Root `tileset.json` создаётся как Cesium `Resource` с тем же Gateway proxy и cache intent, поэтому все его derived resources остаются на общем маршруте:
```text
96188 endpoint
→ root tileset.json
→ external/nested tileset JSON
→ b3dm/i3dm/pnts/cmpt или glTF/GLB dependencies
→ Platform Map Gateway
→ NAS live TileCache
```
Endpoint metadata хранится отдельно в private `ion-endpoints/96188.json`; сами building objects имеют обычные credential-free SHA-256 cache keys и лежат в `objects/`. Проверка live NAS store подтвердила `b3dm` objects, а не только root metadata. Warm building tile не требует AMD/VPN и отдаётся тем же локальным NAS path, что imagery и terrain.
Renderer обязан принять asset `96188` только с `type=3DTILES` и `credentialMode=gateway`. Direct URL, browser token или отдельный cache для Buildings запрещены.
### 7.6 Gateway-level modes
| `MAP_CACHE_MODE` | Hit | Miss | Запись |
| --- | --- | --- | --- |
@@ -339,7 +356,7 @@ Adapter добавляет `nodedc_cache_refresh=1` в provider resource root. D
Application UI не может изменить server-level `MAP_CACHE_MODE`.
### 7.6 Live vs offline profile
### 7.7 Live vs offline profile
`nodedc_cache_profile=live` выбирает mutable store. `offline` выбирает read-only snapshot и никогда не допускает pass-through.
@@ -427,6 +444,35 @@ DC AMD Proxy держит отдельный HTTP/1.1 keep-alive pool на ка
Только idempotent `GET`/`HEAD`, потерявший уже reused keep-alive socket, повторяется один раз. Fresh-socket failure не ретраится автоматически. При cross-origin redirect `Authorization` удаляется; master/API bearer не может уйти с `api.cesium.com` на assets/Bing origin.
### 9.6 Camera cache survey presets
У imagery, terrain и OSM Buildings нет одного общего integer zoom. Текущий runtime profile измерен так:
- World Terrain публикует availability до L19;
- Bing metadata допускает internal imagery L0…L20, но фактический выбор связан с terrain geometry;
- текущая иерархия OSM Buildings содержит 16 geometric-error bands от `77067.33978` до `2.351909` м.
Поэтому UI не обещает ложное соответствие `высота = provider zoom`. Он даёт десять рабочих региональных профилей высоты и покрытия:
| Профиль | AGL | Шаг витка | Потолок скорости | Радиус | No-wait ETA |
| --- | ---: | ---: | ---: | ---: | ---: |
| 1 | 80 м | 64 м | 256 м/с | 25 км | 33,3 ч |
| 2 | 160 м | 128 м | 512 м/с | 25 км | 8,3 ч |
| 3 | 320 м | 256 м | 1,024 км/с | 25 км | 2,1 ч |
| 4 | 640 м | 512 м | 2,048 км/с | 25 км | 31 мин |
| 5 | 1,28 км | 1,024 км | 4,096 км/с | 25 км | 7,8 мин |
| 6 | 2,56 км | 2,048 км | 5 км/с | 25 км | 3,2 мин |
| 7 | 5,12 км | 4,096 км | 5 км/с | 25 км | 1,6 мин |
| 8 | 10,24 км | 8,192 км | 5 км/с | 25 км | 48 с |
| 9 | 20,48 км | 16,384 км | 5 км/с | 25 км | 25 с |
| 10 | 40,96 км | 32,768 км | 5 км/с | 25 км | 13 с |
При горизонтальном FOV около 60° и почти nadir camera шаг `0.8 × height` даёт примерно 31% поперечного перекрытия. Перед стартом renderer считает реальный horizontal FOV из текущего frustum/aspect и при необходимости уменьшает шаг до `0.69 × visible cross-track width`; узкий viewport поэтому не создаёт gaps. Скорость — только верхний предел: при незавершённых tile requests route clock стоит. `No-wait ETA` показывает нижнюю границу без сети и без viewport clamp. Профиль не форсирует конкретный OSM LOD: реальный выбор остаётся за Cesium SSE traversal и зависит от viewport, pixel ratio, tile bounds и availability. При движении к detailed child Cesium обычно проходит ancestor resources, но полнота их durable cache проверяется только post-run audit.
Включение режима survey временно подготавливает `Imagery + Terrain + OSM Buildings`, выключает monochrome, ставит canonical Buildings SSE `16` и append-only TileCache. Только эти survey-owned overrides не сохраняются в page layout и восстанавливаются после выключения режима; остальные правки Inspector не теряются. Start заблокирован, пока все три provider root не готовы и свежий Gateway health не подтвердил `persistent=true`, `mode=readwrite`, `writePolicy=append-only-no-eviction`, `atCapacity=false`. На время движения renderer отключает Cesium culling/foveated deferral для Buildings, фиксирует camera почти в nadir и не продвигает маршрут, пока `globe.tilesLoaded` и `buildings.tilesLoaded` не завершат текущие requests. Terrain prefetch обрезается по точной arc-length выбранного радиуса. Любой provider/tile failure latch'ит provider как failed и останавливает проход; повторная попытка требует bounded renderer recreate. Непрерывное ожидание tiles ограничено 45 секундами активной вкладки, background time не учитывается. Это browser readiness, не доказательство NAS commit. После Stop исходные интерактивные request policies восстанавливаются.
Preset является conservative cache traversal, а не юридической гарантией полноты provider dataset: availability и provider revision могут измениться. Выбранный радиус завершает проход детерминированно, но для доказуемого покрытия конкретного полигона дополнительно нужен coverage ledger и post-run audit cache keys.
## 10. Timeouts, aborts and recovery
### 10.1 Foundry BFF