98 lines
4.3 KiB
Markdown
98 lines
4.3 KiB
Markdown
# Shared Cesium React adapter
|
|
|
|
`@nodedc/map-cesium-react 0.1.0` is the shared renderer boundary for the
|
|
canonical `Map Page 0.1.0` and CesiumJS `1.143.0`.
|
|
|
|
It is not a Foundry application component and does not own product navigation,
|
|
Inspector fields, tokens, provider allowlists, TileCache storage or admin
|
|
settings. A product supplies a same-origin BFF runtime contract and persisted
|
|
provider-neutral view state.
|
|
|
|
## Canonical presentation contract
|
|
|
|
The adapter accepts the complete provider-neutral Map Page presentation state
|
|
used by the Foundry `DC Default` profile: imagery color correction, globe and
|
|
background colors, atmosphere, fog, sun, shadows, terrain exaggeration,
|
|
building style/detail and the elevated grid with camera-height LOD. Consumers
|
|
must persist and pass those values explicitly; the adapter does not invent a
|
|
second product-specific visual profile.
|
|
|
|
The canonical black-and-white scene keeps imagery enabled and sets imagery
|
|
saturation to zero. `monochrome_enabled` is a separate solid-globe mode and
|
|
must not be used as a substitute for the `DC Default` treatment.
|
|
|
|
## Security and runtime contract
|
|
|
|
- The browser receives only same-origin BFF paths.
|
|
- Runtime config must use `missioncore.map-runtime/v1`, Map Page `0.1.0` and
|
|
Cesium `1.143.0`.
|
|
- Canonical assets are fixed to imagery `2`, terrain `1` and buildings
|
|
`96188`.
|
|
- Provider endpoint documents must declare `credentialMode=gateway`.
|
|
- Every provider resource uses the BFF cache proxy through Cesium
|
|
`DefaultProxy`.
|
|
- Direct provider credentials, Gateway origins and arbitrary proxy paths are
|
|
rejected.
|
|
- Imagery, terrain and buildings start independently. One failed provider
|
|
yields a degraded scene when another provider remains ready.
|
|
- Render-loop recovery is bounded to one request; a repeated fault becomes
|
|
`cesium_render_error`.
|
|
- Provider attribution is always registered with Cesium. An internal sandbox
|
|
may route the visual credit overlay into a hidden dedicated container only
|
|
through the explicit optional runtime flag
|
|
`sandbox.hide_credit_overlay=true`. The flag is absent or false by default
|
|
and must remain false for every external or production release.
|
|
|
|
## Asset delivery
|
|
|
|
The package keeps Cesium in a dynamic import so the application receives it as
|
|
a lazy chunk only when the map renderer mounts. Consumers import
|
|
`@nodedc/map-cesium-react/widgets.css` and copy the four runtime directories
|
|
from `cesium/Build/Cesium` into the deployed `CESIUM_BASE_URL`:
|
|
|
|
- `Assets`;
|
|
- `ThirdParty`;
|
|
- `Widgets`;
|
|
- `Workers`.
|
|
|
|
The build/runtime integration must not copy Cesium credentials or NODE.DC
|
|
TileCache data. Those remain outside application artifacts.
|
|
|
|
## Cache intent
|
|
|
|
`cacheIntent.enabled=false` adds `nodedc_cache_mode=passthrough` while
|
|
preserving the Gateway security boundary. Enabled mode selects the shared
|
|
`live` profile. `no_overwrite=false` or a separate explicit cache-refresh
|
|
request adds `nodedc_cache_refresh=1`. Changing `rendererGeneration` only
|
|
recreates the local Cesium viewer and never changes the TileCache write intent.
|
|
|
|
The package never creates browser, application, Docker or per-user TileCache
|
|
storage.
|
|
|
|
## Optional synthetic target layer
|
|
|
|
The adapter accepts an optional provider-neutral Ghost Pin layer for bounded
|
|
product sandboxes. It uses the canonical `elevated-spike` presentation:
|
|
terrain-relative stem, outlined head, label plate and independent camera-height
|
|
visibility for target and label. The layer is controlled by the existing
|
|
`targets` visibility flag and does not create a Data Product, Engine command or
|
|
authoritative `map.moving_object`.
|
|
|
|
Consumers own generation, persistence and explicit removal of synthetic
|
|
positions. The adapter only:
|
|
|
|
- resolves the centre of the current visible globe through its imperative
|
|
`getViewAnchor()` handle;
|
|
- renders declared numeric positions;
|
|
- advances optional motion inside the declared radius; and
|
|
- returns the current positions through `snapshotGhostPins()` for an explicit
|
|
product save.
|
|
|
|
The elevated head and stem use non-constant Cesium properties so their ground
|
|
height is resolved again after asynchronous terrain tiles arrive. The stem
|
|
also keeps the same material as its depth-fail fallback; an early ellipsoid
|
|
height must not leave a visible head with its stem hidden below terrain.
|
|
|
|
Motion never recreates the Cesium viewer or any provider. A renderer teardown
|
|
stops its single animation frame loop.
|