@ngis/plugin-sdk 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +13 -0
- package/README.md +31 -0
- package/dist/index.cjs +76 -0
- package/dist/index.d.ts +77 -0
- package/dist/index.mjs +102 -0
- package/dist/src/api/analysis.d.ts +140 -0
- package/dist/src/api/resources.d.ts +530 -0
- package/dist/src/api/scenes.d.ts +251 -0
- package/dist/src/api/users.d.ts +22 -0
- package/dist/src/domain/algorithms/deck-layer-style.d.ts +34 -0
- package/dist/src/domain/algorithms/maplibre-style.d.ts +63 -0
- package/dist/src/domain/algorithms/raster-color-ramps.d.ts +37 -0
- package/dist/src/domain/algorithms/scene-layer-type.d.ts +25 -0
- package/dist/src/domain/algorithms/symbol-compile.d.ts +100 -0
- package/dist/src/domain/algorithms/symbol-params.d.ts +90 -0
- package/dist/src/domain/map/bounds.d.ts +8 -0
- package/dist/src/domain/map/constants.d.ts +40 -0
- package/dist/src/domain/map/layer-builders.d.ts +32 -0
- package/dist/src/domain/map/rendered-layers.d.ts +30 -0
- package/dist/src/domain/map/style-ready.d.ts +24 -0
- package/dist/src/domain/map/tile-url.d.ts +20 -0
- package/dist/src/domain/map/types.d.ts +128 -0
- package/dist/src/domain/models/deck-layer-style.d.ts +211 -0
- package/dist/src/domain/models/scene-layer-type.d.ts +23 -0
- package/dist/src/domain/models/symbol.d.ts +424 -0
- package/dist/src/lib/api.d.ts +82 -0
- package/dist/src/lib/auth-session.d.ts +22 -0
- package/dist/src/lib/raster-color-layer/RasterColorLayer.d.ts +48 -0
- package/dist/src/lib/raster-color-layer/TileGrid.d.ts +31 -0
- package/dist/src/lib/raster-color-layer/colorRamp.d.ts +18 -0
- package/dist/src/lib/raster-color-layer/shaders/raster-color.frag.d.ts +2 -0
- package/dist/src/lib/raster-color-layer/shaders/raster-color.vert.d.ts +2 -0
- package/dist/src/lib/raster-color-layer/zoomInterpolate.d.ts +2 -0
- package/dist/src/sdk/commands.d.ts +113 -0
- package/dist/src/sdk/context/keys.d.ts +148 -0
- package/dist/src/sdk/context/publishers.d.ts +198 -0
- package/dist/src/sdk/context/store.d.ts +78 -0
- package/dist/src/sdk/context/when.d.ts +69 -0
- package/dist/src/sdk/contributions/dispatch.d.ts +78 -0
- package/dist/src/sdk/contributions/panel-id.d.ts +25 -0
- package/dist/src/sdk/contributions/registry.d.ts +199 -0
- package/dist/src/sdk/contributions/symbol-renderers.d.ts +107 -0
- package/dist/src/sdk/contributions/types.d.ts +288 -0
- package/dist/src/sdk/contributions/views-bridge.d.ts +92 -0
- package/dist/src/sdk/define-plugin.d.ts +17 -0
- package/dist/src/sdk/facets/storage.d.ts +152 -0
- package/dist/src/sdk/facets/types.d.ts +370 -0
- package/dist/src/sdk/host-api.d.ts +256 -0
- package/dist/src/sdk/map-api.d.ts +288 -0
- package/dist/src/sdk/panels.d.ts +130 -0
- package/dist/src/sdk/plugin.d.ts +145 -0
- package/dist/src/sdk/rail-tools.d.ts +58 -0
- package/dist/src/sdk/scopes.d.ts +158 -0
- package/dist/src/systems/renderer/DeckSceneRenderer.d.ts +26 -0
- package/dist/src/systems/renderer/FlowFieldLayer.d.ts +68 -0
- package/dist/src/systems/renderer/LayerRendererRegistry.d.ts +132 -0
- package/dist/src/systems/renderer/authenticated-deck-load.d.ts +4 -0
- package/dist/src/systems/renderer/deck/deck-layer-builders.d.ts +29 -0
- package/dist/src/systems/renderer/deck/deck-layer-helpers.d.ts +21 -0
- package/dist/src/systems/renderer/deck/mvt-point-aggregation-layer.d.ts +107 -0
- package/dist/src/systems/renderer/flow-field/flow-field-resources.d.ts +84 -0
- package/dist/src/systems/renderer/flow-field/flow-field-shaders.d.ts +4 -0
- package/dist/src/systems/renderer/symbol/SpriteRegistry.d.ts +34 -0
- package/dist/src/systems/renderer/symbol/entries.d.ts +67 -0
- package/dist/src/types/analysis.d.ts +205 -0
- package/dist/src/types/common.d.ts +17 -0
- package/dist/src/types/extensions.d.ts +560 -0
- package/dist/src/types/gis.d.ts +242 -0
- package/dist/src/types/market-social.d.ts +378 -0
- package/package.json +47 -0
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared, cross-module constants for the map domain layer. Extracted
|
|
3
|
+
* mechanically from `SceneMapCanvas.tsx` (session C1) — values only, no
|
|
4
|
+
* behavior change.
|
|
5
|
+
*/
|
|
6
|
+
/** MVT source-layer name every scene tile source/layer is built against. */
|
|
7
|
+
export declare const SCENE_TILE_SOURCE_LAYER = "layer";
|
|
8
|
+
/** Transparent MapLibre layer used as the insertion boundary above raster basemaps. */
|
|
9
|
+
export declare const BASEMAP_SCENE_ANCHOR_LAYER_ID = "ngis-basemap:scene-anchor";
|
|
10
|
+
/** Id prefix for the draw-query hit-test highlight overlay layers. */
|
|
11
|
+
export declare const HIGHLIGHT_LAYER_PREFIX = "scene-query-highlight-layer";
|
|
12
|
+
/** Id prefix for the transient attribute-table highlight overlay. */
|
|
13
|
+
export declare const ATTRIBUTE_HIGHLIGHT_LAYER_PREFIX = "scene-attribute-highlight-layer";
|
|
14
|
+
/**
|
|
15
|
+
* Layer-stacking contract (see `docs/componentization_stage/README.md`
|
|
16
|
+
* "interlock map" #6): scene-layer insertion position prefers the first
|
|
17
|
+
* existing style layer whose id starts with one of these prefixes, then falls
|
|
18
|
+
* back to `BASEMAP_SCENE_ANCHOR_LAYER_ID` for symbol-free raster basemaps
|
|
19
|
+
* (`getSceneLayerBeforeId` / `moveSceneLayerToRenderSlot` in
|
|
20
|
+
* `rendered-layers.ts`). Scene layers therefore render above every basemap
|
|
21
|
+
* layer and underneath draw, measure, and highlight overlays.
|
|
22
|
+
*
|
|
23
|
+
* This was previously an implicit convention (each subsystem picked its own
|
|
24
|
+
* `prefixId`/layer-id scheme and this list had to be kept in sync by hand).
|
|
25
|
+
* It is now an explicit, exported, commented contract. Future owners of each
|
|
26
|
+
* prefix (componentization stage, sessions C3–C5):
|
|
27
|
+
*
|
|
28
|
+
* - `HIGHLIGHT_LAYER_PREFIX` ("scene-query-highlight-layer") — draw-query hit
|
|
29
|
+
* highlight overlay, owned by **HighlightController** (session C5).
|
|
30
|
+
* - `ATTRIBUTE_HIGHLIGHT_LAYER_PREFIX` (`"scene-attribute-highlight-layer"`)
|
|
31
|
+
* — transient attribute-table highlight, owned by `HighlightController`.
|
|
32
|
+
* - `"scene-draw"` — Terra Draw's draw-control adapter `prefixId`
|
|
33
|
+
* (`addSceneDrawControl`), owned by **DrawController** (session C4).
|
|
34
|
+
* - `"scene-measure"` — Terra Draw's measure-control adapter `prefixId`
|
|
35
|
+
* (`addSceneMeasureControl`), owned by **MeasureController** (session C4).
|
|
36
|
+
*
|
|
37
|
+
* `SceneLayersController` (session C3) is the consumer that must keep scene
|
|
38
|
+
* layers stacked beneath all three overlay families using this list.
|
|
39
|
+
*/
|
|
40
|
+
export declare const SCENE_OVERLAY_LAYER_PREFIXES: readonly ["scene-query-highlight-layer", "scene-attribute-highlight-layer", "scene-draw", "scene-measure"];
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MapLibre layer/source builders + custom raster-color layer glue. Extracted
|
|
3
|
+
* mechanically from `SceneMapCanvas.tsx` (session C1) — no behavior change,
|
|
4
|
+
* except `buildCustomRasterColorLayer` which now takes its tile
|
|
5
|
+
* `getRequestInit` factory as a parameter (dependency injection) instead of
|
|
6
|
+
* calling the auth-wrapped `getSceneTileRequestInit` directly — see
|
|
7
|
+
* `src/lib/map-tile-auth.ts` for why (`domain/` must not import auth).
|
|
8
|
+
*/
|
|
9
|
+
import type { LayerSpecification, SourceSpecification } from "maplibre-gl";
|
|
10
|
+
import type { NgisSceneLayer, SceneResourceDto } from "../../api/scenes";
|
|
11
|
+
import { RasterColorLayer } from "../../lib/raster-color-layer/RasterColorLayer";
|
|
12
|
+
import type { ColorStop, RasterColorMode } from "../../lib/raster-color-layer/colorRamp";
|
|
13
|
+
import type { TileRequestInitFactory } from "../../lib/raster-color-layer/TileGrid";
|
|
14
|
+
import type { SceneLayerStyle } from "./types";
|
|
15
|
+
export declare function parseSceneLayerStyle(styleJson?: string | null): SceneLayerStyle;
|
|
16
|
+
export declare function getLayerRenderMode(kind: "vector" | "raster", style: SceneLayerStyle): "maplibre" | "custom-raster-color";
|
|
17
|
+
export declare function getLayerKind(layer: NgisSceneLayer): "raster" | "vector";
|
|
18
|
+
export declare function getSourceForLayer(kind: "vector" | "raster", resource: SceneResourceDto, style?: SceneLayerStyle): SourceSpecification;
|
|
19
|
+
export declare function buildMapLayer(sceneLayer: NgisSceneLayer, resource: SceneResourceDto, sourceId: string, layerId: string): LayerSpecification;
|
|
20
|
+
export declare function getSceneMapLayerId(sceneLayerId: string): string;
|
|
21
|
+
export declare function getSceneSourceId(sceneLayerId: string): string;
|
|
22
|
+
export declare function getLayerSourceKey(layer: NgisSceneLayer, resource: SceneResourceDto, style: SceneLayerStyle): string;
|
|
23
|
+
export declare function getStyleRecord(value: unknown): import("../algorithms/maplibre-style").MapLibreStyleRecord;
|
|
24
|
+
export declare function getVisibleZoomRange(style: SceneLayerStyle): [number, number];
|
|
25
|
+
export declare function getRasterOpacity(style: SceneLayerStyle): number;
|
|
26
|
+
export declare function getRasterColorStyle(style: SceneLayerStyle): {
|
|
27
|
+
ramp: ColorStop[];
|
|
28
|
+
colorMode: RasterColorMode;
|
|
29
|
+
classBreaks?: number[];
|
|
30
|
+
valueRange: [number, number];
|
|
31
|
+
};
|
|
32
|
+
export declare function buildCustomRasterColorLayer(layerId: string, resource: SceneResourceDto, style: SceneLayerStyle, getRequestInit: TileRequestInitFactory): RasterColorLayer;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Rendered scene-layer lifecycle: add/remove/paint-diff-update and
|
|
3
|
+
* layer-stacking slot placement. Extracted mechanically from
|
|
4
|
+
* `SceneMapCanvas.tsx` (session C1) — no behavior change to the functions
|
|
5
|
+
* below.
|
|
6
|
+
*
|
|
7
|
+
* Session C3 note: this module used to also export a `syncSceneLayers`
|
|
8
|
+
* whole-scene reconciler (C1's mechanical extraction of the shell's inline
|
|
9
|
+
* function of the same name). C1's own doc flagged it as provisional —
|
|
10
|
+
* "C3's `SceneLayersController` still supersedes it" — and C3 does exactly
|
|
11
|
+
* that: `src/systems/renderer/LayerRendererRegistry.ts#reconcileSceneLayers`
|
|
12
|
+
* is its registry-driven replacement (same control flow, ported
|
|
13
|
+
* deliberately), consumed by `src/components/scenes/map/
|
|
14
|
+
* SceneLayersController.tsx`. `syncSceneLayers` was removed here (along with
|
|
15
|
+
* the imports it alone used) rather than left in place, because it depended
|
|
16
|
+
* on `DeckSceneRenderer.sync`'s old `DeckSceneLayerInput[]`-based signature,
|
|
17
|
+
* which C3 also changed (`DeckSceneRenderer` now takes built deck.gl
|
|
18
|
+
* `Layer[]` directly — see that file's doc comment) — keeping both call
|
|
19
|
+
* shapes alive at once would have meant two parallel, divergence-prone ways
|
|
20
|
+
* to build a deck.gl layer. The functions below (still consumed by other
|
|
21
|
+
* scene controllers, e.g. C6's `<MapLayer>` primitive) are untouched.
|
|
22
|
+
*/
|
|
23
|
+
import type { LayerSpecification, Map as MapLibreMap } from "maplibre-gl";
|
|
24
|
+
import type { RenderedSceneLayer, SceneLayerStyle } from "./types";
|
|
25
|
+
export declare function removeRenderedSceneLayer(map: MapLibreMap, rendered: RenderedSceneLayer): void;
|
|
26
|
+
export declare function removeRenderedSceneLayers(map: MapLibreMap, renderedLayers: RenderedSceneLayer[]): void;
|
|
27
|
+
export declare function applyCustomRasterColorLayerStyleUpdate(map: MapLibreMap, rendered: RenderedSceneLayer, style: SceneLayerStyle): boolean;
|
|
28
|
+
export declare function applySceneLayerStyleUpdate(map: MapLibreMap, rendered: RenderedSceneLayer, mapLayer: LayerSpecification): boolean;
|
|
29
|
+
export declare function getSceneLayerBeforeId(map: MapLibreMap): string | undefined;
|
|
30
|
+
export declare function moveSceneLayerToRenderSlot(map: MapLibreMap, layerId: string): void;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MapLibre style-readiness helpers. Extracted mechanically from
|
|
3
|
+
* `SceneMapCanvas.tsx` (session C1) — no behavior change.
|
|
4
|
+
*
|
|
5
|
+
* `waitForMapStyleReady` deliberately uses the stronger `isStyleLoaded()`
|
|
6
|
+
* gate polled via `style.load` + `styledata` + `idle` (not a weaker
|
|
7
|
+
* `load`+`styledata` AND) — see README L1 section, "Readiness semantics".
|
|
8
|
+
*/
|
|
9
|
+
import type { Map as MapLibreMap } from "maplibre-gl";
|
|
10
|
+
export declare function getMapStyleLayers(map: MapLibreMap): import("maplibre-gl").LayerSpecification[];
|
|
11
|
+
export declare function isMapStyleReady(map: MapLibreMap): boolean | void;
|
|
12
|
+
export declare function waitForMapStyleReady(map: MapLibreMap, onReady: () => void): () => void;
|
|
13
|
+
/**
|
|
14
|
+
* Wait for a style transition that starts after this function is called.
|
|
15
|
+
*
|
|
16
|
+
* Unlike `waitForMapStyleReady`, this never treats the currently loaded style
|
|
17
|
+
* as the requested style. `map.setStyle(url)` uses an asynchronous diff by
|
|
18
|
+
* default, so the old style can keep reporting `isStyleLoaded() === true`
|
|
19
|
+
* until the new style JSON arrives. Callers must register this waiter before
|
|
20
|
+
* `setStyle()`; the callback only becomes eligible after the next
|
|
21
|
+
* `style.load` event and the resulting style is fully ready.
|
|
22
|
+
*/
|
|
23
|
+
export declare function waitForNextMapStyleReady(map: MapLibreMap, onReady: () => void): () => void;
|
|
24
|
+
export declare function getFirstSymbolLayerId(map: MapLibreMap): string | undefined;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure tile URL/target/params builders + tile-error classification. Extracted
|
|
3
|
+
* mechanically from `SceneMapCanvas.tsx` (session C1) — no behavior change.
|
|
4
|
+
*
|
|
5
|
+
* Purity constraint (README L0): the original `getSceneTileRequestInit`
|
|
6
|
+
* called `getAccessToken()` — auth may not enter `domain/`. That authorized
|
|
7
|
+
* `RequestInit` wrapper now lives in `src/lib/map-tile-auth.ts`; only the pure
|
|
8
|
+
* URL/params builders remain here.
|
|
9
|
+
*/
|
|
10
|
+
import type { ErrorEvent } from "maplibre-gl";
|
|
11
|
+
import type { SceneResourceDto } from "../../api/scenes";
|
|
12
|
+
import type { SceneLayerStyle, SceneTileTarget } from "./types";
|
|
13
|
+
export declare function getTileParams(style: SceneLayerStyle, options?: {
|
|
14
|
+
encoding?: string;
|
|
15
|
+
}): string | null;
|
|
16
|
+
export declare function getSceneTileTarget(resource: SceneResourceDto): SceneTileTarget;
|
|
17
|
+
export declare function getSceneTileUrl(kind: "vector" | "raster", resource: SceneResourceDto, style?: SceneLayerStyle, options?: {
|
|
18
|
+
encoding?: string;
|
|
19
|
+
}): string;
|
|
20
|
+
export declare function isSceneTileError(event: ErrorEvent): boolean;
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure data types for the map domain layer. Extracted mechanically from
|
|
3
|
+
* `SceneMapCanvas.tsx` (session C1) — no behavior change. Types re-exported
|
|
4
|
+
* from `SceneMapCanvas.tsx` are part of the frozen compat contract (see
|
|
5
|
+
* `docs/componentization_stage/README.md`); consumer import paths must not
|
|
6
|
+
* change.
|
|
7
|
+
*/
|
|
8
|
+
import type { LayerSpecification } from "maplibre-gl";
|
|
9
|
+
import type { RasterColorLayer } from "../../lib/raster-color-layer/RasterColorLayer";
|
|
10
|
+
import type { GisMeasureKind } from "../../types/gis";
|
|
11
|
+
/** Measurement flavour, re-exported so rail consumers import it from one place. */
|
|
12
|
+
export type SceneMeasureKind = GisMeasureKind;
|
|
13
|
+
/** Map camera state — used to restore (`initialView`) and persist (`onViewChange`). */
|
|
14
|
+
export interface SceneMapView {
|
|
15
|
+
center: [number, number];
|
|
16
|
+
zoom: number;
|
|
17
|
+
pitch?: number;
|
|
18
|
+
bearing?: number;
|
|
19
|
+
}
|
|
20
|
+
export type SceneMapCoordinate = number | SceneMapCoordinate[] | number[];
|
|
21
|
+
export interface SceneMapGeometry {
|
|
22
|
+
type: string;
|
|
23
|
+
coordinates?: SceneMapCoordinate;
|
|
24
|
+
geometries?: SceneMapGeometry[];
|
|
25
|
+
}
|
|
26
|
+
export type SceneMapFeatureProperties = Record<string, unknown>;
|
|
27
|
+
export interface SceneMapFeature {
|
|
28
|
+
type: "Feature";
|
|
29
|
+
id?: string | number;
|
|
30
|
+
geometry: SceneMapGeometry;
|
|
31
|
+
properties: SceneMapFeatureProperties;
|
|
32
|
+
}
|
|
33
|
+
export interface SceneMapFeatureCollection {
|
|
34
|
+
type: "FeatureCollection";
|
|
35
|
+
features: SceneMapFeature[];
|
|
36
|
+
}
|
|
37
|
+
export type SceneMapDrawFeatureCollection = SceneMapFeatureCollection;
|
|
38
|
+
export interface SceneMapQueryableLayer {
|
|
39
|
+
sceneLayerId: string;
|
|
40
|
+
mapLayerId: string;
|
|
41
|
+
sourceId: string;
|
|
42
|
+
resourceId: string;
|
|
43
|
+
effectiveFileId: string;
|
|
44
|
+
layerName: string;
|
|
45
|
+
layerType: "fill" | "line" | "circle";
|
|
46
|
+
}
|
|
47
|
+
export interface SceneMapQueriedFeature {
|
|
48
|
+
id?: string | number;
|
|
49
|
+
sceneLayerId: string;
|
|
50
|
+
resourceId: string;
|
|
51
|
+
effectiveFileId: string;
|
|
52
|
+
layerName: string;
|
|
53
|
+
properties: SceneMapFeatureProperties;
|
|
54
|
+
geometry: SceneMapGeometry;
|
|
55
|
+
}
|
|
56
|
+
export interface SceneMapDrawQueryResult {
|
|
57
|
+
drawFeatures: SceneMapDrawFeatureCollection;
|
|
58
|
+
features: SceneMapQueriedFeature[];
|
|
59
|
+
featureCollection: SceneMapFeatureCollection;
|
|
60
|
+
}
|
|
61
|
+
/** A rendered raster layer at an identify click. Numeric samples require a
|
|
62
|
+
* dedicated raster-sampling service; MapLibre image tiles carry no raw cells. */
|
|
63
|
+
export interface SceneMapIdentifyRasterLayer {
|
|
64
|
+
sceneLayerId: string;
|
|
65
|
+
resourceId: string;
|
|
66
|
+
effectiveFileId: string;
|
|
67
|
+
layerName: string;
|
|
68
|
+
}
|
|
69
|
+
/** Result of a one-point map identify operation. */
|
|
70
|
+
export interface SceneMapIdentifyResult {
|
|
71
|
+
coordinate: [number, number];
|
|
72
|
+
features: SceneMapQueriedFeature[];
|
|
73
|
+
rasterLayers: SceneMapIdentifyRasterLayer[];
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Live state of the (Terra Draw–backed) measurement overlay. Emitted on every
|
|
77
|
+
* change so the rail's contextual strip can show a running total; the on-map
|
|
78
|
+
* labels with units are rendered by `MaplibreMeasureControl` itself. `features`
|
|
79
|
+
* are the raw measure geometries (guidance vertices filtered out) — the caller
|
|
80
|
+
* derives length/area from them, keeping the geodesic math in one place.
|
|
81
|
+
*/
|
|
82
|
+
export interface SceneMeasureState {
|
|
83
|
+
kind: SceneMeasureKind;
|
|
84
|
+
features: SceneMapFeatureCollection;
|
|
85
|
+
finished: boolean;
|
|
86
|
+
}
|
|
87
|
+
export interface SceneMapHighlightFeature {
|
|
88
|
+
layer: SceneMapQueryableLayer;
|
|
89
|
+
properties: SceneMapFeatureProperties;
|
|
90
|
+
}
|
|
91
|
+
export type HighlightFilterExpression = unknown[];
|
|
92
|
+
/** Attribute-table highlight for one scene layer. */
|
|
93
|
+
export interface SceneLayerHighlight {
|
|
94
|
+
/** Scene layer id whose rendered source should be highlighted. */
|
|
95
|
+
layerId: string;
|
|
96
|
+
/** Row ids (== tile `uuid`) to mark as selected. */
|
|
97
|
+
featureIds: string[];
|
|
98
|
+
/** Highlight every feature in the layer, apart from explicit exclusions. */
|
|
99
|
+
allFeatures?: boolean;
|
|
100
|
+
/** Only meaningful with `allFeatures`; rows unchecked after select-all. */
|
|
101
|
+
excludedFeatureIds?: string[];
|
|
102
|
+
}
|
|
103
|
+
export type SceneLayerStyle = Record<string, unknown>;
|
|
104
|
+
export type SceneLayerRenderMode = "maplibre" | "custom-raster-color" | "custom-flow-field";
|
|
105
|
+
export type RenderedSceneLayer = {
|
|
106
|
+
sceneLayerId: string;
|
|
107
|
+
layerId: string;
|
|
108
|
+
sourceId: string;
|
|
109
|
+
sourceKey: string;
|
|
110
|
+
renderMode: SceneLayerRenderMode;
|
|
111
|
+
layerType: LayerSpecification["type"] | "custom";
|
|
112
|
+
paintKeys: string[];
|
|
113
|
+
layoutKeys: string[];
|
|
114
|
+
customLayer?: RasterColorLayer;
|
|
115
|
+
customInstance?: {
|
|
116
|
+
update?(input: SceneLayerStyle): boolean;
|
|
117
|
+
setVisible?(visible: boolean): void;
|
|
118
|
+
destroy?(): void;
|
|
119
|
+
};
|
|
120
|
+
};
|
|
121
|
+
export type ResourceBounds = [number, number, number, number];
|
|
122
|
+
export type SceneTileTarget = {
|
|
123
|
+
mode: "live" | "snapshot";
|
|
124
|
+
id: string;
|
|
125
|
+
};
|
|
126
|
+
export type QueryableRenderedSceneLayer = RenderedSceneLayer & {
|
|
127
|
+
layerType: "fill" | "line" | "circle";
|
|
128
|
+
};
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
import type { SceneLayerGeometryFamily, SceneLayerTypeId } from "./scene-layer-type";
|
|
2
|
+
export type DeckLayerStyleKind = DeckLayerStyle["type"];
|
|
3
|
+
export type DeckSceneLayerTypeId = Extract<SceneLayerTypeId, `DECK_${string}`>;
|
|
4
|
+
export type DeckEditorSectionKind = "layer" | "elevation" | "color" | "outline" | "material" | "width" | "weight" | "heatmap" | "hexagon" | "geometry";
|
|
5
|
+
export interface DeckLayerCapabilityDefinition {
|
|
6
|
+
sceneLayerType: DeckSceneLayerTypeId;
|
|
7
|
+
styleType: DeckLayerStyleKind;
|
|
8
|
+
geometryFamily: Exclude<SceneLayerGeometryFamily, "raster">;
|
|
9
|
+
aggregation: boolean;
|
|
10
|
+
requiresNumericField: boolean;
|
|
11
|
+
defaultColorRampId: "ylorrd" | "blues";
|
|
12
|
+
editorSections: readonly DeckEditorSectionKind[];
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Framework-free source of truth for the Deck protocols implemented by NGIS.
|
|
16
|
+
* Renderer and editor registries derive their keys/order from this catalog.
|
|
17
|
+
*/
|
|
18
|
+
export declare const DECK_LAYER_CAPABILITY_DEFINITIONS: readonly [{
|
|
19
|
+
readonly sceneLayerType: "DECK_MVT_EXTRUDED_POLYGON";
|
|
20
|
+
readonly styleType: "deck-mvt-extruded-polygon";
|
|
21
|
+
readonly geometryFamily: "polygon";
|
|
22
|
+
readonly aggregation: false;
|
|
23
|
+
readonly requiresNumericField: true;
|
|
24
|
+
readonly defaultColorRampId: "ylorrd";
|
|
25
|
+
readonly editorSections: readonly ["layer", "elevation", "color", "outline", "material"];
|
|
26
|
+
}, {
|
|
27
|
+
readonly sceneLayerType: "DECK_COLUMN";
|
|
28
|
+
readonly styleType: "deck-column";
|
|
29
|
+
readonly geometryFamily: "point";
|
|
30
|
+
readonly aggregation: false;
|
|
31
|
+
readonly requiresNumericField: true;
|
|
32
|
+
readonly defaultColorRampId: "ylorrd";
|
|
33
|
+
readonly editorSections: readonly ["layer", "elevation", "color", "geometry", "material"];
|
|
34
|
+
}, {
|
|
35
|
+
readonly sceneLayerType: "DECK_HEATMAP";
|
|
36
|
+
readonly styleType: "deck-heatmap";
|
|
37
|
+
readonly geometryFamily: "point";
|
|
38
|
+
readonly aggregation: true;
|
|
39
|
+
readonly requiresNumericField: false;
|
|
40
|
+
readonly defaultColorRampId: "ylorrd";
|
|
41
|
+
readonly editorSections: readonly ["layer", "weight", "color", "heatmap"];
|
|
42
|
+
}, {
|
|
43
|
+
readonly sceneLayerType: "DECK_HEXAGON";
|
|
44
|
+
readonly styleType: "deck-hexagon";
|
|
45
|
+
readonly geometryFamily: "point";
|
|
46
|
+
readonly aggregation: true;
|
|
47
|
+
readonly requiresNumericField: false;
|
|
48
|
+
readonly defaultColorRampId: "ylorrd";
|
|
49
|
+
readonly editorSections: readonly ["layer", "weight", "color", "hexagon", "material"];
|
|
50
|
+
}, {
|
|
51
|
+
readonly sceneLayerType: "DECK_MVT_LINE";
|
|
52
|
+
readonly styleType: "deck-mvt-line";
|
|
53
|
+
readonly geometryFamily: "line";
|
|
54
|
+
readonly aggregation: false;
|
|
55
|
+
readonly requiresNumericField: false;
|
|
56
|
+
readonly defaultColorRampId: "blues";
|
|
57
|
+
readonly editorSections: readonly ["layer", "color", "width", "geometry"];
|
|
58
|
+
}];
|
|
59
|
+
export type ImplementedDeckSceneLayerTypeId = (typeof DECK_LAYER_CAPABILITY_DEFINITIONS)[number]["sceneLayerType"];
|
|
60
|
+
export type DeckClassificationMethod = "equal-interval" | "quantile" | "natural-breaks";
|
|
61
|
+
export type DeckCategoryValue = string | number | boolean;
|
|
62
|
+
export type DeckColorMapping = {
|
|
63
|
+
mode: "constant";
|
|
64
|
+
value: string;
|
|
65
|
+
} | {
|
|
66
|
+
mode: "categorical";
|
|
67
|
+
field: string;
|
|
68
|
+
categories: Array<{
|
|
69
|
+
value: DeckCategoryValue;
|
|
70
|
+
color: string;
|
|
71
|
+
}>;
|
|
72
|
+
defaultColor: string;
|
|
73
|
+
} | {
|
|
74
|
+
mode: "graduated";
|
|
75
|
+
field: string;
|
|
76
|
+
breaks: number[];
|
|
77
|
+
colors: string[];
|
|
78
|
+
} | {
|
|
79
|
+
mode: "continuous";
|
|
80
|
+
field: string;
|
|
81
|
+
stops: Array<{
|
|
82
|
+
input: number;
|
|
83
|
+
color: string;
|
|
84
|
+
}>;
|
|
85
|
+
};
|
|
86
|
+
export interface DeckStrokeStyle {
|
|
87
|
+
value: number;
|
|
88
|
+
units: "pixels" | "meters";
|
|
89
|
+
scale: number;
|
|
90
|
+
minPixels: number;
|
|
91
|
+
maxPixels: number;
|
|
92
|
+
}
|
|
93
|
+
export interface DeckMaterialStyle {
|
|
94
|
+
ambient: number;
|
|
95
|
+
diffuse: number;
|
|
96
|
+
shininess: number;
|
|
97
|
+
specularColor: string;
|
|
98
|
+
}
|
|
99
|
+
export type DeckElevationDirection = "ascending" | "descending";
|
|
100
|
+
export interface DeckElevationStyle {
|
|
101
|
+
field: string;
|
|
102
|
+
scale: number;
|
|
103
|
+
direction: DeckElevationDirection;
|
|
104
|
+
domain: [number, number] | null;
|
|
105
|
+
}
|
|
106
|
+
export interface DeckMvtExtrudedPolygonStyle {
|
|
107
|
+
version: 1;
|
|
108
|
+
type: "deck-mvt-extruded-polygon";
|
|
109
|
+
filled: boolean;
|
|
110
|
+
stroked: boolean;
|
|
111
|
+
wireframe: boolean;
|
|
112
|
+
elevation: DeckElevationStyle;
|
|
113
|
+
color: DeckColorMapping;
|
|
114
|
+
opacity: number;
|
|
115
|
+
outlineColor: string | null;
|
|
116
|
+
outlineWidth: DeckStrokeStyle;
|
|
117
|
+
material: DeckMaterialStyle | null;
|
|
118
|
+
}
|
|
119
|
+
export type DeckLineWidthStyle = {
|
|
120
|
+
mode: "constant";
|
|
121
|
+
value: number;
|
|
122
|
+
units: "pixels" | "meters";
|
|
123
|
+
scale: number;
|
|
124
|
+
minPixels: number;
|
|
125
|
+
maxPixels: number;
|
|
126
|
+
billboard: boolean;
|
|
127
|
+
} | {
|
|
128
|
+
mode: "graduated";
|
|
129
|
+
field: string;
|
|
130
|
+
defaultValue: number;
|
|
131
|
+
stops: Array<{
|
|
132
|
+
input: number;
|
|
133
|
+
output: number;
|
|
134
|
+
}>;
|
|
135
|
+
units: "pixels" | "meters";
|
|
136
|
+
scale: number;
|
|
137
|
+
minPixels: number;
|
|
138
|
+
maxPixels: number;
|
|
139
|
+
billboard: boolean;
|
|
140
|
+
};
|
|
141
|
+
export interface DeckMvtLineStyle {
|
|
142
|
+
version: 1;
|
|
143
|
+
type: "deck-mvt-line";
|
|
144
|
+
color: DeckColorMapping;
|
|
145
|
+
width: DeckLineWidthStyle;
|
|
146
|
+
opacity: number;
|
|
147
|
+
capRounded: boolean;
|
|
148
|
+
jointRounded: boolean;
|
|
149
|
+
miterLimit: number;
|
|
150
|
+
}
|
|
151
|
+
export interface DeckColumnStyle {
|
|
152
|
+
version: 1;
|
|
153
|
+
type: "deck-column";
|
|
154
|
+
radius: {
|
|
155
|
+
value: number;
|
|
156
|
+
units: "meters" | "pixels";
|
|
157
|
+
};
|
|
158
|
+
diskResolution: number;
|
|
159
|
+
angle: number;
|
|
160
|
+
coverage: number;
|
|
161
|
+
wireframe: boolean;
|
|
162
|
+
flatShading: boolean;
|
|
163
|
+
elevation: DeckElevationStyle;
|
|
164
|
+
color: DeckColorMapping;
|
|
165
|
+
opacity: number;
|
|
166
|
+
material: DeckMaterialStyle | null;
|
|
167
|
+
}
|
|
168
|
+
export type DeckAggregationWeight = {
|
|
169
|
+
mode: "constant";
|
|
170
|
+
value: number;
|
|
171
|
+
} | {
|
|
172
|
+
mode: "field";
|
|
173
|
+
field: string;
|
|
174
|
+
scale: number;
|
|
175
|
+
};
|
|
176
|
+
export type DeckHeatmapWeight = DeckAggregationWeight;
|
|
177
|
+
export type DeckAggregationOperation = "SUM" | "MEAN" | "MIN" | "MAX" | "COUNT";
|
|
178
|
+
export interface DeckHeatmapStyle {
|
|
179
|
+
version: 1;
|
|
180
|
+
type: "deck-heatmap";
|
|
181
|
+
weight: DeckHeatmapWeight;
|
|
182
|
+
aggregation: "SUM" | "MEAN";
|
|
183
|
+
radiusPixels: number;
|
|
184
|
+
intensity: number;
|
|
185
|
+
threshold: number;
|
|
186
|
+
colorRange: string[];
|
|
187
|
+
colorDomain: [number, number] | null;
|
|
188
|
+
weightsTextureSize: number;
|
|
189
|
+
debounceTimeout: number;
|
|
190
|
+
opacity: number;
|
|
191
|
+
}
|
|
192
|
+
export interface DeckHexagonStyle {
|
|
193
|
+
version: 1;
|
|
194
|
+
type: "deck-hexagon";
|
|
195
|
+
weight: DeckAggregationWeight;
|
|
196
|
+
colorAggregation: DeckAggregationOperation;
|
|
197
|
+
elevationAggregation: DeckAggregationOperation;
|
|
198
|
+
radius: number;
|
|
199
|
+
coverage: number;
|
|
200
|
+
extruded: boolean;
|
|
201
|
+
elevationScale: number;
|
|
202
|
+
colorRange: string[];
|
|
203
|
+
colorDomain: [number, number] | null;
|
|
204
|
+
colorScaleType: "linear" | "quantize" | "quantile" | "ordinal";
|
|
205
|
+
lowerPercentile: number;
|
|
206
|
+
upperPercentile: number;
|
|
207
|
+
material: DeckMaterialStyle | null;
|
|
208
|
+
opacity: number;
|
|
209
|
+
}
|
|
210
|
+
export type DeckLayerStyle = DeckMvtExtrudedPolygonStyle | DeckColumnStyle | DeckHeatmapStyle | DeckHexagonStyle | DeckMvtLineStyle;
|
|
211
|
+
export type DeckColorMappedLayerStyle = DeckMvtExtrudedPolygonStyle | DeckColumnStyle | DeckMvtLineStyle;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export declare const SCENE_LAYER_TYPE_IDS: readonly ["MAPLIBRE_FILL", "MAPLIBRE_LINE", "MAPLIBRE_CIRCLE", "MAPLIBRE_RASTER", "CUSTOM_FLOW_FIELD", "DECK_MVT_POLYGON", "DECK_MVT_EXTRUDED_POLYGON", "DECK_COLUMN", "DECK_HEATMAP", "DECK_HEXAGON", "DECK_MVT_LINE", "DECK_MVT_POINT", "SYMBOL_POINT", "SYMBOL_LINE", "SYMBOL_POLYGON"];
|
|
2
|
+
export type SceneLayerTypeId = (typeof SCENE_LAYER_TYPE_IDS)[number];
|
|
3
|
+
export type LegacySceneLayerTypeId = "VECTOR" | "RASTER";
|
|
4
|
+
export type SceneLayerRendererKind = "maplibre" | "deck" | "custom";
|
|
5
|
+
export type SceneLayerResourceKind = "vector" | "raster";
|
|
6
|
+
export type SceneLayerGeometryFamily = "point" | "line" | "polygon" | "raster";
|
|
7
|
+
export type SceneLayerStyleKind = "maplibre-fill" | "maplibre-line" | "maplibre-circle" | "maplibre-raster" | "custom-flow-field" | "deck-mvt-polygon" | "deck-mvt-extruded-polygon" | "deck-column" | "deck-heatmap" | "deck-hexagon" | "deck-mvt-line" | "deck-mvt-point" | "symbol";
|
|
8
|
+
export interface SceneLayerTypeDefinition {
|
|
9
|
+
id: SceneLayerTypeId;
|
|
10
|
+
label: string;
|
|
11
|
+
renderer: SceneLayerRendererKind;
|
|
12
|
+
resourceTypes: readonly SceneLayerResourceKind[];
|
|
13
|
+
geometryFamilies: readonly SceneLayerGeometryFamily[];
|
|
14
|
+
styleKind: SceneLayerStyleKind;
|
|
15
|
+
creationEnabled: boolean;
|
|
16
|
+
requiresNumericField?: boolean;
|
|
17
|
+
}
|
|
18
|
+
export interface CreateSceneLayerSelection {
|
|
19
|
+
layerType: SceneLayerTypeId;
|
|
20
|
+
styleJson: string;
|
|
21
|
+
name?: string;
|
|
22
|
+
}
|
|
23
|
+
export declare const SCENE_LAYER_TYPE_DEFINITIONS: readonly SceneLayerTypeDefinition[];
|