@open-pioneer/map 0.1.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/CHANGELOG.md +12 -0
- package/LICENSE +202 -0
- package/MapRegistryImpl.d.ts +15 -0
- package/MapRegistryImpl.js +89 -0
- package/MapRegistryImpl.js.map +1 -0
- package/README.md +653 -0
- package/_virtual/_virtual-pioneer-module_react-hooks.js +7 -0
- package/_virtual/_virtual-pioneer-module_react-hooks.js.map +1 -0
- package/api/MapConfig.d.ts +111 -0
- package/api/MapModel.d.ts +112 -0
- package/api/MapRegistry.d.ts +54 -0
- package/api/index.d.ts +12 -0
- package/api/layers/SimpleLayer.d.ts +24 -0
- package/api/layers/SimpleLayer.js +6 -0
- package/api/layers/SimpleLayer.js.map +1 -0
- package/api/layers/WMSLayer.d.ts +42 -0
- package/api/layers/WMSLayer.js +6 -0
- package/api/layers/WMSLayer.js.map +1 -0
- package/api/layers/base.d.ts +170 -0
- package/api/layers/index.d.ts +3 -0
- package/api/shared.d.ts +10 -0
- package/index.d.ts +1 -0
- package/index.js +11 -0
- package/index.js.map +1 -0
- package/layers/BkgTopPlusOpen.d.ts +21 -0
- package/layers/BkgTopPlusOpen.js +61 -0
- package/layers/BkgTopPlusOpen.js.map +1 -0
- package/model/AbstractLayer.d.ts +24 -0
- package/model/AbstractLayer.js +133 -0
- package/model/AbstractLayer.js.map +1 -0
- package/model/AbstractLayerBase.d.ts +37 -0
- package/model/AbstractLayerBase.js +106 -0
- package/model/AbstractLayerBase.js.map +1 -0
- package/model/LayerCollectionImpl.d.ts +27 -0
- package/model/LayerCollectionImpl.js +226 -0
- package/model/LayerCollectionImpl.js.map +1 -0
- package/model/MapModelImpl.d.ts +19 -0
- package/model/MapModelImpl.js +179 -0
- package/model/MapModelImpl.js.map +1 -0
- package/model/SublayersCollectionImpl.d.ts +15 -0
- package/model/SublayersCollectionImpl.js +29 -0
- package/model/SublayersCollectionImpl.js.map +1 -0
- package/model/createMapModel.d.ts +3 -0
- package/model/createMapModel.js +154 -0
- package/model/createMapModel.js.map +1 -0
- package/model/layers/SimpleLayerImpl.d.ts +9 -0
- package/model/layers/SimpleLayerImpl.js +10 -0
- package/model/layers/SimpleLayerImpl.js.map +1 -0
- package/model/layers/WMSLayerImpl.d.ts +29 -0
- package/model/layers/WMSLayerImpl.js +177 -0
- package/model/layers/WMSLayerImpl.js.map +1 -0
- package/package.json +67 -0
- package/projections.d.ts +27 -0
- package/projections.js +15 -0
- package/projections.js.map +1 -0
- package/services.d.ts +1 -0
- package/services.js +2 -0
- package/services.js.map +1 -0
- package/ui/MapAnchor.d.ts +49 -0
- package/ui/MapAnchor.js +91 -0
- package/ui/MapAnchor.js.map +1 -0
- package/ui/MapContainer.d.ts +60 -0
- package/ui/MapContainer.js +192 -0
- package/ui/MapContainer.js.map +1 -0
- package/ui/MapContext.d.ts +11 -0
- package/ui/MapContext.js +17 -0
- package/ui/MapContext.js.map +1 -0
- package/ui/hooks.d.ts +24 -0
- package/ui/hooks.js +73 -0
- package/ui/hooks.js.map +1 -0
- package/ui/styles.css +3 -0
- package/ui/styles.css.map +1 -0
- package/ui/useMapModel.d.ts +31 -0
- package/ui/useMapModel.js +21 -0
- package/ui/useMapModel.js.map +1 -0
- package/util/defer.d.ts +18 -0
- package/util/defer.js +21 -0
- package/util/defer.js.map +1 -0
- package/util/ol-test-support.d.ts +2 -0
- package/util/ol-test-support.js +24 -0
- package/util/ol-test-support.js.map +1 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BkgTopPlusOpen.js","sources":["BkgTopPlusOpen.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2023 Open Pioneer project (https://github.com/open-pioneer)\n// SPDX-License-Identifier: Apache-2.0\nimport WMTS from \"ol/source/WMTS\";\nimport WMTSTileGrid from \"ol/tilegrid/WMTS\";\n\n/** @internal */\nexport interface BkgTopPlusOpenProps {\n /**\n * The name of the requesting layer.\n * @default \"web\"\n */\n layer?: \"web\" | \"web_grau\" | \"web_light\";\n}\n\n/**\n * Layer source for BKG TopPlus Open.\n *\n * Used for @open-pioneer unit tests: not part of the public interface.\n *\n * @see https://gdz.bkg.bund.de/index.php/default/wmts-topplusopen-wmts-topplus-open.html\n *\n * @internal\n */\nexport class BkgTopPlusOpen extends WMTS {\n constructor(options?: BkgTopPlusOpenProps) {\n const topLeftCorner = [-3803165.98427299, 8805908.08284866];\n\n /**\n * Resolutions taken from AdV WMTS-Profil\n * @see https://www.adv-online.de/AdV-Produkte/Standards-und-Produktblaetter/AdV-Profile/\n */\n const resolutions = [\n 4891.96981025128, // AdV-Level 0 (1:17471320.7508974)\n 2445.98490512564, // AdV-Level 1 (1:8735660.37544872)\n 1222.99245256282, // AdV-Level 2 (1:4367830.18772436)\n 611.49622628141, // AdV-Level 3 (1:2183915.09386218)\n 305.748113140705, // AdV-Level 4 (1:1091957.54693109)\n 152.874056570353, // AdV-Level 5 (1:545978.773465545)\n 76.4370282851763, // AdV-Level 6 (1:272989,386732772)\n 38.2185141425881, // AdV-Level 7 (1:136494,693366386)\n 19.1092570712941, // AdV-Level 8 (1:68247,3466831931)\n 9.55462853564703, // AdV-Level 9 (1:34123,6733415966)\n 4.77731426782352, // AdV-Level 10 (1:17061,8366707983)\n 2.38865713391176, // AdV-Level 11 (1:8530,91833539914)\n 1.19432856695588, // AdV-Level 12 (1:4265,45916769957)\n 0.59716428347794 // AdV-Level 13 (1:2132,72958384978)\n ];\n\n /**\n * The length of matrixIds needs to match the length of the resolutions array\n * @see https://openlayers.org/en/latest/apidoc/module-ol_tilegrid_WMTS-WMTSTileGrid.html\n */\n const matrixIds = new Array(resolutions.length);\n for (let i = 0; i < resolutions.length; i++) {\n matrixIds[i] = i;\n }\n\n const layer = options?.layer ?? \"web\";\n\n super({\n url: `https://sgx.geodatenzentrum.de/wmts_topplus_open/tile/1.0.0/${layer}/{Style}/{TileMatrixSet}/{TileMatrix}/{TileRow}/{TileCol}.png`,\n layer: layer,\n matrixSet: \"EU_EPSG_25832_TOPPLUS\",\n format: \"image/png\",\n projection: \"EPSG:25832\",\n requestEncoding: \"REST\",\n tileGrid: new WMTSTileGrid({\n origin: topLeftCorner,\n resolutions: resolutions,\n matrixIds: matrixIds\n }),\n style: \"default\",\n attributions: `Kartendarstellung und Präsentationsgraphiken: © Bundesamt für Kartographie und Geodäsie ${new Date().getFullYear()}, <a href=\"https://sg.geodatenzentrum.de/web_public/gdz/datenquellen/Datenquellen_TopPlusOpen.html\" target=\"_blank\">Datenquellen</a>`\n });\n }\n}\n"],"names":[],"mappings":";;;AAuBO,MAAM,uBAAuB,IAAK,CAAA;AAAA,EACrC,YAAY,OAA+B,EAAA;AACvC,IAAM,MAAA,aAAA,GAAgB,CAAC,CAAA,kBAAA,EAAmB,kBAAgB,CAAA,CAAA;AAM1D,IAAA,MAAM,WAAc,GAAA;AAAA,MAChB,gBAAA;AAAA;AAAA,MACA,gBAAA;AAAA;AAAA,MACA,gBAAA;AAAA;AAAA,MACA,eAAA;AAAA;AAAA,MACA,gBAAA;AAAA;AAAA,MACA,gBAAA;AAAA;AAAA,MACA,gBAAA;AAAA;AAAA,MACA,gBAAA;AAAA;AAAA,MACA,gBAAA;AAAA;AAAA,MACA,gBAAA;AAAA;AAAA,MACA,gBAAA;AAAA;AAAA,MACA,gBAAA;AAAA;AAAA,MACA,gBAAA;AAAA;AAAA,MACA,gBAAA;AAAA;AAAA,KACJ,CAAA;AAMA,IAAA,MAAM,SAAY,GAAA,IAAI,KAAM,CAAA,WAAA,CAAY,MAAM,CAAA,CAAA;AAC9C,IAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,WAAA,CAAY,QAAQ,CAAK,EAAA,EAAA;AACzC,MAAA,SAAA,CAAU,CAAC,CAAI,GAAA,CAAA,CAAA;AAAA,KACnB;AAEA,IAAM,MAAA,KAAA,GAAQ,SAAS,KAAS,IAAA,KAAA,CAAA;AAEhC,IAAM,KAAA,CAAA;AAAA,MACF,GAAA,EAAK,+DAA+D,KAAK,CAAA,6DAAA,CAAA;AAAA,MACzE,KAAA;AAAA,MACA,SAAW,EAAA,uBAAA;AAAA,MACX,MAAQ,EAAA,WAAA;AAAA,MACR,UAAY,EAAA,YAAA;AAAA,MACZ,eAAiB,EAAA,MAAA;AAAA,MACjB,QAAA,EAAU,IAAI,YAAa,CAAA;AAAA,QACvB,MAAQ,EAAA,aAAA;AAAA,QACR,WAAA;AAAA,QACA,SAAA;AAAA,OACH,CAAA;AAAA,MACD,KAAO,EAAA,SAAA;AAAA,MACP,cAAc,CAA2F,oGAAA,EAAA,CAAA,CAAA,IAAI,IAAK,EAAA,EAAE,aAAa,CAAA,oIAAA,CAAA;AAAA,KACpI,CAAA,CAAA;AAAA,GACL;AACJ;;;;"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import OlBaseLayer from "ol/layer/Base";
|
|
2
|
+
import { Layer, LayerLoadState, SimpleLayerConfig } from "../api";
|
|
3
|
+
import { AbstractLayerBase } from "./AbstractLayerBase";
|
|
4
|
+
import { MapModelImpl } from "./MapModelImpl";
|
|
5
|
+
/**
|
|
6
|
+
* Base class for normal layer types.
|
|
7
|
+
*
|
|
8
|
+
* These layers always have an associated OpenLayers layer.
|
|
9
|
+
*/
|
|
10
|
+
export declare abstract class AbstractLayer<AdditionalEvents = {}> extends AbstractLayerBase<AdditionalEvents> implements Layer {
|
|
11
|
+
#private;
|
|
12
|
+
constructor(config: SimpleLayerConfig);
|
|
13
|
+
get visible(): boolean;
|
|
14
|
+
get olLayer(): OlBaseLayer;
|
|
15
|
+
get isBaseLayer(): boolean;
|
|
16
|
+
get loadState(): LayerLoadState;
|
|
17
|
+
destroy(): void;
|
|
18
|
+
/**
|
|
19
|
+
* Called by the map model when the layer is added to the map.
|
|
20
|
+
*/
|
|
21
|
+
__attach(map: MapModelImpl): void;
|
|
22
|
+
setVisible(newVisibility: boolean): void;
|
|
23
|
+
__setVisible(newVisibility: boolean): void;
|
|
24
|
+
}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
import { createLogger } from '@open-pioneer/core';
|
|
2
|
+
import { unByKey } from 'ol/Observable';
|
|
3
|
+
import OlLayer from 'ol/layer/Layer';
|
|
4
|
+
import { AbstractLayerBase } from './AbstractLayerBase.js';
|
|
5
|
+
|
|
6
|
+
const LOG = createLogger("map:AbstractLayer");
|
|
7
|
+
class AbstractLayer extends AbstractLayerBase {
|
|
8
|
+
#olLayer;
|
|
9
|
+
#isBaseLayer;
|
|
10
|
+
#visible;
|
|
11
|
+
#loadState;
|
|
12
|
+
#stateWatchResource;
|
|
13
|
+
constructor(config) {
|
|
14
|
+
super(config);
|
|
15
|
+
this.#olLayer = config.olLayer;
|
|
16
|
+
this.#isBaseLayer = config.isBaseLayer ?? false;
|
|
17
|
+
this.#visible = config.visible ?? true;
|
|
18
|
+
const { initial: initialState, resource: stateWatchResource } = watchLoadState(
|
|
19
|
+
this.#olLayer,
|
|
20
|
+
(state) => {
|
|
21
|
+
this.#loadState = state;
|
|
22
|
+
this.__emitChangeEvent("changed:loadState");
|
|
23
|
+
}
|
|
24
|
+
);
|
|
25
|
+
this.#loadState = initialState;
|
|
26
|
+
this.#stateWatchResource = stateWatchResource;
|
|
27
|
+
}
|
|
28
|
+
get visible() {
|
|
29
|
+
return this.#visible;
|
|
30
|
+
}
|
|
31
|
+
get olLayer() {
|
|
32
|
+
return this.#olLayer;
|
|
33
|
+
}
|
|
34
|
+
get isBaseLayer() {
|
|
35
|
+
return this.#isBaseLayer;
|
|
36
|
+
}
|
|
37
|
+
get loadState() {
|
|
38
|
+
return this.#loadState;
|
|
39
|
+
}
|
|
40
|
+
destroy() {
|
|
41
|
+
if (this.__destroyed) {
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
this.#stateWatchResource?.destroy();
|
|
45
|
+
this.olLayer.dispose();
|
|
46
|
+
super.destroy();
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Called by the map model when the layer is added to the map.
|
|
50
|
+
*/
|
|
51
|
+
__attach(map) {
|
|
52
|
+
super.__attachToMap(map);
|
|
53
|
+
}
|
|
54
|
+
setVisible(newVisibility) {
|
|
55
|
+
if (this.isBaseLayer) {
|
|
56
|
+
LOG.warn(
|
|
57
|
+
`Cannot change visibility of base layer '${this.id}': use activateBaseLayer() on the map's LayerCollection instead.`
|
|
58
|
+
);
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
this.__setVisible(newVisibility);
|
|
62
|
+
}
|
|
63
|
+
__setVisible(newVisibility) {
|
|
64
|
+
let changed = false;
|
|
65
|
+
if (this.#visible !== newVisibility) {
|
|
66
|
+
this.#visible = newVisibility;
|
|
67
|
+
changed = true;
|
|
68
|
+
}
|
|
69
|
+
if (this.#olLayer.getVisible() != this.#visible) {
|
|
70
|
+
this.#olLayer.setVisible(newVisibility);
|
|
71
|
+
}
|
|
72
|
+
changed && this.__emitChangeEvent("changed:visible");
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
function watchLoadState(olLayer, onChange) {
|
|
76
|
+
if (!(olLayer instanceof OlLayer)) {
|
|
77
|
+
return {
|
|
78
|
+
initial: "loaded",
|
|
79
|
+
resource: {
|
|
80
|
+
destroy() {
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
let currentSource = olLayer?.getSource();
|
|
86
|
+
let currentLoadState = mapState(currentSource?.getState());
|
|
87
|
+
const updateState = () => {
|
|
88
|
+
const nextLoadState = mapState(currentSource?.getState());
|
|
89
|
+
if (currentLoadState !== nextLoadState) {
|
|
90
|
+
currentLoadState = nextLoadState;
|
|
91
|
+
onChange(currentLoadState);
|
|
92
|
+
}
|
|
93
|
+
};
|
|
94
|
+
let stateHandle;
|
|
95
|
+
stateHandle = currentSource?.on("change", () => {
|
|
96
|
+
updateState();
|
|
97
|
+
});
|
|
98
|
+
const sourceHandle = olLayer.on("change:source", () => {
|
|
99
|
+
stateHandle && unByKey(stateHandle);
|
|
100
|
+
stateHandle = void 0;
|
|
101
|
+
currentSource = olLayer?.getSource();
|
|
102
|
+
stateHandle = currentSource?.on("change", () => {
|
|
103
|
+
updateState();
|
|
104
|
+
});
|
|
105
|
+
updateState();
|
|
106
|
+
});
|
|
107
|
+
return {
|
|
108
|
+
initial: currentLoadState,
|
|
109
|
+
resource: {
|
|
110
|
+
destroy() {
|
|
111
|
+
stateHandle && unByKey(stateHandle);
|
|
112
|
+
unByKey(sourceHandle);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
function mapState(state) {
|
|
118
|
+
switch (state) {
|
|
119
|
+
case void 0:
|
|
120
|
+
return "loaded";
|
|
121
|
+
case "undefined":
|
|
122
|
+
return "not-loaded";
|
|
123
|
+
case "loading":
|
|
124
|
+
return "loading";
|
|
125
|
+
case "ready":
|
|
126
|
+
return "loaded";
|
|
127
|
+
case "error":
|
|
128
|
+
return "error";
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
export { AbstractLayer };
|
|
133
|
+
//# sourceMappingURL=AbstractLayer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AbstractLayer.js","sources":["AbstractLayer.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2023 Open Pioneer project (https://github.com/open-pioneer)\n// SPDX-License-Identifier: Apache-2.0\nimport { Resource, createLogger } from \"@open-pioneer/core\";\nimport { unByKey } from \"ol/Observable\";\nimport { EventsKey } from \"ol/events\";\nimport OlBaseLayer from \"ol/layer/Base\";\nimport OlLayer from \"ol/layer/Layer\";\nimport Source, { State as OlSourceState } from \"ol/source/Source\";\nimport { Layer, LayerLoadState, SimpleLayerConfig } from \"../api\";\nimport { AbstractLayerBase } from \"./AbstractLayerBase\";\nimport { MapModelImpl } from \"./MapModelImpl\";\n\nconst LOG = createLogger(\"map:AbstractLayer\");\n\n/**\n * Base class for normal layer types.\n *\n * These layers always have an associated OpenLayers layer.\n */\nexport abstract class AbstractLayer<AdditionalEvents = {}>\n extends AbstractLayerBase<AdditionalEvents>\n implements Layer\n{\n #olLayer: OlBaseLayer;\n #isBaseLayer: boolean;\n #visible: boolean;\n\n #loadState: LayerLoadState;\n #stateWatchResource: Resource | undefined;\n\n constructor(config: SimpleLayerConfig) {\n super(config);\n this.#olLayer = config.olLayer;\n this.#isBaseLayer = config.isBaseLayer ?? false;\n this.#visible = config.visible ?? true;\n\n const { initial: initialState, resource: stateWatchResource } = watchLoadState(\n this.#olLayer,\n (state) => {\n this.#loadState = state;\n this.__emitChangeEvent(\"changed:loadState\");\n }\n );\n this.#loadState = initialState;\n this.#stateWatchResource = stateWatchResource;\n }\n\n get visible(): boolean {\n return this.#visible;\n }\n\n get olLayer(): OlBaseLayer {\n return this.#olLayer;\n }\n\n get isBaseLayer(): boolean {\n return this.#isBaseLayer;\n }\n\n get loadState(): LayerLoadState {\n return this.#loadState;\n }\n\n destroy() {\n if (this.__destroyed) {\n return;\n }\n\n this.#stateWatchResource?.destroy();\n this.olLayer.dispose();\n super.destroy();\n }\n\n /**\n * Called by the map model when the layer is added to the map.\n */\n __attach(map: MapModelImpl): void {\n super.__attachToMap(map);\n }\n\n setVisible(newVisibility: boolean): void {\n if (this.isBaseLayer) {\n LOG.warn(\n `Cannot change visibility of base layer '${this.id}': use activateBaseLayer() on the map's LayerCollection instead.`\n );\n return;\n }\n\n this.__setVisible(newVisibility);\n }\n\n __setVisible(newVisibility: boolean): void {\n let changed = false;\n if (this.#visible !== newVisibility) {\n this.#visible = newVisibility;\n changed = true;\n }\n\n // Improvement: actual map sync?\n if (this.#olLayer.getVisible() != this.#visible) {\n this.#olLayer.setVisible(newVisibility);\n }\n changed && this.__emitChangeEvent(\"changed:visible\");\n }\n}\n\nfunction watchLoadState(\n olLayer: OlBaseLayer,\n onChange: (newState: LayerLoadState) => void\n): { initial: LayerLoadState; resource: Resource } {\n if (!(olLayer instanceof OlLayer)) {\n // Some layers don't have a source (such as group)\n return {\n initial: \"loaded\",\n resource: {\n destroy() {\n void 0;\n }\n }\n };\n }\n\n let currentSource = olLayer?.getSource() as Source | null;\n let currentLoadState = mapState(currentSource?.getState());\n const updateState = () => {\n const nextLoadState = mapState(currentSource?.getState());\n if (currentLoadState !== nextLoadState) {\n currentLoadState = nextLoadState;\n onChange(currentLoadState);\n }\n };\n\n let stateHandle: EventsKey | undefined;\n stateHandle = currentSource?.on(\"change\", () => {\n updateState();\n });\n\n const sourceHandle = olLayer.on(\"change:source\", () => {\n // unsubscribe from old source\n stateHandle && unByKey(stateHandle);\n stateHandle = undefined;\n\n // subscribe to new source and update state\n currentSource = olLayer?.getSource() as Source | null;\n stateHandle = currentSource?.on(\"change\", () => {\n updateState();\n });\n updateState();\n });\n return {\n initial: currentLoadState,\n resource: {\n destroy() {\n stateHandle && unByKey(stateHandle);\n unByKey(sourceHandle);\n }\n }\n };\n}\n\nfunction mapState(state: OlSourceState | undefined): LayerLoadState {\n switch (state) {\n case undefined:\n return \"loaded\";\n case \"undefined\":\n return \"not-loaded\";\n case \"loading\":\n return \"loading\";\n case \"ready\":\n return \"loaded\";\n case \"error\":\n return \"error\";\n }\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { EventEmitter, EventNames } from "@open-pioneer/core";
|
|
2
|
+
import { LayerBase, LayerBaseEvents, MapModel, Sublayer } from "../api";
|
|
3
|
+
import { MapModelImpl } from "./MapModelImpl";
|
|
4
|
+
import { SublayersCollectionImpl } from "./SublayersCollectionImpl";
|
|
5
|
+
export interface AbstractLayerBaseOptions {
|
|
6
|
+
id?: string;
|
|
7
|
+
title: string;
|
|
8
|
+
description?: string;
|
|
9
|
+
attributes?: Record<string, unknown>;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Base class for "normal" layers and sublayers alike to implement common properties
|
|
13
|
+
* such as id, title and attributes.
|
|
14
|
+
*/
|
|
15
|
+
export declare abstract class AbstractLayerBase<AdditionalEvents = {}> extends EventEmitter<LayerBaseEvents & AdditionalEvents> implements LayerBase {
|
|
16
|
+
#private;
|
|
17
|
+
constructor(config: AbstractLayerBaseOptions);
|
|
18
|
+
protected get __destroyed(): boolean;
|
|
19
|
+
get map(): MapModel;
|
|
20
|
+
get id(): string;
|
|
21
|
+
get title(): string;
|
|
22
|
+
get description(): string;
|
|
23
|
+
get attributes(): Record<string | symbol, unknown>;
|
|
24
|
+
abstract get visible(): boolean;
|
|
25
|
+
abstract get sublayers(): SublayersCollectionImpl<Sublayer & AbstractLayerBase> | undefined;
|
|
26
|
+
destroy(): void;
|
|
27
|
+
/**
|
|
28
|
+
* Attaches the layer to its owning map.
|
|
29
|
+
*/
|
|
30
|
+
protected __attachToMap(map: MapModelImpl): void;
|
|
31
|
+
setTitle(newTitle: string): void;
|
|
32
|
+
setDescription(newDescription: string): void;
|
|
33
|
+
updateAttributes(newAttributes: Record<string | symbol, unknown>): void;
|
|
34
|
+
deleteAttribute(deleteAttribute: string | symbol): void;
|
|
35
|
+
abstract setVisible(newVisibility: boolean): void;
|
|
36
|
+
protected __emitChangeEvent<Name extends EventNames<LayerBaseEvents & AdditionalEvents>>(event: Name): void;
|
|
37
|
+
}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import { createLogger, EventEmitter } from '@open-pioneer/core';
|
|
2
|
+
import { v4 } from 'uuid';
|
|
3
|
+
|
|
4
|
+
const LOG = createLogger("map:AbstractLayerModel");
|
|
5
|
+
class AbstractLayerBase extends EventEmitter {
|
|
6
|
+
#map;
|
|
7
|
+
#id;
|
|
8
|
+
#title;
|
|
9
|
+
#description;
|
|
10
|
+
#attributes;
|
|
11
|
+
#destroyed = false;
|
|
12
|
+
constructor(config) {
|
|
13
|
+
super();
|
|
14
|
+
this.#id = config.id ?? v4();
|
|
15
|
+
this.#attributes = config.attributes ?? {};
|
|
16
|
+
this.#title = config.title;
|
|
17
|
+
this.#description = config.description ?? "";
|
|
18
|
+
}
|
|
19
|
+
get __destroyed() {
|
|
20
|
+
return this.#destroyed;
|
|
21
|
+
}
|
|
22
|
+
get map() {
|
|
23
|
+
const map = this.#map;
|
|
24
|
+
if (!map) {
|
|
25
|
+
throw new Error(`Layer '${this.id}' has not been attached to a map yet.`);
|
|
26
|
+
}
|
|
27
|
+
return map;
|
|
28
|
+
}
|
|
29
|
+
get id() {
|
|
30
|
+
return this.#id;
|
|
31
|
+
}
|
|
32
|
+
get title() {
|
|
33
|
+
return this.#title;
|
|
34
|
+
}
|
|
35
|
+
get description() {
|
|
36
|
+
return this.#description;
|
|
37
|
+
}
|
|
38
|
+
get attributes() {
|
|
39
|
+
return this.#attributes;
|
|
40
|
+
}
|
|
41
|
+
destroy() {
|
|
42
|
+
if (this.#destroyed) {
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
this.#destroyed = true;
|
|
46
|
+
this.sublayers?.destroy();
|
|
47
|
+
try {
|
|
48
|
+
this.emit("destroy");
|
|
49
|
+
} catch (e) {
|
|
50
|
+
LOG.warn(`Unexpected error from event listener during layer destruction:`, e);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Attaches the layer to its owning map.
|
|
55
|
+
*/
|
|
56
|
+
__attachToMap(map) {
|
|
57
|
+
if (this.#map) {
|
|
58
|
+
throw new Error(
|
|
59
|
+
`Layer '${this.id}' has already been attached to the map '${this.map.id}'`
|
|
60
|
+
);
|
|
61
|
+
}
|
|
62
|
+
this.#map = map;
|
|
63
|
+
}
|
|
64
|
+
setTitle(newTitle) {
|
|
65
|
+
if (newTitle !== this.#title) {
|
|
66
|
+
this.#title = newTitle;
|
|
67
|
+
this.__emitChangeEvent("changed:title");
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
setDescription(newDescription) {
|
|
71
|
+
if (newDescription !== this.#description) {
|
|
72
|
+
this.#description = newDescription;
|
|
73
|
+
this.__emitChangeEvent("changed:description");
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
updateAttributes(newAttributes) {
|
|
77
|
+
const attributes = this.#attributes;
|
|
78
|
+
const keys = Reflect.ownKeys(newAttributes);
|
|
79
|
+
let changed = false;
|
|
80
|
+
for (const key of keys) {
|
|
81
|
+
const existing = attributes[key];
|
|
82
|
+
const value = newAttributes[key];
|
|
83
|
+
if (existing !== value) {
|
|
84
|
+
attributes[key] = value;
|
|
85
|
+
changed = true;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
if (changed) {
|
|
89
|
+
this.__emitChangeEvent("changed:attributes");
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
deleteAttribute(deleteAttribute) {
|
|
93
|
+
const attributes = this.#attributes;
|
|
94
|
+
if (attributes[deleteAttribute]) {
|
|
95
|
+
delete attributes[deleteAttribute];
|
|
96
|
+
this.__emitChangeEvent("changed:attributes");
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
__emitChangeEvent(event) {
|
|
100
|
+
this.emit(event);
|
|
101
|
+
this.emit("changed");
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
export { AbstractLayerBase };
|
|
106
|
+
//# sourceMappingURL=AbstractLayerBase.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AbstractLayerBase.js","sources":["AbstractLayerBase.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2023 Open Pioneer project (https://github.com/open-pioneer)\n// SPDX-License-Identifier: Apache-2.0\nimport { EventEmitter, EventNames, createLogger } from \"@open-pioneer/core\";\nimport { v4 as uuid4v } from \"uuid\";\nimport { LayerBase, LayerBaseEvents, MapModel, Sublayer } from \"../api\";\nimport { MapModelImpl } from \"./MapModelImpl\";\nimport { SublayersCollectionImpl } from \"./SublayersCollectionImpl\";\n\nconst LOG = createLogger(\"map:AbstractLayerModel\");\n\nexport interface AbstractLayerBaseOptions {\n id?: string;\n title: string;\n description?: string;\n attributes?: Record<string, unknown>;\n}\n\n/**\n * Base class for \"normal\" layers and sublayers alike to implement common properties\n * such as id, title and attributes.\n */\nexport abstract class AbstractLayerBase<AdditionalEvents = {}>\n extends EventEmitter<LayerBaseEvents & AdditionalEvents>\n implements LayerBase\n{\n #map: MapModelImpl | undefined;\n\n #id: string;\n #title: string;\n #description: string;\n #attributes: Record<string | symbol, unknown>;\n #destroyed = false;\n\n constructor(config: AbstractLayerBaseOptions) {\n super();\n this.#id = config.id ?? uuid4v();\n this.#attributes = config.attributes ?? {};\n this.#title = config.title;\n this.#description = config.description ?? \"\";\n }\n\n protected get __destroyed(): boolean {\n return this.#destroyed;\n }\n\n get map(): MapModel {\n const map = this.#map;\n if (!map) {\n throw new Error(`Layer '${this.id}' has not been attached to a map yet.`);\n }\n return map;\n }\n\n get id(): string {\n return this.#id;\n }\n\n get title(): string {\n return this.#title;\n }\n\n get description(): string {\n return this.#description;\n }\n\n get attributes(): Record<string | symbol, unknown> {\n return this.#attributes;\n }\n\n abstract get visible(): boolean;\n\n abstract get sublayers(): SublayersCollectionImpl<Sublayer & AbstractLayerBase> | undefined;\n\n destroy() {\n if (this.#destroyed) {\n return;\n }\n\n this.#destroyed = true;\n this.sublayers?.destroy();\n try {\n this.emit(\"destroy\");\n } catch (e) {\n LOG.warn(`Unexpected error from event listener during layer destruction:`, e);\n }\n }\n\n /**\n * Attaches the layer to its owning map.\n */\n protected __attachToMap(map: MapModelImpl): void {\n if (this.#map) {\n throw new Error(\n `Layer '${this.id}' has already been attached to the map '${this.map.id}'`\n );\n }\n this.#map = map;\n }\n\n setTitle(newTitle: string): void {\n if (newTitle !== this.#title) {\n this.#title = newTitle;\n this.__emitChangeEvent(\"changed:title\");\n }\n }\n\n setDescription(newDescription: string): void {\n if (newDescription !== this.#description) {\n this.#description = newDescription;\n this.__emitChangeEvent(\"changed:description\");\n }\n }\n\n updateAttributes(newAttributes: Record<string | symbol, unknown>): void {\n const attributes = this.#attributes;\n const keys = Reflect.ownKeys(newAttributes);\n\n let changed = false;\n for (const key of keys) {\n const existing = attributes[key];\n const value = newAttributes[key];\n if (existing !== value) {\n attributes[key] = value;\n changed = true;\n }\n }\n\n if (changed) {\n this.__emitChangeEvent(\"changed:attributes\");\n }\n }\n\n deleteAttribute(deleteAttribute: string | symbol): void {\n const attributes = this.#attributes;\n if (attributes[deleteAttribute]) {\n delete attributes[deleteAttribute];\n this.__emitChangeEvent(\"changed:attributes\");\n }\n }\n\n abstract setVisible(newVisibility: boolean): void;\n\n protected __emitChangeEvent<Name extends EventNames<LayerBaseEvents & AdditionalEvents>>(\n event: Name\n ) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (this as any).emit(event);\n this.emit(\"changed\");\n }\n}\n"],"names":["uuid4v"],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { EventEmitter } from "@open-pioneer/core";
|
|
2
|
+
import OlBaseLayer from "ol/layer/Base";
|
|
3
|
+
import { LayerCollection, LayerCollectionEvents, Layer, LayerRetrievalOptions } from "../api";
|
|
4
|
+
import { AbstractLayer } from "./AbstractLayer";
|
|
5
|
+
import { AbstractLayerBase } from "./AbstractLayerBase";
|
|
6
|
+
import { MapModelImpl } from "./MapModelImpl";
|
|
7
|
+
/**
|
|
8
|
+
* Z index for layers that should always be rendered on top of all other layers.
|
|
9
|
+
* Note that this is an internal, unstable property!
|
|
10
|
+
*
|
|
11
|
+
* @internal
|
|
12
|
+
*/
|
|
13
|
+
export declare const TOPMOST_LAYER_Z = 9999999;
|
|
14
|
+
export declare class LayerCollectionImpl extends EventEmitter<LayerCollectionEvents> implements LayerCollection {
|
|
15
|
+
#private;
|
|
16
|
+
constructor(map: MapModelImpl);
|
|
17
|
+
destroy(): void;
|
|
18
|
+
addLayer(layer: Layer): void;
|
|
19
|
+
getBaseLayers(): AbstractLayer[];
|
|
20
|
+
getActiveBaseLayer(): AbstractLayer | undefined;
|
|
21
|
+
activateBaseLayer(id: string | undefined): boolean;
|
|
22
|
+
getOperationalLayers(options?: LayerRetrievalOptions): AbstractLayer[];
|
|
23
|
+
getAllLayers(options?: LayerRetrievalOptions): AbstractLayer[];
|
|
24
|
+
getLayerById(id: string): AbstractLayerBase | undefined;
|
|
25
|
+
removeLayerById(id: string): void;
|
|
26
|
+
getLayerByRawInstance(layer: OlBaseLayer): Layer | undefined;
|
|
27
|
+
}
|
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
import { createLogger, EventEmitter } from '@open-pioneer/core';
|
|
2
|
+
import { AbstractLayer } from './AbstractLayer.js';
|
|
3
|
+
|
|
4
|
+
const LOG = createLogger("map:LayerCollection");
|
|
5
|
+
const BASE_LAYER_Z = 0;
|
|
6
|
+
const OPERATION_LAYER_INITIAL_Z = 1;
|
|
7
|
+
const TOPMOST_LAYER_Z = 9999999;
|
|
8
|
+
class LayerCollectionImpl extends EventEmitter {
|
|
9
|
+
#map;
|
|
10
|
+
/** Top level layers (base layers, operational layers). No sublayers. */
|
|
11
|
+
#topLevelLayers = /* @__PURE__ */ new Set();
|
|
12
|
+
/** Index of _all_ layer instances, including sublayers. */
|
|
13
|
+
#layersById = /* @__PURE__ */ new Map();
|
|
14
|
+
/** Reverse index of _all_ layers that have an associated OpenLayers layer. */
|
|
15
|
+
#layersByOlLayer = /* @__PURE__ */ new WeakMap();
|
|
16
|
+
/** Currently active base layer. */
|
|
17
|
+
#activeBaseLayer;
|
|
18
|
+
/** next z-index for operational layer. currently just auto-increments. */
|
|
19
|
+
#nextIndex = OPERATION_LAYER_INITIAL_Z;
|
|
20
|
+
constructor(map) {
|
|
21
|
+
super();
|
|
22
|
+
this.#map = map;
|
|
23
|
+
}
|
|
24
|
+
destroy() {
|
|
25
|
+
for (const layer of this.#layersById.values()) {
|
|
26
|
+
layer.destroy();
|
|
27
|
+
}
|
|
28
|
+
this.#topLevelLayers.clear();
|
|
29
|
+
this.#layersById.clear();
|
|
30
|
+
this.#activeBaseLayer = void 0;
|
|
31
|
+
}
|
|
32
|
+
addLayer(layer) {
|
|
33
|
+
if (!isLayerInstance(layer)) {
|
|
34
|
+
throw new Error(
|
|
35
|
+
`Layer is not a valid layer instance. Use one of the classes provided by the map package instead.`
|
|
36
|
+
);
|
|
37
|
+
}
|
|
38
|
+
layer.__attach(this.#map);
|
|
39
|
+
this.#addLayer(layer);
|
|
40
|
+
}
|
|
41
|
+
getBaseLayers() {
|
|
42
|
+
return this.getAllLayers().filter((layer) => layer.isBaseLayer);
|
|
43
|
+
}
|
|
44
|
+
getActiveBaseLayer() {
|
|
45
|
+
return this.#activeBaseLayer;
|
|
46
|
+
}
|
|
47
|
+
activateBaseLayer(id) {
|
|
48
|
+
let newBaseLayer = void 0;
|
|
49
|
+
if (id != null) {
|
|
50
|
+
newBaseLayer = this.#layersById.get(id);
|
|
51
|
+
if (!(newBaseLayer instanceof AbstractLayer)) {
|
|
52
|
+
LOG.warn(`Cannot activate base layer '${id}: layer has an invalid type.'`);
|
|
53
|
+
return false;
|
|
54
|
+
}
|
|
55
|
+
if (!newBaseLayer) {
|
|
56
|
+
LOG.warn(`Cannot activate base layer '${id}': layer is unknown.`);
|
|
57
|
+
return false;
|
|
58
|
+
}
|
|
59
|
+
if (!newBaseLayer.isBaseLayer) {
|
|
60
|
+
LOG.warn(`Cannot activate base layer '${id}': layer is not a base layer.`);
|
|
61
|
+
return false;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
if (newBaseLayer !== this.#activeBaseLayer) {
|
|
65
|
+
this.#updateBaseLayer(newBaseLayer);
|
|
66
|
+
this.emit("changed");
|
|
67
|
+
}
|
|
68
|
+
return true;
|
|
69
|
+
}
|
|
70
|
+
getOperationalLayers(options) {
|
|
71
|
+
return this.getAllLayers(options).filter((layer) => !layer.isBaseLayer);
|
|
72
|
+
}
|
|
73
|
+
getAllLayers(options) {
|
|
74
|
+
const layers = Array.from(this.#topLevelLayers.values());
|
|
75
|
+
if (options?.sortByDisplayOrder) {
|
|
76
|
+
sortLayersByDisplayOrder(layers);
|
|
77
|
+
}
|
|
78
|
+
return layers;
|
|
79
|
+
}
|
|
80
|
+
getLayerById(id) {
|
|
81
|
+
return this.#layersById.get(id);
|
|
82
|
+
}
|
|
83
|
+
removeLayerById(id) {
|
|
84
|
+
const model = this.#layersById.get(id);
|
|
85
|
+
if (!model) {
|
|
86
|
+
LOG.isDebug() && LOG.debug(`Cannot remove layer '${id}': layer is unknown.`);
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
this.#removeLayer(model);
|
|
90
|
+
}
|
|
91
|
+
getLayerByRawInstance(layer) {
|
|
92
|
+
return this.#layersByOlLayer?.get(layer);
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Adds the given layer to the map and all relevant indices.
|
|
96
|
+
*/
|
|
97
|
+
#addLayer(model) {
|
|
98
|
+
this.#indexLayer(model);
|
|
99
|
+
const olLayer = model.olLayer;
|
|
100
|
+
if (model.isBaseLayer) {
|
|
101
|
+
olLayer.setZIndex(BASE_LAYER_Z);
|
|
102
|
+
if (!this.#activeBaseLayer && model.visible) {
|
|
103
|
+
this.#updateBaseLayer(model);
|
|
104
|
+
} else {
|
|
105
|
+
model.__setVisible(false);
|
|
106
|
+
}
|
|
107
|
+
} else {
|
|
108
|
+
olLayer.setZIndex(this.#nextIndex++);
|
|
109
|
+
model.__setVisible(model.visible);
|
|
110
|
+
}
|
|
111
|
+
this.#topLevelLayers.add(model);
|
|
112
|
+
this.#map.olMap.addLayer(olLayer);
|
|
113
|
+
this.emit("changed");
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Removes the given layer from the map and all relevant indices.
|
|
117
|
+
* The layer will be destroyed.
|
|
118
|
+
*/
|
|
119
|
+
#removeLayer(model) {
|
|
120
|
+
if (!this.#topLevelLayers.has(model)) {
|
|
121
|
+
LOG.warn(
|
|
122
|
+
`Cannot remove layer '${model.id}': only top level layers can be removed at this time.`
|
|
123
|
+
);
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
if (!(model instanceof AbstractLayer)) {
|
|
127
|
+
throw new Error(
|
|
128
|
+
`Internal error: expected top level layer to be an instance of AbstractLayer.`
|
|
129
|
+
);
|
|
130
|
+
}
|
|
131
|
+
this.#map.olMap.removeLayer(model.olLayer);
|
|
132
|
+
this.#topLevelLayers.delete(model);
|
|
133
|
+
this.#unIndexLayer(model);
|
|
134
|
+
if (this.#activeBaseLayer === model) {
|
|
135
|
+
this.#updateBaseLayer(this.getBaseLayers()[0]);
|
|
136
|
+
}
|
|
137
|
+
model.destroy();
|
|
138
|
+
this.emit("changed");
|
|
139
|
+
}
|
|
140
|
+
#updateBaseLayer(model) {
|
|
141
|
+
if (this.#activeBaseLayer === model) {
|
|
142
|
+
return;
|
|
143
|
+
}
|
|
144
|
+
if (LOG.isDebug()) {
|
|
145
|
+
const getId = (model2) => {
|
|
146
|
+
return model2 ? `'${model2.id}'` : void 0;
|
|
147
|
+
};
|
|
148
|
+
LOG.debug(
|
|
149
|
+
`Switching active base layer from ${getId(this.#activeBaseLayer)} to ${getId(
|
|
150
|
+
model
|
|
151
|
+
)}`
|
|
152
|
+
);
|
|
153
|
+
}
|
|
154
|
+
this.#activeBaseLayer?.__setVisible(false);
|
|
155
|
+
this.#activeBaseLayer = model;
|
|
156
|
+
this.#activeBaseLayer?.__setVisible(true);
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Index the layer and all its children.
|
|
160
|
+
*/
|
|
161
|
+
#indexLayer(model) {
|
|
162
|
+
const registrations = [];
|
|
163
|
+
const visit = (model2) => {
|
|
164
|
+
const id = model2.id;
|
|
165
|
+
const olLayer = "olLayer" in model2 ? model2.olLayer : void 0;
|
|
166
|
+
if (this.#layersById.has(id)) {
|
|
167
|
+
throw new Error(
|
|
168
|
+
`Layer id '${id}' is not unique. Either assign a unique id yourself or skip configuring 'id' for an automatically generated id.`
|
|
169
|
+
);
|
|
170
|
+
}
|
|
171
|
+
if (olLayer && this.#layersByOlLayer.has(olLayer)) {
|
|
172
|
+
throw new Error(`OlLayer has already been used in this or another layer.`);
|
|
173
|
+
}
|
|
174
|
+
this.#layersById.set(id, model2);
|
|
175
|
+
if (olLayer) {
|
|
176
|
+
this.#layersByOlLayer.set(olLayer, model2);
|
|
177
|
+
}
|
|
178
|
+
registrations.push([id, olLayer]);
|
|
179
|
+
for (const sublayer of model2.sublayers?.__getRawSublayers() ?? []) {
|
|
180
|
+
visit(sublayer);
|
|
181
|
+
}
|
|
182
|
+
};
|
|
183
|
+
try {
|
|
184
|
+
visit(model);
|
|
185
|
+
} catch (e) {
|
|
186
|
+
for (const [id, olLayer] of registrations) {
|
|
187
|
+
this.#layersById.delete(id);
|
|
188
|
+
if (olLayer) {
|
|
189
|
+
this.#layersByOlLayer.delete(olLayer);
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
throw e;
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Removes index entries for the given layer and all its sublayers.
|
|
197
|
+
*/
|
|
198
|
+
#unIndexLayer(model) {
|
|
199
|
+
const visit = (model2) => {
|
|
200
|
+
if ("olLayer" in model2) {
|
|
201
|
+
this.#layersByOlLayer.delete(model2.olLayer);
|
|
202
|
+
}
|
|
203
|
+
this.#layersById.delete(model2.id);
|
|
204
|
+
for (const sublayer of model2.sublayers?.__getRawSublayers() ?? []) {
|
|
205
|
+
visit(sublayer);
|
|
206
|
+
}
|
|
207
|
+
};
|
|
208
|
+
visit(model);
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
function sortLayersByDisplayOrder(layers) {
|
|
212
|
+
layers.sort((left, right) => {
|
|
213
|
+
const leftZ = left.olLayer.getZIndex() ?? 1;
|
|
214
|
+
const rightZ = right.olLayer.getZIndex() ?? 1;
|
|
215
|
+
if (leftZ !== rightZ) {
|
|
216
|
+
return leftZ - rightZ;
|
|
217
|
+
}
|
|
218
|
+
return left.id.localeCompare(right.id, "en");
|
|
219
|
+
});
|
|
220
|
+
}
|
|
221
|
+
function isLayerInstance(object) {
|
|
222
|
+
return object instanceof AbstractLayer;
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
export { LayerCollectionImpl, TOPMOST_LAYER_Z };
|
|
226
|
+
//# sourceMappingURL=LayerCollectionImpl.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LayerCollectionImpl.js","sources":["LayerCollectionImpl.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2023 Open Pioneer project (https://github.com/open-pioneer)\n// SPDX-License-Identifier: Apache-2.0\nimport { EventEmitter, createLogger } from \"@open-pioneer/core\";\nimport OlBaseLayer from \"ol/layer/Base\";\nimport { LayerCollection, LayerCollectionEvents, Layer, LayerRetrievalOptions } from \"../api\";\nimport { AbstractLayer } from \"./AbstractLayer\";\nimport { AbstractLayerBase } from \"./AbstractLayerBase\";\nimport { MapModelImpl } from \"./MapModelImpl\";\n\nconst LOG = createLogger(\"map:LayerCollection\");\n\nconst BASE_LAYER_Z = 0;\nconst OPERATION_LAYER_INITIAL_Z = 1;\n\n/**\n * Z index for layers that should always be rendered on top of all other layers.\n * Note that this is an internal, unstable property!\n *\n * @internal\n */\nexport const TOPMOST_LAYER_Z = 9999999;\n\nexport class LayerCollectionImpl\n extends EventEmitter<LayerCollectionEvents>\n implements LayerCollection\n{\n #map: MapModelImpl;\n\n /** Top level layers (base layers, operational layers). No sublayers. */\n #topLevelLayers = new Set<AbstractLayer>();\n\n /** Index of _all_ layer instances, including sublayers. */\n #layersById = new Map<string, AbstractLayerBase>();\n\n /** Reverse index of _all_ layers that have an associated OpenLayers layer. */\n #layersByOlLayer: WeakMap<OlBaseLayer, AbstractLayer> = new WeakMap();\n\n /** Currently active base layer. */\n #activeBaseLayer: AbstractLayer | undefined;\n\n /** next z-index for operational layer. currently just auto-increments. */\n #nextIndex = OPERATION_LAYER_INITIAL_Z;\n\n constructor(map: MapModelImpl) {\n super();\n this.#map = map;\n }\n\n destroy() {\n // Collection is destroyed together with the map, there is no need to clean up the olMap\n for (const layer of this.#layersById.values()) {\n layer.destroy();\n }\n this.#topLevelLayers.clear();\n this.#layersById.clear();\n this.#activeBaseLayer = undefined;\n }\n\n addLayer(layer: Layer): void {\n if (!isLayerInstance(layer)) {\n throw new Error(\n `Layer is not a valid layer instance. Use one of the classes provided by the map package instead.`\n );\n }\n\n layer.__attach(this.#map);\n this.#addLayer(layer);\n }\n\n getBaseLayers(): AbstractLayer[] {\n return this.getAllLayers().filter((layer) => layer.isBaseLayer);\n }\n\n getActiveBaseLayer(): AbstractLayer | undefined {\n return this.#activeBaseLayer;\n }\n\n activateBaseLayer(id: string | undefined): boolean {\n let newBaseLayer = undefined;\n if (id != null) {\n newBaseLayer = this.#layersById.get(id);\n if (!(newBaseLayer instanceof AbstractLayer)) {\n LOG.warn(`Cannot activate base layer '${id}: layer has an invalid type.'`);\n return false;\n }\n if (!newBaseLayer) {\n LOG.warn(`Cannot activate base layer '${id}': layer is unknown.`);\n return false;\n }\n if (!newBaseLayer.isBaseLayer) {\n LOG.warn(`Cannot activate base layer '${id}': layer is not a base layer.`);\n return false;\n }\n }\n\n if (newBaseLayer !== this.#activeBaseLayer) {\n this.#updateBaseLayer(newBaseLayer);\n this.emit(\"changed\");\n }\n return true;\n }\n\n getOperationalLayers(options?: LayerRetrievalOptions): AbstractLayer[] {\n return this.getAllLayers(options).filter((layer) => !layer.isBaseLayer);\n }\n\n getAllLayers(options?: LayerRetrievalOptions): AbstractLayer[] {\n const layers = Array.from(this.#topLevelLayers.values());\n if (options?.sortByDisplayOrder) {\n sortLayersByDisplayOrder(layers);\n }\n return layers;\n }\n\n getLayerById(id: string): AbstractLayerBase | undefined {\n return this.#layersById.get(id);\n }\n\n removeLayerById(id: string): void {\n const model = this.#layersById.get(id);\n if (!model) {\n LOG.isDebug() && LOG.debug(`Cannot remove layer '${id}': layer is unknown.`);\n return;\n }\n\n this.#removeLayer(model);\n }\n\n getLayerByRawInstance(layer: OlBaseLayer): Layer | undefined {\n return this.#layersByOlLayer?.get(layer);\n }\n\n /**\n * Adds the given layer to the map and all relevant indices.\n */\n #addLayer(model: AbstractLayer) {\n this.#indexLayer(model);\n\n const olLayer = model.olLayer;\n if (model.isBaseLayer) {\n olLayer.setZIndex(BASE_LAYER_Z);\n if (!this.#activeBaseLayer && model.visible) {\n this.#updateBaseLayer(model);\n } else {\n model.__setVisible(false);\n }\n } else {\n olLayer.setZIndex(this.#nextIndex++);\n model.__setVisible(model.visible);\n }\n\n this.#topLevelLayers.add(model);\n this.#map.olMap.addLayer(olLayer);\n this.emit(\"changed\");\n }\n\n /**\n * Removes the given layer from the map and all relevant indices.\n * The layer will be destroyed.\n */\n #removeLayer(model: AbstractLayer | AbstractLayerBase) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (!this.#topLevelLayers.has(model as any)) {\n LOG.warn(\n `Cannot remove layer '${model.id}': only top level layers can be removed at this time.`\n );\n return;\n }\n\n if (!(model instanceof AbstractLayer)) {\n throw new Error(\n `Internal error: expected top level layer to be an instance of AbstractLayer.`\n );\n }\n\n this.#map.olMap.removeLayer(model.olLayer);\n this.#topLevelLayers.delete(model);\n this.#unIndexLayer(model);\n if (this.#activeBaseLayer === model) {\n this.#updateBaseLayer(this.getBaseLayers()[0]);\n }\n model.destroy();\n this.emit(\"changed\");\n }\n\n #updateBaseLayer(model: AbstractLayer | undefined) {\n if (this.#activeBaseLayer === model) {\n return;\n }\n\n if (LOG.isDebug()) {\n const getId = (model: AbstractLayer | undefined) => {\n return model ? `'${model.id}'` : undefined;\n };\n\n LOG.debug(\n `Switching active base layer from ${getId(this.#activeBaseLayer)} to ${getId(\n model\n )}`\n );\n }\n this.#activeBaseLayer?.__setVisible(false);\n this.#activeBaseLayer = model;\n this.#activeBaseLayer?.__setVisible(true);\n }\n\n /**\n * Index the layer and all its children.\n */\n #indexLayer(model: AbstractLayer) {\n // layer id -> layer (or sublayer)\n const registrations: [string, OlBaseLayer | undefined][] = [];\n const visit = (model: AbstractLayer | AbstractLayerBase) => {\n const id = model.id;\n const olLayer = \"olLayer\" in model ? model.olLayer : undefined;\n if (this.#layersById.has(id)) {\n throw new Error(\n `Layer id '${id}' is not unique. Either assign a unique id yourself ` +\n `or skip configuring 'id' for an automatically generated id.`\n );\n }\n if (olLayer && this.#layersByOlLayer.has(olLayer)) {\n throw new Error(`OlLayer has already been used in this or another layer.`);\n }\n\n // Register this layer with the maps.\n this.#layersById.set(id, model);\n if (olLayer) {\n this.#layersByOlLayer.set(olLayer, model as AbstractLayer);\n }\n registrations.push([id, olLayer]);\n\n // Recurse into nested sublayers.\n for (const sublayer of model.sublayers?.__getRawSublayers() ?? []) {\n visit(sublayer);\n }\n };\n\n try {\n visit(model);\n } catch (e) {\n for (const [id, olLayer] of registrations) {\n this.#layersById.delete(id);\n if (olLayer) {\n this.#layersByOlLayer.delete(olLayer);\n }\n }\n throw e;\n }\n }\n\n /**\n * Removes index entries for the given layer and all its sublayers.\n */\n #unIndexLayer(model: AbstractLayer) {\n const visit = (model: AbstractLayer | AbstractLayerBase) => {\n if (\"olLayer\" in model) {\n this.#layersByOlLayer.delete(model.olLayer);\n }\n this.#layersById.delete(model.id);\n for (const sublayer of model.sublayers?.__getRawSublayers() ?? []) {\n visit(sublayer);\n }\n };\n visit(model);\n }\n}\n\nfunction sortLayersByDisplayOrder(layers: Layer[]) {\n layers.sort((left, right) => {\n // currently layers are added with increasing z-index (base layers: 0), so\n // ordering by z-index is automatically the correct display order.\n // we use the id as the tie breaker for equal z-indices.\n const leftZ = left.olLayer.getZIndex() ?? 1;\n const rightZ = right.olLayer.getZIndex() ?? 1;\n if (leftZ !== rightZ) {\n return leftZ - rightZ;\n }\n return left.id.localeCompare(right.id, \"en\");\n });\n}\n\nfunction isLayerInstance(object: unknown): object is AbstractLayer {\n return object instanceof AbstractLayer;\n}\n"],"names":["model"],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { EventEmitter } from "@open-pioneer/core";
|
|
2
|
+
import OlMap from "ol/Map";
|
|
3
|
+
import { ExtentConfig, MapModel, MapModelEvents } from "../api";
|
|
4
|
+
import { LayerCollectionImpl } from "./LayerCollectionImpl";
|
|
5
|
+
export declare class MapModelImpl extends EventEmitter<MapModelEvents> implements MapModel {
|
|
6
|
+
#private;
|
|
7
|
+
constructor(properties: {
|
|
8
|
+
id: string;
|
|
9
|
+
olMap: OlMap;
|
|
10
|
+
initialExtent: ExtentConfig | undefined;
|
|
11
|
+
});
|
|
12
|
+
destroy(): void;
|
|
13
|
+
get id(): string;
|
|
14
|
+
get olMap(): OlMap;
|
|
15
|
+
get layers(): LayerCollectionImpl;
|
|
16
|
+
get container(): HTMLElement | undefined;
|
|
17
|
+
get initialExtent(): ExtentConfig | undefined;
|
|
18
|
+
whenDisplayed(): Promise<void>;
|
|
19
|
+
}
|