@open-pioneer/map 1.4.0-dev.20260625074633 → 1.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/CHANGELOG.md +46 -22
- package/LayerFactory.d.ts +1 -1
- package/LayerFactory.js.map +1 -1
- package/MapRegistry.js +1 -1
- package/MapRegistry.js.map +1 -1
- package/README.md +8 -14
- package/_virtual/source-info.js +8 -6
- package/_virtual/source-info.js.map +1 -1
- package/layers/AbstractLayer.d.ts +36 -3
- package/layers/AbstractLayer.js +123 -79
- package/layers/AbstractLayer.js.map +1 -1
- package/layers/AbstractLayerBase.d.ts +2 -2
- package/layers/AbstractLayerBase.js.map +1 -1
- package/layers/GroupLayer.d.ts +2 -1
- package/layers/GroupLayer.js +4 -1
- package/layers/GroupLayer.js.map +1 -1
- package/layers/SimpleLayer.d.ts +1 -1
- package/layers/SimpleLayer.js +1 -1
- package/layers/SimpleLayer.js.map +1 -1
- package/layers/WMSLayer.js +59 -11
- package/layers/WMSLayer.js.map +1 -1
- package/layers/WMTSLayer.d.ts +1 -1
- package/layers/WMTSLayer.js +11 -5
- package/layers/WMTSLayer.js.map +1 -1
- package/layers/group/GroupLayerCollection.d.ts +2 -2
- package/layers/group/GroupLayerCollection.js +1 -1
- package/layers/group/GroupLayerCollection.js.map +1 -1
- package/layers/shared/SublayerBaseType.d.ts +9 -0
- package/layers/shared/SublayersCollection.js.map +1 -1
- package/layers/shared/getRecursiveLayers.d.ts +1 -1
- package/layers/shared/getRecursiveLayers.js +12 -5
- package/layers/shared/getRecursiveLayers.js.map +1 -1
- package/layers/shared/internals.d.ts +3 -2
- package/layers/shared/internals.js +2 -1
- package/layers/shared/internals.js.map +1 -1
- package/layers/unions.js.map +1 -1
- package/layers/wms/WMSSublayer.d.ts +14 -1
- package/layers/wms/WMSSublayer.js +29 -2
- package/layers/wms/WMSSublayer.js.map +1 -1
- package/layers/wms/getAttributions.js.map +1 -1
- package/layers/wms/getLegendUrl.js +1 -1
- package/layers/wms/getLegendUrl.js.map +1 -1
- package/layers/wmts/getAttributions.js.map +1 -1
- package/layers/wmts/getLegendUrl.js +1 -1
- package/layers/wmts/getLegendUrl.js.map +1 -1
- package/model/Highlights.js.map +1 -1
- package/model/LayerCollection.js.map +1 -1
- package/model/MapAttributions.js.map +1 -1
- package/model/MapModel.d.ts +5 -5
- package/model/MapModel.js +4 -4
- package/model/MapModel.js.map +1 -1
- package/model/Overlays.d.ts +2 -2
- package/model/Overlays.js +2 -2
- package/model/Overlays.js.map +1 -1
- package/model/createMapModel.js +23 -23
- package/model/createMapModel.js.map +1 -1
- package/model/getGeometries.js.map +1 -1
- package/package.json +10 -10
- package/ui/DefaultMapProvider.js.map +1 -1
- package/ui/MapAnchor.js.map +1 -1
- package/ui/MapContainer.js +2 -2
- package/ui/MapContainer.js.map +1 -1
- package/ui/MapContainerContext.js.map +1 -1
- package/ui/OverlaysRenderer.js.map +1 -1
- package/ui/computeMapAnchorStyles.js.map +1 -1
- package/ui/hooks/useMapModel.d.ts +7 -0
- package/ui/hooks/useMapModel.js +10 -1
- package/ui/hooks/useMapModel.js.map +1 -1
- package/ui/styles.css +0 -2
- package/ui/styles.css.map +1 -1
- package/utils/fetch.js.map +1 -1
- package/utils/geometry-utils.js.map +1 -1
- package/utils/ol-test-support.js.map +1 -1
- package/utils/projections.js.map +1 -1
- package/utils/sanitize.js.map +1 -1
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { MapModel } from "../../model/MapModel";
|
|
2
|
+
import { InternalConstructorTag } from "../../utils/InternalConstructorTag";
|
|
3
|
+
import type { LayerLoadInfo, LayerLoadState } from "../AbstractLayer";
|
|
2
4
|
import { AbstractLayerBase } from "../AbstractLayerBase";
|
|
3
5
|
import { ATTACH_TO_MAP, ATTACH_TO_PARENT, DETACH_FROM_MAP, SET_LEGEND } from "../shared/internals";
|
|
4
|
-
import { InternalConstructorTag } from "../../utils/InternalConstructorTag";
|
|
5
6
|
import { LayerBaseConfig } from "../shared/LayerConfig";
|
|
6
7
|
import { SublayerBaseType } from "../shared/SublayerBaseType";
|
|
7
8
|
import { SublayersCollection } from "../shared/SublayersCollection";
|
|
@@ -20,6 +21,7 @@ export interface WMSSublayerConfig extends LayerBaseConfig {
|
|
|
20
21
|
/** Configuration for nested sublayers. */
|
|
21
22
|
sublayers?: WMSSublayerConfig[];
|
|
22
23
|
}
|
|
24
|
+
export declare const SET_SUBLAYER_LOAD_INFO: unique symbol;
|
|
23
25
|
/**
|
|
24
26
|
* Represents a sublayer of a {@link WMSLayer}.
|
|
25
27
|
*
|
|
@@ -43,6 +45,11 @@ export declare class WMSSublayer extends AbstractLayerBase implements SublayerBa
|
|
|
43
45
|
get parent(): WMSSublayer | WMSLayer;
|
|
44
46
|
get parentLayer(): WMSLayer;
|
|
45
47
|
get legend(): string | undefined;
|
|
48
|
+
get loadState(): LayerLoadState;
|
|
49
|
+
/**
|
|
50
|
+
* The error (if any) that prevented this sublayer from loading.
|
|
51
|
+
*/
|
|
52
|
+
get loadError(): Error | undefined;
|
|
46
53
|
get visible(): boolean;
|
|
47
54
|
/**
|
|
48
55
|
* Called by the parent layer when it is attached to the map to attach all sublayers.
|
|
@@ -64,6 +71,12 @@ export declare class WMSSublayer extends AbstractLayerBase implements SublayerBa
|
|
|
64
71
|
* @internal
|
|
65
72
|
*/
|
|
66
73
|
[SET_LEGEND](legendUrl: string | undefined): void;
|
|
74
|
+
/**
|
|
75
|
+
* Called by the parent layer once the capabilities have been validated.
|
|
76
|
+
*
|
|
77
|
+
* @internal
|
|
78
|
+
*/
|
|
79
|
+
[SET_SUBLAYER_LOAD_INFO](loadInfo: LayerLoadInfo): void;
|
|
67
80
|
setVisible(newVisibility: boolean): void;
|
|
68
81
|
}
|
|
69
82
|
/**
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { reactive } from '@conterra/reactivity-core';
|
|
2
|
+
import { INTERNAL_CONSTRUCTOR_TAG, assertInternalConstructor } from '../../utils/InternalConstructorTag.js';
|
|
2
3
|
import { AbstractLayerBase } from '../AbstractLayerBase.js';
|
|
3
4
|
import { ATTACH_TO_MAP, GET_RAW_SUBLAYERS, DETACH_FROM_MAP, ATTACH_TO_PARENT, SET_LEGEND } from '../shared/internals.js';
|
|
4
|
-
import { INTERNAL_CONSTRUCTOR_TAG, assertInternalConstructor } from '../../utils/InternalConstructorTag.js';
|
|
5
5
|
import { SublayersCollection } from '../shared/SublayersCollection.js';
|
|
6
6
|
|
|
7
|
+
const SET_SUBLAYER_LOAD_INFO = /* @__PURE__ */ Symbol("SET_SUBLAYER_LOAD_INFO");
|
|
7
8
|
class WMSSublayer extends AbstractLayerBase {
|
|
8
9
|
#parent;
|
|
9
10
|
#parentLayer;
|
|
@@ -11,6 +12,7 @@ class WMSSublayer extends AbstractLayerBase {
|
|
|
11
12
|
#legend = reactive();
|
|
12
13
|
#sublayers;
|
|
13
14
|
#visible;
|
|
15
|
+
#loadInfo = reactive("loaded");
|
|
14
16
|
/**
|
|
15
17
|
* @internal
|
|
16
18
|
*/
|
|
@@ -58,6 +60,23 @@ class WMSSublayer extends AbstractLayerBase {
|
|
|
58
60
|
get legend() {
|
|
59
61
|
return this.#legend.value;
|
|
60
62
|
}
|
|
63
|
+
get loadState() {
|
|
64
|
+
const current = this.#loadInfo.value;
|
|
65
|
+
if (typeof current === "string") {
|
|
66
|
+
return current;
|
|
67
|
+
}
|
|
68
|
+
return current.kind;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* The error (if any) that prevented this sublayer from loading.
|
|
72
|
+
*/
|
|
73
|
+
get loadError() {
|
|
74
|
+
const current = this.#loadInfo.value;
|
|
75
|
+
if (typeof current === "object" && "kind" in current && current.kind === "error") {
|
|
76
|
+
return current.error;
|
|
77
|
+
}
|
|
78
|
+
return void 0;
|
|
79
|
+
}
|
|
61
80
|
get visible() {
|
|
62
81
|
return this.#visible.value;
|
|
63
82
|
}
|
|
@@ -109,6 +128,14 @@ class WMSSublayer extends AbstractLayerBase {
|
|
|
109
128
|
[SET_LEGEND](legendUrl) {
|
|
110
129
|
this.#legend.value = legendUrl;
|
|
111
130
|
}
|
|
131
|
+
/**
|
|
132
|
+
* Called by the parent layer once the capabilities have been validated.
|
|
133
|
+
*
|
|
134
|
+
* @internal
|
|
135
|
+
*/
|
|
136
|
+
[SET_SUBLAYER_LOAD_INFO](loadInfo) {
|
|
137
|
+
this.#loadInfo.value = loadInfo;
|
|
138
|
+
}
|
|
112
139
|
setVisible(newVisibility) {
|
|
113
140
|
this.#visible.value = newVisibility;
|
|
114
141
|
}
|
|
@@ -129,5 +156,5 @@ function constructSublayers(sublayerConfigs = []) {
|
|
|
129
156
|
}
|
|
130
157
|
}
|
|
131
158
|
|
|
132
|
-
export { constructSublayers };
|
|
159
|
+
export { SET_SUBLAYER_LOAD_INFO, constructSublayers };
|
|
133
160
|
//# sourceMappingURL=WMSSublayer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WMSSublayer.js","sources":["WMSSublayer.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2023-2025 Open Pioneer project (https://github.com/open-pioneer)\n// SPDX-License-Identifier: Apache-2.0\nimport { Reactive, reactive } from \"@conterra/reactivity-core\";\nimport { MapModel } from \"../../model/MapModel\";\nimport { AbstractLayerBase } from \"../AbstractLayerBase\";\nimport {\n ATTACH_TO_MAP,\n ATTACH_TO_PARENT,\n DETACH_FROM_MAP,\n GET_RAW_SUBLAYERS,\n SET_LEGEND\n} from \"../shared/internals\";\nimport {\n assertInternalConstructor,\n INTERNAL_CONSTRUCTOR_TAG,\n InternalConstructorTag\n} from \"../../utils/InternalConstructorTag\";\nimport { LayerBaseConfig } from \"../shared/LayerConfig\";\nimport { SublayerBaseType } from \"../shared/SublayerBaseType\";\nimport { SublayersCollection } from \"../shared/SublayersCollection\";\nimport { WMSLayer } from \"../WMSLayer\";\n\n/**\n * Configuration options to construct the sublayers of a {@link WMSLayer}.\n *\n * @group Layers\n */\nexport interface WMSSublayerConfig extends LayerBaseConfig {\n /**\n * The name of the WMS sublayer in the service's capabilities.\n * Not mandatory, e.g. for WMS group layer. See [WMS spec](https://www.ogc.org/standard/wms/).\n */\n name?: string;\n\n /** Configuration for nested sublayers. */\n sublayers?: WMSSublayerConfig[];\n}\n\n/**\n * Represents a sublayer of a {@link WMSLayer}.\n *\n * @group Layers\n */\nexport class WMSSublayer extends AbstractLayerBase implements SublayerBaseType {\n #parent: WMSSublayer | WMSLayer | undefined;\n #parentLayer: WMSLayer | undefined;\n #name: string | undefined;\n #legend = reactive<string | undefined>();\n #sublayers: SublayersCollection<WMSSublayer>;\n #visible: Reactive<boolean>;\n\n /**\n * @internal\n */\n constructor(config: WMSSublayerConfig, tag: InternalConstructorTag) {\n assertInternalConstructor(tag);\n\n super(config);\n this.#name = config.name;\n this.#visible = reactive(config.visible ?? true);\n this.#sublayers = new SublayersCollection(\n constructSublayers(config.sublayers),\n INTERNAL_CONSTRUCTOR_TAG\n );\n }\n\n override get type() {\n return \"wms-sublayer\" as const;\n }\n\n /**\n * The name of the WMS sublayer in the service's capabilities.\n *\n * Is optional as a WMS group layer in a WMS service does not need to have a name.\n */\n get name(): string | undefined {\n return this.#name;\n }\n\n override get layers(): undefined {\n return undefined;\n }\n\n override get sublayers(): SublayersCollection<WMSSublayer> {\n return this.#sublayers;\n }\n\n override get parent(): WMSSublayer | WMSLayer {\n const parent = this.#parent;\n if (!parent) {\n throw new Error(`WMS sublayer ${this.id} has not been attached to its parent yet.`);\n }\n return parent;\n }\n\n get parentLayer(): WMSLayer {\n const parentLayer = this.#parentLayer;\n if (!parentLayer) {\n throw new Error(`WMS sublayer ${this.id} has not been attached to its parent yet.`);\n }\n return parentLayer;\n }\n\n override get legend(): string | undefined {\n return this.#legend.value;\n }\n\n override get visible(): boolean {\n return this.#visible.value;\n }\n\n /**\n * Called by the parent layer when it is attached to the map to attach all sublayers.\n *\n * @internal\n */\n override [ATTACH_TO_MAP](map: MapModel): void {\n super[ATTACH_TO_MAP](map);\n\n // Recurse into nested sublayers\n for (const sublayer of this.sublayers[GET_RAW_SUBLAYERS]()) {\n sublayer[ATTACH_TO_MAP](map);\n }\n }\n\n /** @internal */\n override [DETACH_FROM_MAP](): void {\n super[DETACH_FROM_MAP]();\n for (const sublayer of this.#sublayers.getSublayers()) {\n sublayer[DETACH_FROM_MAP]();\n }\n }\n\n /**\n * Attaches this sublayer to its parent _layer_ and its immediate parent _layer or sublayer_.\n *\n * @internal\n */\n [ATTACH_TO_PARENT](parentLayer: WMSLayer, parent: WMSLayer | WMSSublayer): void {\n if (this.#parent) {\n throw new Error(\n `WMS sublayer '${this.id}' has already been attached to parent '${this.#parent.id}'`\n );\n }\n this.#parent = parent;\n\n if (this.#parentLayer) {\n throw new Error(\n `WMS sublayer '${this.id}' has already been attached to parent layer '${this.#parentLayer.id}'`\n );\n }\n this.#parentLayer = parentLayer;\n\n // Recurse into nested sublayers\n for (const sublayer of this.sublayers[GET_RAW_SUBLAYERS]()) {\n sublayer[ATTACH_TO_PARENT](parentLayer, this);\n }\n }\n\n /**\n * Called by the parent layer to update the legend on load.\n *\n * @internal\n */\n [SET_LEGEND](legendUrl: string | undefined) {\n this.#legend.value = legendUrl;\n }\n\n override setVisible(newVisibility: boolean): void {\n this.#visible.value = newVisibility;\n }\n}\n\n/**\n * Constructs a tree of wms sublayers from a nested configuration object.\n */\nexport function constructSublayers(sublayerConfigs: WMSSublayerConfig[] = []): WMSSublayer[] {\n const sublayers: WMSSublayer[] = [];\n try {\n for (const sublayerConfig of sublayerConfigs) {\n sublayers.push(new WMSSublayer(sublayerConfig, INTERNAL_CONSTRUCTOR_TAG));\n }\n return sublayers;\n } catch (e) {\n // Ensure previous sublayers are destroyed if a single constructor throws\n while (sublayers.length) {\n const layer = sublayers.pop();\n layer?.destroy();\n }\n throw new Error(\"Failed to construct sublayers.\", { cause: e });\n }\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"WMSSublayer.js","sources":["WMSSublayer.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2023-2025 Open Pioneer project (https://github.com/open-pioneer)\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Reactive, reactive } from \"@conterra/reactivity-core\";\nimport { MapModel } from \"../../model/MapModel\";\nimport {\n assertInternalConstructor,\n INTERNAL_CONSTRUCTOR_TAG,\n InternalConstructorTag\n} from \"../../utils/InternalConstructorTag\";\nimport type { LayerLoadInfo, LayerLoadState } from \"../AbstractLayer\";\nimport { AbstractLayerBase } from \"../AbstractLayerBase\";\nimport {\n ATTACH_TO_MAP,\n ATTACH_TO_PARENT,\n DETACH_FROM_MAP,\n GET_RAW_SUBLAYERS,\n SET_LEGEND\n} from \"../shared/internals\";\nimport { LayerBaseConfig } from \"../shared/LayerConfig\";\nimport { SublayerBaseType } from \"../shared/SublayerBaseType\";\nimport { SublayersCollection } from \"../shared/SublayersCollection\";\nimport { WMSLayer } from \"../WMSLayer\";\n\n/**\n * Configuration options to construct the sublayers of a {@link WMSLayer}.\n *\n * @group Layers\n */\nexport interface WMSSublayerConfig extends LayerBaseConfig {\n /**\n * The name of the WMS sublayer in the service's capabilities.\n * Not mandatory, e.g. for WMS group layer. See [WMS spec](https://www.ogc.org/standard/wms/).\n */\n name?: string;\n\n /** Configuration for nested sublayers. */\n sublayers?: WMSSublayerConfig[];\n}\n\nexport const SET_SUBLAYER_LOAD_INFO = Symbol(\"SET_SUBLAYER_LOAD_INFO\");\n\n/**\n * Represents a sublayer of a {@link WMSLayer}.\n *\n * @group Layers\n */\nexport class WMSSublayer extends AbstractLayerBase implements SublayerBaseType {\n #parent: WMSSublayer | WMSLayer | undefined;\n #parentLayer: WMSLayer | undefined;\n #name: string | undefined;\n #legend = reactive<string>();\n #sublayers: SublayersCollection<WMSSublayer>;\n #visible: Reactive<boolean>;\n #loadInfo = reactive<LayerLoadInfo>(\"loaded\");\n\n /**\n * @internal\n */\n constructor(config: WMSSublayerConfig, tag: InternalConstructorTag) {\n assertInternalConstructor(tag);\n\n super(config);\n this.#name = config.name;\n this.#visible = reactive(config.visible ?? true);\n this.#sublayers = new SublayersCollection(\n constructSublayers(config.sublayers),\n INTERNAL_CONSTRUCTOR_TAG\n );\n }\n\n override get type() {\n return \"wms-sublayer\" as const;\n }\n\n /**\n * The name of the WMS sublayer in the service's capabilities.\n *\n * Is optional as a WMS group layer in a WMS service does not need to have a name.\n */\n get name(): string | undefined {\n return this.#name;\n }\n\n override get layers(): undefined {\n return undefined;\n }\n\n override get sublayers(): SublayersCollection<WMSSublayer> {\n return this.#sublayers;\n }\n\n override get parent(): WMSSublayer | WMSLayer {\n const parent = this.#parent;\n if (!parent) {\n throw new Error(`WMS sublayer ${this.id} has not been attached to its parent yet.`);\n }\n return parent;\n }\n\n get parentLayer(): WMSLayer {\n const parentLayer = this.#parentLayer;\n if (!parentLayer) {\n throw new Error(`WMS sublayer ${this.id} has not been attached to its parent yet.`);\n }\n return parentLayer;\n }\n\n override get legend(): string | undefined {\n return this.#legend.value;\n }\n\n get loadState(): LayerLoadState {\n const current = this.#loadInfo.value;\n if (typeof current === \"string\") {\n return current;\n }\n return current.kind;\n }\n\n /**\n * The error (if any) that prevented this sublayer from loading.\n */\n get loadError(): Error | undefined {\n const current = this.#loadInfo.value;\n if (typeof current === \"object\" && \"kind\" in current && current.kind === \"error\") {\n return current.error;\n }\n return undefined;\n }\n\n override get visible(): boolean {\n return this.#visible.value;\n }\n\n /**\n * Called by the parent layer when it is attached to the map to attach all sublayers.\n *\n * @internal\n */\n override [ATTACH_TO_MAP](map: MapModel): void {\n super[ATTACH_TO_MAP](map);\n\n // Recurse into nested sublayers\n for (const sublayer of this.sublayers[GET_RAW_SUBLAYERS]()) {\n sublayer[ATTACH_TO_MAP](map);\n }\n }\n\n /** @internal */\n override [DETACH_FROM_MAP](): void {\n super[DETACH_FROM_MAP]();\n for (const sublayer of this.#sublayers.getSublayers()) {\n sublayer[DETACH_FROM_MAP]();\n }\n }\n\n /**\n * Attaches this sublayer to its parent _layer_ and its immediate parent _layer or sublayer_.\n *\n * @internal\n */\n [ATTACH_TO_PARENT](parentLayer: WMSLayer, parent: WMSLayer | WMSSublayer): void {\n if (this.#parent) {\n throw new Error(\n `WMS sublayer '${this.id}' has already been attached to parent '${this.#parent.id}'`\n );\n }\n this.#parent = parent;\n\n if (this.#parentLayer) {\n throw new Error(\n `WMS sublayer '${this.id}' has already been attached to parent layer '${this.#parentLayer.id}'`\n );\n }\n this.#parentLayer = parentLayer;\n\n // Recurse into nested sublayers\n for (const sublayer of this.sublayers[GET_RAW_SUBLAYERS]()) {\n sublayer[ATTACH_TO_PARENT](parentLayer, this);\n }\n }\n\n /**\n * Called by the parent layer to update the legend on load.\n *\n * @internal\n */\n [SET_LEGEND](legendUrl: string | undefined) {\n this.#legend.value = legendUrl;\n }\n\n /**\n * Called by the parent layer once the capabilities have been validated.\n *\n * @internal\n */\n [SET_SUBLAYER_LOAD_INFO](loadInfo: LayerLoadInfo): void {\n this.#loadInfo.value = loadInfo;\n }\n\n override setVisible(newVisibility: boolean): void {\n this.#visible.value = newVisibility;\n }\n}\n\n/**\n * Constructs a tree of wms sublayers from a nested configuration object.\n */\nexport function constructSublayers(sublayerConfigs: WMSSublayerConfig[] = []): WMSSublayer[] {\n const sublayers: WMSSublayer[] = [];\n try {\n for (const sublayerConfig of sublayerConfigs) {\n sublayers.push(new WMSSublayer(sublayerConfig, INTERNAL_CONSTRUCTOR_TAG));\n }\n return sublayers;\n } catch (e) {\n // Ensure previous sublayers are destroyed if a single constructor throws\n while (sublayers.length) {\n const layer = sublayers.pop();\n layer?.destroy();\n }\n throw new Error(\"Failed to construct sublayers.\", { cause: e });\n }\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getAttributions.js","sources":["getAttributions.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2023-2025 Open Pioneer project (https://github.com/open-pioneer)\n// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Returns the attribution derived from the WMS service metadata (if any).\n *\n * @param capabilities Parsed service capabilities\n */\n/*
|
|
1
|
+
{"version":3,"file":"getAttributions.js","sources":["getAttributions.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2023-2025 Open Pioneer project (https://github.com/open-pioneer)\n// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Returns the attribution derived from the WMS service metadata (if any).\n *\n * @param capabilities Parsed service capabilities\n */\n/* oxlint-disable @typescript-eslint/no-explicit-any */\nexport function getAttributions(capabilities: Record<string, any>): string | undefined {\n const service = capabilities?.Service;\n if (!service) {\n return undefined;\n }\n\n const constraints = service.AccessConstraints;\n if (isSet(constraints)) {\n return constraints;\n }\n\n const fees = service.Fees;\n if (isSet(fees)) {\n return fees;\n }\n\n return undefined;\n}\n\nconst NONE = /none/i;\n\nfunction isSet(value: any): value is string {\n return typeof value === \"string\" && !!value && !NONE.test(value);\n}\n\n/* eslint-enable @typescript-eslint/no-explicit-any */\n"],"names":[],"mappings":"AASO,SAAS,gBAAgB,YAAA,EAAuD;AACnF,EAAA,MAAM,UAAU,YAAA,EAAc,OAAA;AAC9B,EAAA,IAAI,CAAC,OAAA,EAAS;AACV,IAAA,OAAO,MAAA;AAAA,EACX;AAEA,EAAA,MAAM,cAAc,OAAA,CAAQ,iBAAA;AAC5B,EAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACpB,IAAA,OAAO,WAAA;AAAA,EACX;AAEA,EAAA,MAAM,OAAO,OAAA,CAAQ,IAAA;AACrB,EAAA,IAAI,KAAA,CAAM,IAAI,CAAA,EAAG;AACb,IAAA,OAAO,IAAA;AAAA,EACX;AAEA,EAAA,OAAO,MAAA;AACX;AAEA,MAAM,IAAA,GAAO,OAAA;AAEb,SAAS,MAAM,KAAA,EAA6B;AACxC,EAAA,OAAO,OAAO,UAAU,QAAA,IAAY,CAAC,CAAC,KAAA,IAAS,CAAC,IAAA,CAAK,IAAA,CAAK,KAAK,CAAA;AACnE;;;;"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { createLogger } from '@open-pioneer/core';
|
|
2
|
-
import { sourceId$
|
|
2
|
+
import { sourceId$6 as sourceId } from '../../_virtual/source-info.js';
|
|
3
3
|
|
|
4
4
|
const LOG = createLogger(sourceId);
|
|
5
5
|
function getLegendUrl(capabilities, layerName) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getLegendUrl.js","sources":["getLegendUrl.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2023-2025 Open Pioneer project (https://github.com/open-pioneer)\n// SPDX-License-Identifier: Apache-2.0\nimport { createLogger } from \"@open-pioneer/core\";\nimport { sourceId } from \"open-pioneer:source-info\";\n\nconst LOG = createLogger(sourceId);\n\n/**\n * Extracts the legend url from the service capabilities.\n **/\nexport function getLegendUrl(\n //
|
|
1
|
+
{"version":3,"file":"getLegendUrl.js","sources":["getLegendUrl.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2023-2025 Open Pioneer project (https://github.com/open-pioneer)\n// SPDX-License-Identifier: Apache-2.0\n\nimport { createLogger } from \"@open-pioneer/core\";\nimport { sourceId } from \"open-pioneer:source-info\";\n\nconst LOG = createLogger(sourceId);\n\n/**\n * Extracts the legend url from the service capabilities.\n **/\nexport function getLegendUrl(\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n capabilities: Record<string, any>,\n layerName: string\n): string | undefined {\n const capabilitiesContent = capabilities?.Capability;\n const rootLayerCapabilities = capabilitiesContent?.Layer;\n let url: string | undefined = undefined;\n\n /** Recurse search for the current layer within the parsed capabilities service*/\n //oxlint-disable-next-line @typescript-eslint/no-explicit-any\n const searchNestedLayer = (layer: Record<string, any>[]) => {\n for (const currentLayer of layer) {\n // spec. if, a layer has a <Name>, then it is a map layer\n if (currentLayer?.Name === layerName) {\n const activeLayer = currentLayer;\n const styles = activeLayer.Style;\n if (!styles || !styles.length) {\n LOG.debug(\"No style in WMS layer capabilities - giving up.\");\n return;\n }\n // by parsing of the service capabilities, every child inherits the parent's legend\n // therefore, extract the legendURL from the first style object in the array (its own legend)\n const activeStyle = styles[0];\n url = activeStyle.LegendURL?.[0]?.OnlineResource;\n } else if (currentLayer.Layer) {\n searchNestedLayer(currentLayer.Layer);\n }\n }\n };\n if (rootLayerCapabilities) {\n searchNestedLayer(rootLayerCapabilities.Layer);\n }\n return url;\n}\n"],"names":[],"mappings":";;;AAMA,MAAM,GAAA,GAAM,aAAa,QAAQ,CAAA;AAK1B,SAAS,YAAA,CAEZ,cACA,SAAA,EACkB;AAClB,EAAA,MAAM,sBAAsB,YAAA,EAAc,UAAA;AAC1C,EAAA,MAAM,wBAAwB,mBAAA,EAAqB,KAAA;AACnD,EAAA,IAAI,GAAA,GAA0B,MAAA;AAI9B,EAAA,MAAM,iBAAA,GAAoB,CAAC,KAAA,KAAiC;AACxD,IAAA,KAAA,MAAW,gBAAgB,KAAA,EAAO;AAE9B,MAAA,IAAI,YAAA,EAAc,SAAS,SAAA,EAAW;AAClC,QAAA,MAAM,WAAA,GAAc,YAAA;AACpB,QAAA,MAAM,SAAS,WAAA,CAAY,KAAA;AAC3B,QAAA,IAAI,CAAC,MAAA,IAAU,CAAC,MAAA,CAAO,MAAA,EAAQ;AAC3B,UAAA,GAAA,CAAI,MAAM,iDAAiD,CAAA;AAC3D,UAAA;AAAA,QACJ;AAGA,QAAA,MAAM,WAAA,GAAc,OAAO,CAAC,CAAA;AAC5B,QAAA,GAAA,GAAM,WAAA,CAAY,SAAA,GAAY,CAAC,CAAA,EAAG,cAAA;AAAA,MACtC,CAAA,MAAA,IAAW,aAAa,KAAA,EAAO;AAC3B,QAAA,iBAAA,CAAkB,aAAa,KAAK,CAAA;AAAA,MACxC;AAAA,IACJ;AAAA,EACJ,CAAA;AACA,EAAA,IAAI,qBAAA,EAAuB;AACvB,IAAA,iBAAA,CAAkB,sBAAsB,KAAK,CAAA;AAAA,EACjD;AACA,EAAA,OAAO,GAAA;AACX;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getAttributions.js","sources":["getAttributions.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2023-2025 Open Pioneer project (https://github.com/open-pioneer)\n// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Returns the attribution derived from the WMTS service metadata (if any).\n *\n * @param capabilities Parsed service capabilities\n */\n/*
|
|
1
|
+
{"version":3,"file":"getAttributions.js","sources":["getAttributions.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2023-2025 Open Pioneer project (https://github.com/open-pioneer)\n// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Returns the attribution derived from the WMTS service metadata (if any).\n *\n * @param capabilities Parsed service capabilities\n */\n/* oxlint-disable @typescript-eslint/no-explicit-any */\nexport function getAttributions(capabilities: Record<string, any>): string | undefined {\n const service = capabilities?.ServiceIdentification;\n if (!service) {\n return undefined;\n }\n\n const constraints = service.AccessConstraints;\n if (isSet(constraints)) {\n return constraints;\n }\n\n const fees = service.Fees;\n if (isSet(fees)) {\n return fees;\n }\n\n return undefined;\n}\n\nconst NONE = /none/i;\n\nfunction isSet(value: any): value is string {\n return typeof value === \"string\" && !!value && !NONE.test(value);\n}\n\n/* eslint-enable @typescript-eslint/no-explicit-any */\n"],"names":[],"mappings":"AASO,SAAS,gBAAgB,YAAA,EAAuD;AACnF,EAAA,MAAM,UAAU,YAAA,EAAc,qBAAA;AAC9B,EAAA,IAAI,CAAC,OAAA,EAAS;AACV,IAAA,OAAO,MAAA;AAAA,EACX;AAEA,EAAA,MAAM,cAAc,OAAA,CAAQ,iBAAA;AAC5B,EAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACpB,IAAA,OAAO,WAAA;AAAA,EACX;AAEA,EAAA,MAAM,OAAO,OAAA,CAAQ,IAAA;AACrB,EAAA,IAAI,KAAA,CAAM,IAAI,CAAA,EAAG;AACb,IAAA,OAAO,IAAA;AAAA,EACX;AAEA,EAAA,OAAO,MAAA;AACX;AAEA,MAAM,IAAA,GAAO,OAAA;AAEb,SAAS,MAAM,KAAA,EAA6B;AACxC,EAAA,OAAO,OAAO,UAAU,QAAA,IAAY,CAAC,CAAC,KAAA,IAAS,CAAC,IAAA,CAAK,IAAA,CAAK,KAAK,CAAA;AACnE;;;;"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { createLogger } from '@open-pioneer/core';
|
|
2
|
-
import { sourceId$
|
|
2
|
+
import { sourceId$8 as sourceId } from '../../_virtual/source-info.js';
|
|
3
3
|
|
|
4
4
|
const LOG = createLogger(sourceId);
|
|
5
5
|
function getLegendUrl(capabilities, activeLayerId, activeStyleId) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getLegendUrl.js","sources":["getLegendUrl.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2023-2025 Open Pioneer project (https://github.com/open-pioneer)\n// SPDX-License-Identifier: Apache-2.0\nimport { createLogger } from \"@open-pioneer/core\";\nimport { sourceId } from \"open-pioneer:source-info\";\n\nconst LOG = createLogger(sourceId);\n\n/*
|
|
1
|
+
{"version":3,"file":"getLegendUrl.js","sources":["getLegendUrl.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2023-2025 Open Pioneer project (https://github.com/open-pioneer)\n// SPDX-License-Identifier: Apache-2.0\n\nimport { createLogger } from \"@open-pioneer/core\";\nimport { sourceId } from \"open-pioneer:source-info\";\n\nconst LOG = createLogger(sourceId);\n\n/* oxlint-disable @typescript-eslint/no-explicit-any */\nexport function getLegendUrl(\n capabilities: Record<string, any>,\n activeLayerId: string | undefined,\n activeStyleId: string | undefined\n): string | undefined {\n const content = capabilities?.Contents;\n const layers = content?.Layer;\n\n let activeLayer = layers?.find((layer: any) => layer?.Identifier === activeLayerId);\n if (!activeLayer) {\n LOG.debug(\"Failed to find the active layer in WMTS layer capabilities.\");\n activeLayer = layers?.[0];\n if (!activeLayer) {\n LOG.debug(\"No layer in WMTS capabilities - giving up.\");\n return undefined;\n }\n }\n\n const styles = activeLayer.Style;\n let activeStyle = styles?.find((style: any) => style?.Identifier === activeStyleId);\n if (!activeStyle) {\n LOG.debug(\"Failed to find active style in WMTS layer.\");\n activeStyle = styles?.[0];\n if (!activeStyle) {\n LOG.debug(\"No style in WMTS layer capabilities - giving up.\");\n return undefined;\n }\n }\n\n const legendUrl = activeStyle.LegendURL?.[0]?.href;\n return legendUrl as string | undefined;\n}\n/* eslint-enable @typescript-eslint/no-explicit-any */\n"],"names":[],"mappings":";;;AAMA,MAAM,GAAA,GAAM,aAAa,QAAQ,CAAA;AAG1B,SAAS,YAAA,CACZ,YAAA,EACA,aAAA,EACA,aAAA,EACkB;AAClB,EAAA,MAAM,UAAU,YAAA,EAAc,QAAA;AAC9B,EAAA,MAAM,SAAS,OAAA,EAAS,KAAA;AAExB,EAAA,IAAI,cAAc,MAAA,EAAQ,IAAA,CAAK,CAAC,KAAA,KAAe,KAAA,EAAO,eAAe,aAAa,CAAA;AAClF,EAAA,IAAI,CAAC,WAAA,EAAa;AACd,IAAA,GAAA,CAAI,MAAM,6DAA6D,CAAA;AACvE,IAAA,WAAA,GAAc,SAAS,CAAC,CAAA;AACxB,IAAA,IAAI,CAAC,WAAA,EAAa;AACd,MAAA,GAAA,CAAI,MAAM,4CAA4C,CAAA;AACtD,MAAA,OAAO,MAAA;AAAA,IACX;AAAA,EACJ;AAEA,EAAA,MAAM,SAAS,WAAA,CAAY,KAAA;AAC3B,EAAA,IAAI,cAAc,MAAA,EAAQ,IAAA,CAAK,CAAC,KAAA,KAAe,KAAA,EAAO,eAAe,aAAa,CAAA;AAClF,EAAA,IAAI,CAAC,WAAA,EAAa;AACd,IAAA,GAAA,CAAI,MAAM,4CAA4C,CAAA;AACtD,IAAA,WAAA,GAAc,SAAS,CAAC,CAAA;AACxB,IAAA,IAAI,CAAC,WAAA,EAAa;AACd,MAAA,GAAA,CAAI,MAAM,kDAAkD,CAAA;AAC5D,MAAA,OAAO,MAAA;AAAA,IACX;AAAA,EACJ;AAEA,EAAA,MAAM,SAAA,GAAY,WAAA,CAAY,SAAA,GAAY,CAAC,CAAA,EAAG,IAAA;AAC9C,EAAA,OAAO,SAAA;AACX;;;;"}
|
package/model/Highlights.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Highlights.js","sources":["Highlights.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2023-2025 Open Pioneer project (https://github.com/open-pioneer)\n// SPDX-License-Identifier: Apache-2.0\nimport { Resource } from \"@open-pioneer/core\";\nimport { Feature } from \"ol\";\nimport { FeatureLike } from \"ol/Feature\";\nimport { Geometry } from \"ol/geom\";\nimport { Type } from \"ol/geom/Geometry\";\nimport VectorLayer from \"ol/layer/Vector\";\nimport VectorSource from \"ol/source/Vector\";\nimport { Fill, Icon, Stroke, Style } from \"ol/style\";\nimport { StyleLike, toFunction as toStyleFunction } from \"ol/style/Style\";\nimport mapMarkerUrl from \"../assets/images/mapMarker.png?url\";\nimport { SimpleLayer } from \"../layers/SimpleLayer\";\nimport { LayerDependencies } from \"../layers/shared/internals\";\nimport { INTERNAL_CONSTRUCTOR_TAG } from \"../utils/InternalConstructorTag\";\nimport { DisplayTarget, MapModel, ZoomOptions } from \"./MapModel\";\nimport { getGeometries } from \"./getGeometries\";\n\nexport const DESTROY_HIGHLIGHTS = Symbol(\"DESTROY_HIGHLIGHTS\");\nexport const GET_HIGHLIGHT_LAYER = Symbol(\"GET_HIGHLIGHT_LAYER\");\n\n/**\n * Style options supported when creating a new {@link Highlight}.\n *\n * @group Map Model\n **/\nexport interface HighlightOptions {\n /**\n * Optional styles to override the default styles.\n */\n highlightStyle?: HighlightStyle;\n}\n\n/**\n * Options supported by the map model's {@link MapModel.highlightAndZoom | highlightAndZoom} method.\n *\n * @group Map Model\n **/\nexport interface HighlightZoomOptions extends HighlightOptions, ZoomOptions {}\n\n/**\n * Custom styles when creating a new {@link Highlight}.\n *\n * @group Map Model\n */\nexport type HighlightStyle = {\n Point?: StyleLike;\n LineString?: StyleLike;\n Polygon?: StyleLike;\n MultiPolygon?: StyleLike;\n MultiPoint?: StyleLike;\n MultiLineString?: StyleLike;\n};\n\n/**\n * Represents the additional graphical representations of objects.\n *\n * See also {@link MapModel.highlight}.\n *\n * @group Map Model\n */\nexport interface Highlight extends Resource {\n readonly isActive: boolean;\n}\n\ntype HighlightStyleType = keyof HighlightStyle;\n\n/**\n * Manages highlights on the map.\n *\n * @group Map Model\n */\nexport class Highlights {\n #map: MapModel;\n\n #olLayer: VectorLayer<VectorSource, Feature>;\n #layer: SimpleLayer;\n #olSource: VectorSource<Feature<Geometry>>;\n #activeHighlights: Set<Highlight>;\n\n constructor(map: MapModel, layerDeps: LayerDependencies) {\n this.#map = map;\n this.#olSource = new VectorSource({\n features: undefined\n });\n this.#olLayer = new VectorLayer({\n className: \"highlight-layer\",\n source: this.#olSource,\n style: function (feature, resolution) {\n return resolveStyle(feature, resolution);\n }\n });\n this.#layer = new SimpleLayer(\n {\n title: \"highlight-layer\",\n internal: true,\n olLayer: this.#olLayer\n },\n layerDeps,\n INTERNAL_CONSTRUCTOR_TAG\n );\n map.layers.addLayer(this.#layer, { at: \"topmost\" });\n\n this.#activeHighlights = new Set();\n }\n\n [DESTROY_HIGHLIGHTS]() {\n this.clear();\n }\n\n /**\n * Creates a highlight at the given targets.\n *\n * A highlight is a temporary graphic on the map that calls attention to a point or an area.\n *\n * Call `destroy()` on the returned highlight object to remove the highlight.\n */\n add(displayTargets: DisplayTarget[], options?: HighlightOptions | undefined): Highlight {\n const geometries = getGeometries(displayTargets);\n if (geometries.length === 0) {\n return {\n get isActive() {\n return false;\n },\n destroy() {}\n };\n }\n\n const features = geometries.map((geometry) => {\n const type = geometry.getType();\n const feature = new Feature({\n type: type,\n geometry: geometry\n });\n feature.setStyle(getOwnStyle(type, options?.highlightStyle));\n return feature;\n });\n\n const source = this.#olSource;\n const highlights = this.#activeHighlights;\n const highlight: Highlight = {\n get isActive() {\n return highlights.has(highlight);\n },\n destroy() {\n if (!this.isActive) {\n return;\n }\n\n for (const feature of features) {\n source.removeFeature(feature);\n }\n highlights.delete(highlight);\n }\n };\n\n source.addFeatures(features);\n this.#activeHighlights.add(highlight);\n return highlight;\n }\n\n /**\n * Creates a highlight and zooms to the given targets.\n *\n * See also {@link add} and {@link MapModel.zoom}.\n */\n addAndZoom(\n displayTarget: DisplayTarget[],\n options?: HighlightZoomOptions | undefined\n ): Highlight {\n const result = this.add(displayTarget, options);\n this.#map.zoom(displayTarget, options);\n return result;\n }\n\n /**\n * This method destroys all active Highlights.\n */\n clear() {\n for (const highlight of this.#activeHighlights) {\n highlight.destroy();\n }\n }\n\n /**\n * Returns the layer used for highlights.\n */\n [GET_HIGHLIGHT_LAYER]() {\n return this.#olLayer;\n }\n}\n\n/**\n * Returns the appropriate style from the user's highlightStyle or falls back to the default style\n */\nfunction resolveStyle(feature: FeatureLike, resolution: number) {\n const type: keyof typeof defaultHighlightStyle = feature.get(\"type\");\n const style = toStyleFunction(getDefaultStyle(type));\n return style(feature, resolution);\n}\n\n/**\n * This method creates styling for a highlight based on the optional style information or the default style\n */\nfunction getOwnStyle(type: Type, highlightStyle: HighlightStyle | undefined) {\n if (highlightStyle && type in highlightStyle) {\n const supportedType = type as HighlightStyleType;\n const ownStyle = highlightStyle[supportedType];\n return ownStyle ? ownStyle : getDefaultStyle(type);\n } else {\n return getDefaultStyle(type);\n }\n}\n\n/**\n * This returns default styling for a highlight\n */\nfunction getDefaultStyle(type: Type) {\n if (type in defaultHighlightStyle) {\n const supportedType = type as HighlightStyleType;\n return defaultHighlightStyle[supportedType];\n } else {\n return defaultHighlightStyle.Polygon;\n }\n}\n\n/**\n * Default styling for highlights\n */\nconst defaultHighlightStyle = {\n \"Point\": new Style({\n image: new Icon({\n anchor: [0.5, 1],\n src: mapMarkerUrl\n })\n }),\n \"MultiPoint\": new Style({\n image: new Icon({\n anchor: [0.5, 1],\n src: mapMarkerUrl\n })\n }),\n \"LineString\": [\n new Style({\n stroke: new Stroke({\n color: \"#fff\",\n width: 5\n })\n }),\n new Style({\n stroke: new Stroke({\n color: \"#00ffff\",\n width: 3\n })\n })\n ],\n \"MultiLineString\": [\n new Style({\n stroke: new Stroke({\n color: \"#fff\",\n width: 5\n })\n }),\n new Style({\n stroke: new Stroke({\n color: \"#00ffff\",\n width: 3\n })\n })\n ],\n \"Polygon\": [\n new Style({\n stroke: new Stroke({\n color: \"#fff\",\n width: 5\n })\n }),\n new Style({\n stroke: new Stroke({\n color: \"#00ffff\",\n width: 3\n }),\n fill: new Fill({\n color: \"rgba(224,255,255,0.35)\"\n })\n })\n ],\n \"MultiPolygon\": [\n new Style({\n stroke: new Stroke({\n color: \"#fff\",\n width: 5\n })\n }),\n new Style({\n stroke: new Stroke({\n color: \"#00ffff\",\n width: 3\n }),\n fill: new Fill({\n color: \"rgba(224,255,255,0.35)\"\n })\n })\n ]\n};\n"],"names":["toStyleFunction"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Highlights.js","sources":["Highlights.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2023-2025 Open Pioneer project (https://github.com/open-pioneer)\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Resource } from \"@open-pioneer/core\";\nimport { Feature } from \"ol\";\nimport { FeatureLike } from \"ol/Feature\";\nimport { Geometry } from \"ol/geom\";\nimport { Type } from \"ol/geom/Geometry\";\nimport VectorLayer from \"ol/layer/Vector\";\nimport VectorSource from \"ol/source/Vector\";\nimport { Fill, Icon, Stroke, Style } from \"ol/style\";\nimport { StyleLike, toFunction as toStyleFunction } from \"ol/style/Style\";\nimport mapMarkerUrl from \"../assets/images/mapMarker.png?url\";\nimport { LayerDependencies } from \"../layers/shared/internals\";\nimport { SimpleLayer } from \"../layers/SimpleLayer\";\nimport { INTERNAL_CONSTRUCTOR_TAG } from \"../utils/InternalConstructorTag\";\nimport { getGeometries } from \"./getGeometries\";\nimport { DisplayTarget, MapModel, ZoomOptions } from \"./MapModel\";\n\nexport const DESTROY_HIGHLIGHTS = Symbol(\"DESTROY_HIGHLIGHTS\");\nexport const GET_HIGHLIGHT_LAYER = Symbol(\"GET_HIGHLIGHT_LAYER\");\n\n/**\n * Style options supported when creating a new {@link Highlight}.\n *\n * @group Map Model\n **/\nexport interface HighlightOptions {\n /**\n * Optional styles to override the default styles.\n */\n highlightStyle?: HighlightStyle;\n}\n\n/**\n * Options supported by the map model's {@link MapModel.highlightAndZoom | highlightAndZoom} method.\n *\n * @group Map Model\n **/\nexport interface HighlightZoomOptions extends HighlightOptions, ZoomOptions {}\n\n/**\n * Custom styles when creating a new {@link Highlight}.\n *\n * @group Map Model\n */\nexport type HighlightStyle = {\n Point?: StyleLike;\n LineString?: StyleLike;\n Polygon?: StyleLike;\n MultiPolygon?: StyleLike;\n MultiPoint?: StyleLike;\n MultiLineString?: StyleLike;\n};\n\n/**\n * Represents the additional graphical representations of objects.\n *\n * See also {@link MapModel.highlight}.\n *\n * @group Map Model\n */\nexport interface Highlight extends Resource {\n readonly isActive: boolean;\n}\n\ntype HighlightStyleType = keyof HighlightStyle;\n\n/**\n * Manages highlights on the map.\n *\n * @group Map Model\n */\nexport class Highlights {\n #map: MapModel;\n\n #olLayer: VectorLayer<VectorSource, Feature>;\n #layer: SimpleLayer;\n #olSource: VectorSource<Feature<Geometry>>;\n #activeHighlights: Set<Highlight>;\n\n constructor(map: MapModel, layerDeps: LayerDependencies) {\n this.#map = map;\n this.#olSource = new VectorSource({\n features: undefined\n });\n this.#olLayer = new VectorLayer({\n className: \"highlight-layer\",\n source: this.#olSource,\n style: function (feature, resolution) {\n return resolveStyle(feature, resolution);\n }\n });\n this.#layer = new SimpleLayer(\n {\n title: \"highlight-layer\",\n internal: true,\n olLayer: this.#olLayer\n },\n layerDeps,\n INTERNAL_CONSTRUCTOR_TAG\n );\n map.layers.addLayer(this.#layer, { at: \"topmost\" });\n\n this.#activeHighlights = new Set();\n }\n\n [DESTROY_HIGHLIGHTS]() {\n this.clear();\n }\n\n /**\n * Creates a highlight at the given targets.\n *\n * A highlight is a temporary graphic on the map that calls attention to a point or an area.\n *\n * Call `destroy()` on the returned highlight object to remove the highlight.\n */\n add(displayTargets: DisplayTarget[], options?: HighlightOptions | undefined): Highlight {\n const geometries = getGeometries(displayTargets);\n if (geometries.length === 0) {\n return {\n get isActive() {\n return false;\n },\n destroy() {}\n };\n }\n\n const features = geometries.map((geometry) => {\n const type = geometry.getType();\n const feature = new Feature({\n type: type,\n geometry: geometry\n });\n feature.setStyle(getOwnStyle(type, options?.highlightStyle));\n return feature;\n });\n\n const source = this.#olSource;\n const highlights = this.#activeHighlights;\n const highlight: Highlight = {\n get isActive() {\n return highlights.has(highlight);\n },\n destroy() {\n if (!this.isActive) {\n return;\n }\n\n for (const feature of features) {\n source.removeFeature(feature);\n }\n highlights.delete(highlight);\n }\n };\n\n source.addFeatures(features);\n this.#activeHighlights.add(highlight);\n return highlight;\n }\n\n /**\n * Creates a highlight and zooms to the given targets.\n *\n * See also {@link add} and {@link MapModel.zoom}.\n */\n addAndZoom(\n displayTarget: DisplayTarget[],\n options?: HighlightZoomOptions | undefined\n ): Highlight {\n const result = this.add(displayTarget, options);\n this.#map.zoom(displayTarget, options);\n return result;\n }\n\n /**\n * This method destroys all active Highlights.\n */\n clear() {\n for (const highlight of this.#activeHighlights) {\n highlight.destroy();\n }\n }\n\n /**\n * Returns the layer used for highlights.\n */\n [GET_HIGHLIGHT_LAYER]() {\n return this.#olLayer;\n }\n}\n\n/**\n * Returns the appropriate style from the user's highlightStyle or falls back to the default style\n */\nfunction resolveStyle(feature: FeatureLike, resolution: number) {\n const type: keyof typeof defaultHighlightStyle = feature.get(\"type\");\n const style = toStyleFunction(getDefaultStyle(type));\n return style(feature, resolution);\n}\n\n/**\n * This method creates styling for a highlight based on the optional style information or the default style\n */\nfunction getOwnStyle(type: Type, highlightStyle: HighlightStyle | undefined) {\n if (highlightStyle && type in highlightStyle) {\n const supportedType = type as HighlightStyleType;\n const ownStyle = highlightStyle[supportedType];\n return ownStyle ? ownStyle : getDefaultStyle(type);\n } else {\n return getDefaultStyle(type);\n }\n}\n\n/**\n * This returns default styling for a highlight\n */\nfunction getDefaultStyle(type: Type) {\n if (type in defaultHighlightStyle) {\n const supportedType = type as HighlightStyleType;\n return defaultHighlightStyle[supportedType];\n } else {\n return defaultHighlightStyle.Polygon;\n }\n}\n\n/**\n * Default styling for highlights\n */\nconst defaultHighlightStyle = {\n \"Point\": new Style({\n image: new Icon({\n anchor: [0.5, 1],\n src: mapMarkerUrl\n })\n }),\n \"MultiPoint\": new Style({\n image: new Icon({\n anchor: [0.5, 1],\n src: mapMarkerUrl\n })\n }),\n \"LineString\": [\n new Style({\n stroke: new Stroke({\n color: \"#fff\",\n width: 5\n })\n }),\n new Style({\n stroke: new Stroke({\n color: \"#00ffff\",\n width: 3\n })\n })\n ],\n \"MultiLineString\": [\n new Style({\n stroke: new Stroke({\n color: \"#fff\",\n width: 5\n })\n }),\n new Style({\n stroke: new Stroke({\n color: \"#00ffff\",\n width: 3\n })\n })\n ],\n \"Polygon\": [\n new Style({\n stroke: new Stroke({\n color: \"#fff\",\n width: 5\n })\n }),\n new Style({\n stroke: new Stroke({\n color: \"#00ffff\",\n width: 3\n }),\n fill: new Fill({\n color: \"rgba(224,255,255,0.35)\"\n })\n })\n ],\n \"MultiPolygon\": [\n new Style({\n stroke: new Stroke({\n color: \"#fff\",\n width: 5\n })\n }),\n new Style({\n stroke: new Stroke({\n color: \"#00ffff\",\n width: 3\n }),\n fill: new Fill({\n color: \"rgba(224,255,255,0.35)\"\n })\n })\n ]\n};\n"],"names":["toStyleFunction"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LayerCollection.js","sources":["LayerCollection.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2023-2025 Open Pioneer project (https://github.com/open-pioneer)\n// SPDX-License-Identifier: Apache-2.0\nimport {\n batch,\n effect,\n reactive,\n ReactiveArray,\n reactiveArray,\n reactiveMap,\n reactiveSet\n} from \"@conterra/reactivity-core\";\nimport { createLogger, Resource } from \"@open-pioneer/core\";\nimport OlBaseLayer from \"ol/layer/Base\";\nimport { sourceId } from \"open-pioneer:source-info\";\nimport { AbstractLayer } from \"../layers/AbstractLayer\";\nimport { AbstractLayerBase } from \"../layers/AbstractLayerBase\";\nimport type { AddLayerOptions } from \"../layers/shared/AddLayerOptions\";\nimport { getRecursiveLayers } from \"../layers/shared/getRecursiveLayers\";\nimport {\n ATTACH_TO_MAP,\n DETACH_FROM_MAP,\n GET_RAW_LAYERS,\n GET_RAW_SUBLAYERS,\n SET_VISIBLE\n} from \"../layers/shared/internals\";\nimport type {\n LayerRetrievalOptions,\n RecursiveRetrievalOptions\n} from \"../layers/shared/LayerRetrievalOptions\";\nimport { AnyLayer, Layer, Sublayer } from \"../layers/unions\";\nimport { assertInternalConstructor, InternalConstructorTag } from \"../utils/InternalConstructorTag\";\nimport { MapModel } from \"./MapModel\";\n\nconst LOG = createLogger(sourceId);\n\ntype LayerType = AbstractLayer & Layer;\ntype LayerBaseType = (AbstractLayerBase & Layer) | (AbstractLayerBase & Sublayer);\n\ninterface OpOrTopmostLayerPos {\n which: \"normal\" | \"topmost\";\n index: number;\n}\n\ninterface BaseLayerPos {\n which: \"base\";\n}\n\ntype LayerPos = OpOrTopmostLayerPos | BaseLayerPos;\n\n/**\n * Contains the layers contained in a {@link MapModel}.\n *\n * @group Map Model\n */\nexport class LayerCollection {\n #map: MapModel;\n\n /** Top level layers (base layers, operational layers). No sublayers. */\n #topLevelLayers = reactiveSet<LayerType>();\n\n /** Index of _all_ layer instances, including sublayers. */\n #layersById = reactiveMap<string, LayerBaseType>();\n\n /** Reverse index of _all_ layers that have an associated OpenLayers layer. */\n #layersByOlLayer: WeakMap<OlBaseLayer, LayerType> = new WeakMap();\n\n /** Currently active base layer. */\n #activeBaseLayer = reactive<LayerType>();\n\n /**\n * Defines the relative order of operational layers.\n * Lower index -> layer is below its successors.\n * Excluding {@link #topMostOperationalLayers}\n */\n #operationalLayerOrder = reactiveArray<LayerType>();\n\n /** Operational layers that are always displayed at the top above all other layers (e.g. a highlight layer) */\n #topMostOperationalLayers = reactiveArray<LayerType>();\n\n #syncHandle: Resource | undefined;\n\n /** @internal */\n constructor(map: MapModel, tag: InternalConstructorTag) {\n assertInternalConstructor(tag);\n\n this.#map = map;\n this.#syncHandle = effect(() => {\n // Contains base layers, normal operational layers, topmost layers in bottom-to-top order.\n const orderedLayers = this.getLayers({\n sortByDisplayOrder: true,\n includeInternalLayers: true\n });\n\n // Simply reassign all z-indices whenever the order changes.\n let index = 0;\n for (const layer of orderedLayers) {\n LOG.isDebug() && LOG.debug(\"Assigning z-index\", layer.id, index);\n layer.olLayer.setZIndex(index);\n index++;\n }\n });\n }\n\n destroy() {\n for (const layer of this.#layersById.values()) {\n layer.destroy();\n }\n this.#topLevelLayers.clear();\n this.#layersById.clear();\n this.#operationalLayerOrder.splice(0, this.#operationalLayerOrder.length);\n this.#activeBaseLayer.value = undefined;\n this.#syncHandle?.destroy();\n this.#syncHandle = undefined;\n }\n\n /**\n * Adds a new layer to the map.\n *\n * The new layer is automatically registered with this collection.\n *\n * ### Display order\n *\n * By default, the new layer will be shown on _top_ of all normal operational layers.\n * Use the `options` parameter to control the insertion point.\n *\n * ### Ownership\n *\n * The map model takes ownership of the new layer.\n * This means that the layer will be destroyed if the map model is destroyed.\n */\n addLayer(layer: Layer, options?: AddLayerOptions): void {\n batch(() => {\n checkLayerInstance(layer);\n\n layer[ATTACH_TO_MAP](this.#map);\n this.#addLayer(layer, options);\n });\n }\n\n /**\n * Returns all configured base layers.\n */\n getBaseLayers(): Layer[] {\n // Slightly inefficient, but we don't need a separate index for base layers right now.\n return Array.from(this.#topLevelLayers).filter((layer) => layer.isBaseLayer);\n }\n\n /**\n * Returns the currently active base layer.\n */\n getActiveBaseLayer(): Layer | undefined {\n return this.#activeBaseLayer.value;\n }\n\n /**\n * Activates the base layer with the given id.\n * `undefined` can be used to hide all base layers.\n *\n * The associated layer is made visible and all other base layers are hidden.\n *\n * Returns true if the given layer has been successfully activated.\n */\n activateBaseLayer(id: string | undefined): boolean {\n let newBaseLayer = undefined;\n if (id != null) {\n newBaseLayer = this.#layersById.get(id);\n if (!newBaseLayer) {\n LOG.warn(`Cannot activate base layer '${id}': layer is unknown.`);\n return false;\n }\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.isBaseLayer) {\n LOG.warn(`Cannot activate base layer '${id}': layer is not a base layer.`);\n return false;\n }\n }\n\n this.#updateBaseLayer(newBaseLayer);\n return true;\n }\n\n /**\n * Returns a list of operational layers, starting from the root of the map's layer hierarchy.\n * The returned list includes top level layers only. Use {@link getRecursiveLayers()} to retrieve (nested) child layers.\n */\n getOperationalLayers(options?: LayerRetrievalOptions): Layer[] {\n return this.getLayers(options).filter((layer) => !layer.isBaseLayer);\n }\n\n /**\n * Returns a list of layers known to this collection. This includes base layers and operational layers.\n * The returned list includes top level layers only. Use {@link getRecursiveLayers()} to retrieve (nested) child layers.\n */\n getLayers(options?: LayerRetrievalOptions): Layer[] {\n let allLayers: Layer[];\n\n if (options?.sortByDisplayOrder) {\n const baseLayers = this.getBaseLayers();\n const order = Array.from(this.#operationalLayerOrder);\n const topMost = Array.from(this.#topMostOperationalLayers);\n allLayers = [...baseLayers, ...order, ...topMost];\n } else {\n allLayers = Array.from(this.#topLevelLayers.values());\n }\n\n if (!options?.includeInternalLayers) {\n allLayers = allLayers.filter((l) => !l.internal);\n }\n return allLayers;\n }\n\n /**\n * Returns a list of layers known to this collection. This includes base layers and operational layers.\n * The returned list includes top level layers only. Use {@link getRecursiveLayers()} to retrieve (nested) child layers.\n *\n * @deprecated Use {@link getLayers()}, {@link getOperationalLayers()} or {@link getRecursiveLayers()} instead.\n * This method name is misleading since it does not recurse into child layers.\n */\n getAllLayers(options?: LayerRetrievalOptions): Layer[] {\n return this.getLayers(options);\n }\n\n /**\n * Returns a list of all layers in this collection, including all children (recursively).\n *\n * > Note: This includes base layers by default (see `options.filter`).\n * > Use the `\"base\"` or `\"operational\"` short hand values to filter by base layer or operational layers.\n * >\n * > If the layer hierarchy is deeply nested, this function could potentially be expensive.\n */\n getRecursiveLayers({\n filter,\n sortByDisplayOrder,\n includeInternalLayers\n }: Omit<RecursiveRetrievalOptions, \"filter\"> & {\n filter?: \"base\" | \"operational\" | ((layer: AnyLayer) => boolean);\n } = {}): AnyLayer[] {\n let filterFunc;\n if (typeof filter === \"function\") {\n filterFunc = filter;\n } else if (typeof filter === \"string\") {\n const filterType = filter;\n const topLevelFilter = (layer: Layer) => {\n return filterType === \"base\" ? layer.isBaseLayer : !layer.isBaseLayer;\n };\n filterFunc = (layer: AnyLayer) => {\n if (!layer.parent && \"isBaseLayer\" in layer) {\n return topLevelFilter(layer);\n }\n // For nested children, include them all.\n return true;\n };\n }\n\n return getRecursiveLayers({\n from: this,\n filter: filterFunc,\n sortByDisplayOrder,\n includeInternalLayers\n });\n }\n\n getItems(options?: LayerRetrievalOptions): Layer[] {\n return this.getLayers(options);\n }\n\n /**\n * Returns the layer identified by the `id` or undefined, if no such layer exists.\n */\n getLayerById(id: string): AnyLayer | undefined {\n return this.#layersById.get(id);\n }\n\n /**\n * Removes a layer identified by the `id` from the map.\n *\n * NOTE: The current implementation only supports removal of _top level_ layers.\n *\n * ### Ownership\n *\n * This function _destroys_ the layer instance and all its children.\n *\n * @deprecated Use {@link removeLayer} instead.\n */\n removeLayerById(id: string): void {\n batch(() => {\n const layer = this.#layersById.get(id);\n if (!layer) {\n LOG.isDebug() && LOG.debug(`Cannot remove layer '${id}': layer is unknown.`);\n return;\n }\n\n checkLayerInstance(layer);\n if (!this.#topLevelLayers.has(layer)) {\n LOG.warn(\n `Cannot remove layer '${layer.id}': only top level layers can be removed at this time.`\n );\n return;\n }\n\n this.#removeLayer(layer);\n layer.destroy();\n });\n }\n\n /**\n * Removes the given top level layer from the map.\n *\n * The layer can be specified directly (as an object) or by an id.\n *\n * Returns the layer instance on success, or `undefined` if the layer was not found.\n *\n * ### Ownership\n *\n * The map releases ownership of this layer.\n * The caller can destroy it or store it for later reuse.\n */\n removeLayer(layer: string | Layer): Layer | undefined {\n return batch(() => {\n let actualLayer;\n if (typeof layer === \"string\") {\n actualLayer = this.#layersById.get(layer);\n if (!actualLayer) {\n return undefined;\n }\n } else {\n actualLayer = layer;\n }\n\n checkLayerInstance(actualLayer);\n if (!this.#topLevelLayers.has(actualLayer)) {\n return undefined;\n }\n\n this.#removeLayer(actualLayer);\n actualLayer[DETACH_FROM_MAP]();\n return actualLayer;\n });\n }\n\n /**\n * Given a raw OpenLayers layer instance, returns the associated {@link Layer} - or undefined\n * if the layer is unknown to this collection.\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(layer: LayerType, options: AddLayerOptions | undefined) {\n // Throws; do this before manipulating the data structures\n const pos = this.#getInsertionPos(layer, options);\n this.#indexLayer(layer);\n\n // Everything below this line should not fail.\n if (pos.which === \"base\") {\n if (!this.#activeBaseLayer.value && layer.visible) {\n this.#updateBaseLayer(layer);\n } else {\n layer[SET_VISIBLE](false);\n }\n } else {\n layer[SET_VISIBLE](layer.visible);\n\n const layerList = this.#getLayerList(pos);\n layerList.splice(pos.index, 0, layer); // insert new layer at insertion index\n }\n this.#topLevelLayers.add(layer);\n this.#map.olMap.addLayer(layer.olLayer);\n }\n\n #getInsertionPos(layer: LayerType, options: AddLayerOptions | undefined): LayerPos {\n if (layer.isBaseLayer) {\n if (options?.at) {\n throw new Error(\n `Cannot add base layer '${layer.id}' at a specific position: only operational layers can be added at a specific position.`\n );\n }\n return { which: \"base\" };\n }\n\n switch (options?.at) {\n case undefined:\n case null:\n case \"top\":\n return { which: \"normal\", index: this.#operationalLayerOrder.length };\n case \"topmost\":\n return { which: \"topmost\", index: this.#topMostOperationalLayers.length };\n case \"bottom\":\n return { which: \"normal\", index: 0 };\n case \"above\":\n case \"below\": {\n const reference = this.#getReference(options.reference);\n const pos = this.#findOpOrTopmost(reference);\n if (!pos) {\n // reference is not a top level operational layer -> throw error\n const errorMessage = this.#getInsertErrorMessage(layer, reference);\n throw new Error(errorMessage);\n }\n\n if (options.at === \"above\") {\n pos.index++;\n }\n return pos;\n }\n }\n assertNever(options);\n }\n\n #getReference(reference: Layer | string): LayerType {\n let layer: AnyLayer;\n if (typeof reference === \"string\") {\n const refLayer = this.getLayerById(reference);\n if (!refLayer) {\n throw new Error(`Unknown reference layer '${reference}'.`);\n }\n layer = refLayer;\n } else {\n layer = reference;\n }\n checkLayerInstance(layer);\n return layer;\n }\n\n /**\n * Removes the given top level layer from the map and all relevant indices.\n */\n #removeLayer(layer: LayerType) {\n this.#map.olMap.removeLayer(layer.olLayer);\n this.#topLevelLayers.delete(layer);\n if (!layer.isBaseLayer) {\n const pos = this.#findOpOrTopmost(layer);\n if (!pos) {\n throw new Error(`Internal error: layer '${layer.id}' not found.`);\n }\n const layerList = this.#getLayerList(pos);\n layerList.splice(pos.index, 1);\n }\n\n this.#unIndexLayer(layer);\n if (this.#activeBaseLayer.value === layer) {\n const newBaseLayer = this.getBaseLayers()[0];\n if (newBaseLayer) {\n checkLayerInstance(newBaseLayer);\n }\n this.#updateBaseLayer(newBaseLayer);\n }\n }\n\n #updateBaseLayer(layer: LayerType | undefined) {\n if (this.#activeBaseLayer.value === layer) {\n return;\n }\n\n if (LOG.isDebug()) {\n const getId = (layer: AbstractLayer | undefined) => {\n return layer ? `'${layer.id}'` : undefined;\n };\n\n LOG.debug(\n `Switching active base layer from ${getId(this.#activeBaseLayer.value)} to ${getId(layer)}`\n );\n }\n\n batch(() => {\n this.#activeBaseLayer.value?.[SET_VISIBLE](false);\n this.#activeBaseLayer.value = layer;\n layer?.[SET_VISIBLE](true);\n });\n }\n\n /**\n * Index the layer and all its children.\n */\n #indexLayer(layer: LayerType) {\n // layer id -> layer (or sublayer)\n const registrations: [string, OlBaseLayer | undefined][] = [];\n const visit = (layer: LayerType | (AbstractLayerBase & Sublayer)) => {\n const id = layer.id;\n const olLayer = \"olLayer\" in layer ? layer.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 used by layer '${id}' has already been used in map.`);\n }\n\n // Register this layer with the map.\n this.#layersById.set(id, layer);\n if (olLayer) {\n this.#layersByOlLayer.set(olLayer, layer as LayerType); // ol is present --> not a sublayer\n }\n registrations.push([id, olLayer]);\n\n // Recurse into nested children.\n for (const childLayer of layer.layers?.[GET_RAW_LAYERS]() ?? []) {\n visit(childLayer);\n }\n for (const sublayer of layer.sublayers?.[GET_RAW_SUBLAYERS]() ?? []) {\n visit(sublayer);\n }\n };\n\n try {\n visit(layer);\n } catch (e) {\n // If any error happens, undo the indexing.\n // This way we don't leave a partially indexed layer tree behind.\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 children.\n */\n #unIndexLayer(layer: AbstractLayer) {\n const visit = (layer: AbstractLayer | AbstractLayerBase) => {\n if (\"olLayer\" in layer) {\n this.#layersByOlLayer.delete(layer.olLayer);\n }\n this.#layersById.delete(layer.id);\n\n for (const childLayer of layer.layers?.[GET_RAW_LAYERS]() ?? []) {\n visit(childLayer);\n }\n\n for (const sublayer of layer.sublayers?.[GET_RAW_SUBLAYERS]() ?? []) {\n visit(sublayer);\n }\n };\n visit(layer);\n }\n\n #getLayerList(pos: OpOrTopmostLayerPos): ReactiveArray<LayerType> {\n switch (pos.which) {\n case \"topmost\":\n return this.#topMostOperationalLayers;\n case \"normal\":\n return this.#operationalLayerOrder;\n }\n }\n\n #findOpOrTopmost(layer: LayerType): OpOrTopmostLayerPos | undefined {\n let index = this.#operationalLayerOrder.indexOf(layer);\n if (index !== -1) {\n return { which: \"normal\", index };\n }\n\n index = this.#topMostOperationalLayers.indexOf(layer);\n if (index !== -1) {\n return { which: \"topmost\", index };\n }\n return undefined;\n }\n\n #getInsertErrorMessage(layer: LayerType, reference: LayerType) {\n let message: string = `Cannot add layer '${layer.id}'. Reference layer '${reference.id}' is not a top level operational layer.`;\n\n if (reference.isBaseLayer) {\n //is base layer\n message += \" Reference layer is a base layer.\";\n } else if (reference.parent) {\n //is child layer\n message += \" Reference layer is child layer of a group.\";\n }\n\n return message;\n }\n}\n\nfunction checkLayerInstance(object: AnyLayer): asserts object is Layer & AbstractLayer {\n if (!(object instanceof AbstractLayer)) {\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\nfunction assertNever(_arg: never): never {\n throw new Error(`Internal error: unhandled option.`);\n}\n"],"names":["layer"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"LayerCollection.js","sources":["LayerCollection.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2023-2025 Open Pioneer project (https://github.com/open-pioneer)\n// SPDX-License-Identifier: Apache-2.0\n\nimport {\n batch,\n effect,\n reactive,\n ReactiveArray,\n reactiveArray,\n reactiveMap,\n reactiveSet\n} from \"@conterra/reactivity-core\";\nimport { createLogger, Resource } from \"@open-pioneer/core\";\nimport OlBaseLayer from \"ol/layer/Base\";\nimport { sourceId } from \"open-pioneer:source-info\";\nimport { AbstractLayer } from \"../layers/AbstractLayer\";\nimport { AbstractLayerBase } from \"../layers/AbstractLayerBase\";\nimport type { AddLayerOptions } from \"../layers/shared/AddLayerOptions\";\nimport { getRecursiveLayers } from \"../layers/shared/getRecursiveLayers\";\nimport {\n ATTACH_TO_MAP,\n DETACH_FROM_MAP,\n GET_RAW_LAYERS,\n GET_RAW_SUBLAYERS,\n SET_VISIBLE\n} from \"../layers/shared/internals\";\nimport type {\n LayerRetrievalOptions,\n RecursiveRetrievalOptions\n} from \"../layers/shared/LayerRetrievalOptions\";\nimport { AnyLayer, Layer, Sublayer } from \"../layers/unions\";\nimport { assertInternalConstructor, InternalConstructorTag } from \"../utils/InternalConstructorTag\";\nimport { MapModel } from \"./MapModel\";\n\nconst LOG = createLogger(sourceId);\n\ntype LayerType = AbstractLayer & Layer;\ntype LayerBaseType = (AbstractLayerBase & Layer) | (AbstractLayerBase & Sublayer);\n\ninterface OpOrTopmostLayerPos {\n which: \"normal\" | \"topmost\";\n index: number;\n}\n\ninterface BaseLayerPos {\n which: \"base\";\n}\n\ntype LayerPos = OpOrTopmostLayerPos | BaseLayerPos;\n\n/**\n * Contains the layers contained in a {@link MapModel}.\n *\n * @group Map Model\n */\nexport class LayerCollection {\n #map: MapModel;\n\n /** Top level layers (base layers, operational layers). No sublayers. */\n #topLevelLayers = reactiveSet<LayerType>();\n\n /** Index of _all_ layer instances, including sublayers. */\n #layersById = reactiveMap<string, LayerBaseType>();\n\n /** Reverse index of _all_ layers that have an associated OpenLayers layer. */\n #layersByOlLayer: WeakMap<OlBaseLayer, LayerType> = new WeakMap();\n\n /** Currently active base layer. */\n #activeBaseLayer = reactive<LayerType>();\n\n /**\n * Defines the relative order of operational layers.\n * Lower index -> layer is below its successors.\n * Excluding {@link #topMostOperationalLayers}\n */\n #operationalLayerOrder = reactiveArray<LayerType>();\n\n /** Operational layers that are always displayed at the top above all other layers (e.g. a highlight layer) */\n #topMostOperationalLayers = reactiveArray<LayerType>();\n\n #syncHandle: Resource | undefined;\n\n /** @internal */\n constructor(map: MapModel, tag: InternalConstructorTag) {\n assertInternalConstructor(tag);\n\n this.#map = map;\n this.#syncHandle = effect(() => {\n // Contains base layers, normal operational layers, topmost layers in bottom-to-top order.\n const orderedLayers = this.getLayers({\n sortByDisplayOrder: true,\n includeInternalLayers: true\n });\n\n // Simply reassign all z-indices whenever the order changes.\n let index = 0;\n for (const layer of orderedLayers) {\n LOG.isDebug() && LOG.debug(\"Assigning z-index\", layer.id, index);\n layer.olLayer.setZIndex(index);\n index++;\n }\n });\n }\n\n destroy() {\n for (const layer of this.#layersById.values()) {\n layer.destroy();\n }\n this.#topLevelLayers.clear();\n this.#layersById.clear();\n this.#operationalLayerOrder.splice(0, this.#operationalLayerOrder.length);\n this.#activeBaseLayer.value = undefined;\n this.#syncHandle?.destroy();\n this.#syncHandle = undefined;\n }\n\n /**\n * Adds a new layer to the map.\n *\n * The new layer is automatically registered with this collection.\n *\n * ### Display order\n *\n * By default, the new layer will be shown on _top_ of all normal operational layers.\n * Use the `options` parameter to control the insertion point.\n *\n * ### Ownership\n *\n * The map model takes ownership of the new layer.\n * This means that the layer will be destroyed if the map model is destroyed.\n */\n addLayer(layer: Layer, options?: AddLayerOptions): void {\n batch(() => {\n checkLayerInstance(layer);\n\n layer[ATTACH_TO_MAP](this.#map);\n this.#addLayer(layer, options);\n });\n }\n\n /**\n * Returns all configured base layers.\n */\n getBaseLayers(): Layer[] {\n // Slightly inefficient, but we don't need a separate index for base layers right now.\n return Array.from(this.#topLevelLayers).filter((layer) => layer.isBaseLayer);\n }\n\n /**\n * Returns the currently active base layer.\n */\n getActiveBaseLayer(): Layer | undefined {\n return this.#activeBaseLayer.value;\n }\n\n /**\n * Activates the base layer with the given id.\n * `undefined` can be used to hide all base layers.\n *\n * The associated layer is made visible and all other base layers are hidden.\n *\n * Returns true if the given layer has been successfully activated.\n */\n activateBaseLayer(id: string | undefined): boolean {\n let newBaseLayer = undefined;\n if (id != null) {\n newBaseLayer = this.#layersById.get(id);\n if (!newBaseLayer) {\n LOG.warn(`Cannot activate base layer '${id}': layer is unknown.`);\n return false;\n }\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.isBaseLayer) {\n LOG.warn(`Cannot activate base layer '${id}': layer is not a base layer.`);\n return false;\n }\n }\n\n this.#updateBaseLayer(newBaseLayer);\n return true;\n }\n\n /**\n * Returns a list of operational layers, starting from the root of the map's layer hierarchy.\n * The returned list includes top level layers only. Use {@link getRecursiveLayers()} to retrieve (nested) child layers.\n */\n getOperationalLayers(options?: LayerRetrievalOptions): Layer[] {\n return this.getLayers(options).filter((layer) => !layer.isBaseLayer);\n }\n\n /**\n * Returns a list of layers known to this collection. This includes base layers and operational layers.\n * The returned list includes top level layers only. Use {@link getRecursiveLayers()} to retrieve (nested) child layers.\n */\n getLayers(options?: LayerRetrievalOptions): Layer[] {\n let allLayers: Layer[];\n\n if (options?.sortByDisplayOrder) {\n const baseLayers = this.getBaseLayers();\n const order = Array.from(this.#operationalLayerOrder);\n const topMost = Array.from(this.#topMostOperationalLayers);\n allLayers = [...baseLayers, ...order, ...topMost];\n } else {\n allLayers = Array.from(this.#topLevelLayers.values());\n }\n\n if (!options?.includeInternalLayers) {\n allLayers = allLayers.filter((l) => !l.internal);\n }\n return allLayers;\n }\n\n /**\n * Returns a list of layers known to this collection. This includes base layers and operational layers.\n * The returned list includes top level layers only. Use {@link getRecursiveLayers()} to retrieve (nested) child layers.\n *\n * @deprecated Use {@link getLayers()}, {@link getOperationalLayers()} or {@link getRecursiveLayers()} instead.\n * This method name is misleading since it does not recurse into child layers.\n */\n getAllLayers(options?: LayerRetrievalOptions): Layer[] {\n return this.getLayers(options);\n }\n\n /**\n * Returns a list of all layers in this collection, including all children (recursively).\n *\n * > Note: This includes base layers by default (see `options.filter`).\n * > Use the `\"base\"` or `\"operational\"` short hand values to filter by base layer or operational layers.\n * >\n * > If the layer hierarchy is deeply nested, this function could potentially be expensive.\n */\n getRecursiveLayers({\n filter,\n sortByDisplayOrder,\n includeInternalLayers\n }: Omit<RecursiveRetrievalOptions, \"filter\"> & {\n filter?: \"base\" | \"operational\" | ((layer: AnyLayer) => boolean);\n } = {}): AnyLayer[] {\n let filterFunc;\n if (typeof filter === \"function\") {\n filterFunc = filter;\n } else if (typeof filter === \"string\") {\n const filterType = filter;\n const topLevelFilter = (layer: Layer) => {\n return filterType === \"base\" ? layer.isBaseLayer : !layer.isBaseLayer;\n };\n filterFunc = (layer: AnyLayer) => {\n if (!layer.parent && \"isBaseLayer\" in layer) {\n return topLevelFilter(layer);\n }\n // For nested children, include them all.\n return true;\n };\n }\n\n return getRecursiveLayers({\n from: this,\n filter: filterFunc,\n sortByDisplayOrder,\n includeInternalLayers\n });\n }\n\n getItems(options?: LayerRetrievalOptions): Layer[] {\n return this.getLayers(options);\n }\n\n /**\n * Returns the layer identified by the `id` or undefined, if no such layer exists.\n */\n getLayerById(id: string): AnyLayer | undefined {\n return this.#layersById.get(id);\n }\n\n /**\n * Removes a layer identified by the `id` from the map.\n *\n * NOTE: The current implementation only supports removal of _top level_ layers.\n *\n * ### Ownership\n *\n * This function _destroys_ the layer instance and all its children.\n *\n * @deprecated Use {@link removeLayer} instead.\n */\n removeLayerById(id: string): void {\n batch(() => {\n const layer = this.#layersById.get(id);\n if (!layer) {\n LOG.isDebug() && LOG.debug(`Cannot remove layer '${id}': layer is unknown.`);\n return;\n }\n\n checkLayerInstance(layer);\n if (!this.#topLevelLayers.has(layer)) {\n LOG.warn(\n `Cannot remove layer '${layer.id}': only top level layers can be removed at this time.`\n );\n return;\n }\n\n this.#removeLayer(layer);\n layer.destroy();\n });\n }\n\n /**\n * Removes the given top level layer from the map.\n *\n * The layer can be specified directly (as an object) or by an id.\n *\n * Returns the layer instance on success, or `undefined` if the layer was not found.\n *\n * ### Ownership\n *\n * The map releases ownership of this layer.\n * The caller can destroy it or store it for later reuse.\n */\n removeLayer(layer: string | Layer): Layer | undefined {\n return batch(() => {\n let actualLayer;\n if (typeof layer === \"string\") {\n actualLayer = this.#layersById.get(layer);\n if (!actualLayer) {\n return undefined;\n }\n } else {\n actualLayer = layer;\n }\n\n checkLayerInstance(actualLayer);\n if (!this.#topLevelLayers.has(actualLayer)) {\n return undefined;\n }\n\n this.#removeLayer(actualLayer);\n actualLayer[DETACH_FROM_MAP]();\n return actualLayer;\n });\n }\n\n /**\n * Given a raw OpenLayers layer instance, returns the associated {@link Layer} - or undefined\n * if the layer is unknown to this collection.\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(layer: LayerType, options: AddLayerOptions | undefined) {\n // Throws; do this before manipulating the data structures\n const pos = this.#getInsertionPos(layer, options);\n this.#indexLayer(layer);\n\n // Everything below this line should not fail.\n if (pos.which === \"base\") {\n if (!this.#activeBaseLayer.value && layer.visible) {\n this.#updateBaseLayer(layer);\n } else {\n layer[SET_VISIBLE](false);\n }\n } else {\n layer[SET_VISIBLE](layer.visible);\n\n const layerList = this.#getLayerList(pos);\n layerList.splice(pos.index, 0, layer); // insert new layer at insertion index\n }\n this.#topLevelLayers.add(layer);\n this.#map.olMap.addLayer(layer.olLayer);\n }\n\n #getInsertionPos(layer: LayerType, options: AddLayerOptions | undefined): LayerPos {\n if (layer.isBaseLayer) {\n if (options?.at) {\n throw new Error(\n `Cannot add base layer '${layer.id}' at a specific position: only operational layers can be added at a specific position.`\n );\n }\n return { which: \"base\" };\n }\n\n switch (options?.at) {\n case undefined:\n case null:\n case \"top\":\n return { which: \"normal\", index: this.#operationalLayerOrder.length };\n case \"topmost\":\n return { which: \"topmost\", index: this.#topMostOperationalLayers.length };\n case \"bottom\":\n return { which: \"normal\", index: 0 };\n case \"above\":\n case \"below\": {\n const reference = this.#getReference(options.reference);\n const pos = this.#findOpOrTopmost(reference);\n if (!pos) {\n // reference is not a top level operational layer -> throw error\n const errorMessage = this.#getInsertErrorMessage(layer, reference);\n throw new Error(errorMessage);\n }\n\n if (options.at === \"above\") {\n pos.index++;\n }\n return pos;\n }\n }\n assertNever(options);\n }\n\n #getReference(reference: Layer | string): LayerType {\n let layer: AnyLayer;\n if (typeof reference === \"string\") {\n const refLayer = this.getLayerById(reference);\n if (!refLayer) {\n throw new Error(`Unknown reference layer '${reference}'.`);\n }\n layer = refLayer;\n } else {\n layer = reference;\n }\n checkLayerInstance(layer);\n return layer;\n }\n\n /**\n * Removes the given top level layer from the map and all relevant indices.\n */\n #removeLayer(layer: LayerType) {\n this.#map.olMap.removeLayer(layer.olLayer);\n this.#topLevelLayers.delete(layer);\n if (!layer.isBaseLayer) {\n const pos = this.#findOpOrTopmost(layer);\n if (!pos) {\n throw new Error(`Internal error: layer '${layer.id}' not found.`);\n }\n const layerList = this.#getLayerList(pos);\n layerList.splice(pos.index, 1);\n }\n\n this.#unIndexLayer(layer);\n if (this.#activeBaseLayer.value === layer) {\n const newBaseLayer = this.getBaseLayers()[0];\n if (newBaseLayer) {\n checkLayerInstance(newBaseLayer);\n }\n this.#updateBaseLayer(newBaseLayer);\n }\n }\n\n #updateBaseLayer(layer: LayerType | undefined) {\n if (this.#activeBaseLayer.value === layer) {\n return;\n }\n\n if (LOG.isDebug()) {\n const getId = (layer: AbstractLayer | undefined) => {\n return layer ? `'${layer.id}'` : undefined;\n };\n\n LOG.debug(\n `Switching active base layer from ${getId(this.#activeBaseLayer.value)} to ${getId(layer)}`\n );\n }\n\n batch(() => {\n this.#activeBaseLayer.value?.[SET_VISIBLE](false);\n this.#activeBaseLayer.value = layer;\n layer?.[SET_VISIBLE](true);\n });\n }\n\n /**\n * Index the layer and all its children.\n */\n #indexLayer(layer: LayerType) {\n // layer id -> layer (or sublayer)\n const registrations: [string, OlBaseLayer | undefined][] = [];\n const visit = (layer: LayerType | (AbstractLayerBase & Sublayer)) => {\n const id = layer.id;\n const olLayer = \"olLayer\" in layer ? layer.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 used by layer '${id}' has already been used in map.`);\n }\n\n // Register this layer with the map.\n this.#layersById.set(id, layer);\n if (olLayer) {\n this.#layersByOlLayer.set(olLayer, layer as LayerType); // ol is present --> not a sublayer\n }\n registrations.push([id, olLayer]);\n\n // Recurse into nested children.\n for (const childLayer of layer.layers?.[GET_RAW_LAYERS]() ?? []) {\n visit(childLayer);\n }\n for (const sublayer of layer.sublayers?.[GET_RAW_SUBLAYERS]() ?? []) {\n visit(sublayer);\n }\n };\n\n try {\n visit(layer);\n } catch (e) {\n // If any error happens, undo the indexing.\n // This way we don't leave a partially indexed layer tree behind.\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 children.\n */\n #unIndexLayer(layer: AbstractLayer) {\n const visit = (layer: AbstractLayer | AbstractLayerBase) => {\n if (\"olLayer\" in layer) {\n this.#layersByOlLayer.delete(layer.olLayer);\n }\n this.#layersById.delete(layer.id);\n\n for (const childLayer of layer.layers?.[GET_RAW_LAYERS]() ?? []) {\n visit(childLayer);\n }\n\n for (const sublayer of layer.sublayers?.[GET_RAW_SUBLAYERS]() ?? []) {\n visit(sublayer);\n }\n };\n visit(layer);\n }\n\n #getLayerList(pos: OpOrTopmostLayerPos): ReactiveArray<LayerType> {\n switch (pos.which) {\n case \"topmost\":\n return this.#topMostOperationalLayers;\n case \"normal\":\n return this.#operationalLayerOrder;\n }\n }\n\n #findOpOrTopmost(layer: LayerType): OpOrTopmostLayerPos | undefined {\n let index = this.#operationalLayerOrder.indexOf(layer);\n if (index !== -1) {\n return { which: \"normal\", index };\n }\n\n index = this.#topMostOperationalLayers.indexOf(layer);\n if (index !== -1) {\n return { which: \"topmost\", index };\n }\n return undefined;\n }\n\n #getInsertErrorMessage(layer: LayerType, reference: LayerType) {\n let message: string = `Cannot add layer '${layer.id}'. Reference layer '${reference.id}' is not a top level operational layer.`;\n\n if (reference.isBaseLayer) {\n //is base layer\n message += \" Reference layer is a base layer.\";\n } else if (reference.parent) {\n //is child layer\n message += \" Reference layer is child layer of a group.\";\n }\n\n return message;\n }\n}\n\nfunction checkLayerInstance(object: AnyLayer): asserts object is Layer & AbstractLayer {\n if (!(object instanceof AbstractLayer)) {\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\nfunction assertNever(_arg: never): never {\n throw new Error(`Internal error: unhandled option.`);\n}\n"],"names":["layer"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MapAttributions.js","sources":["MapAttributions.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2023-2025 Open Pioneer project (https://github.com/open-pioneer)\n// SPDX-License-Identifier: Apache-2.0\nimport { computed, effect, reactive, ReadonlyReactive } from \"@conterra/reactivity-core\";\nimport { destroyResources, Resource, shallowEqual } from \"@open-pioneer/core\";\nimport { PackageIntl } from \"@open-pioneer/runtime\";\nimport
|
|
1
|
+
{"version":3,"file":"MapAttributions.js","sources":["MapAttributions.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2023-2025 Open Pioneer project (https://github.com/open-pioneer)\n// SPDX-License-Identifier: Apache-2.0\n\nimport { computed, effect, reactive, ReadonlyReactive } from \"@conterra/reactivity-core\";\nimport { destroyResources, Resource, shallowEqual } from \"@open-pioneer/core\";\nimport { PackageIntl } from \"@open-pioneer/runtime\";\nimport Attribution from \"ol/control/Attribution\";\nimport OlMap, { FrameState } from \"ol/Map\";\nimport { sanitizeHtml } from \"../utils/sanitize\";\nimport { AttributionItem } from \"./MapModel\";\n\nexport class MapAttributions {\n #olMap: OlMap;\n #intl: ReadonlyReactive<PackageIntl>;\n\n /**\n * When default rendering of attributions is active, we simply display this control on the map (otherwise: hidden).\n *\n * The control is always active (even if invisible) because we re-use its rendering code to extract the attribution items.\n * There is no real API to extract the attributions from OpenLayers, and we don't want to re-implement that logic right now.\n * We will see if that approach remains stable.\n */\n #control: Attribution;\n\n #attributionStrings = reactive<string[]>([], { equal: shallowEqual });\n\n // Attribution strings wrapped in objects, for forward compat.\n #attributionItems = computed<AttributionItem[]>(() =>\n this.#attributionStrings.value.map((attribution) => ({\n text: attribution\n }))\n );\n\n #resources: Resource[] = [];\n\n constructor(options: {\n olMap: OlMap;\n /** false: not rendered */\n showControl: boolean;\n intl: ReadonlyReactive<PackageIntl>;\n }) {\n this.#olMap = options.olMap;\n this.#intl = options.intl;\n\n const control = (this.#control = new Attribution({\n collapsible: false,\n target: options.showControl ? undefined : createDummyTargetNode()\n }));\n interceptAttributions(\n control,\n // Called by the attributions widgets as a side effect.\n // NOTE: this is currently called very often (~ every map render).\n (attributions) => {\n this.#attributionStrings.value = attributions;\n }\n );\n\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n const element = (control as any).element as HTMLElement | undefined;\n if (element) {\n element.role = \"region\";\n this.#resources.push(\n effect(() => {\n element.ariaLabel = this.#intl.value.formatMessage({ id: \"attribution.label\" });\n })\n );\n }\n\n this.#olMap.addControl(control);\n }\n\n destroy() {\n this.#olMap.removeControl(this.#control);\n destroyResources(this.#resources);\n this.#control.dispose();\n }\n\n get attributionItems(): AttributionItem[] {\n return this.#attributionItems.value;\n }\n}\n\n// Overrides the OpenLayers widget to sanitize HTML attributions and to intercept the computed array of strings.\n// Note that this depends on OpenLayers internals that may change between versions.\nfunction interceptAttributions(attr: Attribution, onUpdate: (attributions: string[]) => void) {\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-function-type\n const originalCollectSourceAttributions = (attr as any).collectSourceAttributions_ as Function;\n if (!originalCollectSourceAttributions) {\n throw new Error(\"Internal error: failed to override attributions widget\");\n }\n\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n (attr as any).collectSourceAttributions_ = (frameState: FrameState) => {\n const rawAttributions = originalCollectSourceAttributions.call(\n attr,\n frameState\n ) as string[];\n if (!Array.isArray(rawAttributions)) {\n throw new Error(\"Internal error: unexpected attributions result (should be an array)\");\n }\n const sanitizedAttributions = rawAttributions.map((a) => sanitizeHtml(a));\n onUpdate(sanitizedAttributions);\n return sanitizedAttributions;\n };\n}\n\nfunction createDummyTargetNode() {\n const node = document.createElement(\"div\");\n node.style.display = \"none\";\n node.className = \"map-attribution-dummy-target\";\n return node;\n}\n"],"names":[],"mappings":"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"}
|
package/model/MapModel.d.ts
CHANGED
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
import { ReadonlyReactive } from "@conterra/reactivity-core";
|
|
2
2
|
import { EventSource } from "@conterra/reactivity-events";
|
|
3
3
|
import { HttpService } from "@open-pioneer/http";
|
|
4
|
-
import
|
|
5
|
-
import OlView from "ol/View";
|
|
4
|
+
import { PackageIntl } from "@open-pioneer/runtime";
|
|
6
5
|
import { Coordinate } from "ol/coordinate";
|
|
6
|
+
import { Geometry } from "ol/geom";
|
|
7
|
+
import OlMap from "ol/Map";
|
|
7
8
|
import { Projection } from "ol/proj";
|
|
9
|
+
import OlView from "ol/View";
|
|
8
10
|
import { LAYER_DEPS, LayerDependencies } from "../layers/shared/internals";
|
|
11
|
+
import { BaseFeature } from "../utils/BaseFeature";
|
|
9
12
|
import { InternalConstructorTag } from "../utils/InternalConstructorTag";
|
|
10
13
|
import { Highlight, HighlightOptions, Highlights, HighlightZoomOptions } from "./Highlights";
|
|
11
14
|
import { LayerCollection } from "./LayerCollection";
|
|
12
15
|
import { ExtentConfig } from "./MapConfig";
|
|
13
16
|
import { Overlays } from "./Overlays";
|
|
14
|
-
import { BaseFeature } from "../utils/BaseFeature";
|
|
15
|
-
import { Geometry } from "ol/geom";
|
|
16
|
-
import { PackageIntl } from "@open-pioneer/runtime";
|
|
17
17
|
export declare const DISPLAY_STATUS: unique symbol;
|
|
18
18
|
/**
|
|
19
19
|
* Options supported when calling {@link MapModel.zoom}.
|
package/model/MapModel.js
CHANGED
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
import { reactive, synchronized, computed } from '@conterra/reactivity-core';
|
|
2
2
|
import { emitter, emit } from '@conterra/reactivity-events';
|
|
3
3
|
import { createLogger, deprecated, isAbortError, createManualPromise, createAbortError } from '@open-pioneer/core';
|
|
4
|
-
import { unByKey } from 'ol/Observable.js';
|
|
5
4
|
import { createEmpty, extend, getCenter, getArea } from 'ol/extent.js';
|
|
5
|
+
import { unByKey } from 'ol/Observable.js';
|
|
6
6
|
import { getPointResolution } from 'ol/proj.js';
|
|
7
7
|
import { sourceId$3 as sourceId } from '../_virtual/source-info.js';
|
|
8
8
|
import { LAYER_DEPS } from '../layers/shared/internals.js';
|
|
9
|
-
import { INTERNAL_CONSTRUCTOR_TAG, assertInternalConstructor } from '../utils/InternalConstructorTag.js';
|
|
10
9
|
import { calculateBufferedExtent } from '../utils/geometry-utils.js';
|
|
10
|
+
import { INTERNAL_CONSTRUCTOR_TAG, assertInternalConstructor } from '../utils/InternalConstructorTag.js';
|
|
11
|
+
import { getGeometries } from './getGeometries.js';
|
|
11
12
|
import { Highlights, DESTROY_HIGHLIGHTS } from './Highlights.js';
|
|
12
13
|
import { LayerCollection } from './LayerCollection.js';
|
|
13
|
-
import { Overlays } from './Overlays.js';
|
|
14
|
-
import { getGeometries } from './getGeometries.js';
|
|
15
14
|
import { MapAttributions } from './MapAttributions.js';
|
|
15
|
+
import { Overlays } from './Overlays.js';
|
|
16
16
|
|
|
17
17
|
const LOG = createLogger(sourceId);
|
|
18
18
|
const DEFAULT_DPI = 25.4 / 0.28;
|