@open-pioneer/map 0.0.0-dev-20241120114910

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.
Files changed (115) hide show
  1. package/CHANGELOG.md +354 -0
  2. package/LICENSE +202 -0
  3. package/MapRegistryImpl.d.ts +17 -0
  4. package/MapRegistryImpl.js +91 -0
  5. package/MapRegistryImpl.js.map +1 -0
  6. package/README.md +871 -0
  7. package/_virtual/_virtual-pioneer-module_react-hooks.js +7 -0
  8. package/_virtual/_virtual-pioneer-module_react-hooks.js.map +1 -0
  9. package/api/BaseFeature.d.ts +31 -0
  10. package/api/MapConfig.d.ts +111 -0
  11. package/api/MapModel.d.ts +229 -0
  12. package/api/MapRegistry.d.ts +48 -0
  13. package/api/index.d.ts +15 -0
  14. package/api/layers/GroupLayer.d.ts +50 -0
  15. package/api/layers/GroupLayer.js +6 -0
  16. package/api/layers/GroupLayer.js.map +1 -0
  17. package/api/layers/SimpleLayer.d.ts +27 -0
  18. package/api/layers/SimpleLayer.js +6 -0
  19. package/api/layers/SimpleLayer.js.map +1 -0
  20. package/api/layers/WMSLayer.d.ts +57 -0
  21. package/api/layers/WMSLayer.js +6 -0
  22. package/api/layers/WMSLayer.js.map +1 -0
  23. package/api/layers/WMTSLayer.d.ts +33 -0
  24. package/api/layers/WMTSLayer.js +6 -0
  25. package/api/layers/WMTSLayer.js.map +1 -0
  26. package/api/layers/base.d.ts +242 -0
  27. package/api/layers/base.js +9 -0
  28. package/api/layers/base.js.map +1 -0
  29. package/api/layers/index.d.ts +5 -0
  30. package/api/shared.d.ts +10 -0
  31. package/assets/images/mapMarker.png +0 -0
  32. package/index.d.ts +1 -0
  33. package/index.js +15 -0
  34. package/index.js.map +1 -0
  35. package/internalTestSupport.d.ts +8 -0
  36. package/internalTestSupport.js +2 -0
  37. package/internalTestSupport.js.map +1 -0
  38. package/layers/BkgTopPlusOpen.d.ts +21 -0
  39. package/layers/BkgTopPlusOpen.js +61 -0
  40. package/layers/BkgTopPlusOpen.js.map +1 -0
  41. package/model/AbstractLayer.d.ts +25 -0
  42. package/model/AbstractLayer.js +186 -0
  43. package/model/AbstractLayer.js.map +1 -0
  44. package/model/AbstractLayerBase.d.ts +54 -0
  45. package/model/AbstractLayerBase.js +119 -0
  46. package/model/AbstractLayerBase.js.map +1 -0
  47. package/model/Highlights.d.ts +42 -0
  48. package/model/Highlights.js +272 -0
  49. package/model/Highlights.js.map +1 -0
  50. package/model/LayerCollectionImpl.d.ts +27 -0
  51. package/model/LayerCollectionImpl.js +228 -0
  52. package/model/LayerCollectionImpl.js.map +1 -0
  53. package/model/MapModelImpl.d.ts +46 -0
  54. package/model/MapModelImpl.js +271 -0
  55. package/model/MapModelImpl.js.map +1 -0
  56. package/model/SublayersCollectionImpl.d.ts +18 -0
  57. package/model/SublayersCollectionImpl.js +31 -0
  58. package/model/SublayersCollectionImpl.js.map +1 -0
  59. package/model/createMapModel.d.ts +4 -0
  60. package/model/createMapModel.js +157 -0
  61. package/model/createMapModel.js.map +1 -0
  62. package/model/layers/GroupLayerImpl.d.ts +39 -0
  63. package/model/layers/GroupLayerImpl.js +88 -0
  64. package/model/layers/GroupLayerImpl.js.map +1 -0
  65. package/model/layers/SimpleLayerImpl.d.ts +13 -0
  66. package/model/layers/SimpleLayerImpl.js +19 -0
  67. package/model/layers/SimpleLayerImpl.js.map +1 -0
  68. package/model/layers/WMSLayerImpl.d.ts +41 -0
  69. package/model/layers/WMSLayerImpl.js +297 -0
  70. package/model/layers/WMSLayerImpl.js.map +1 -0
  71. package/model/layers/WMTSLayerImpl.d.ts +17 -0
  72. package/model/layers/WMTSLayerImpl.js +156 -0
  73. package/model/layers/WMTSLayerImpl.js.map +1 -0
  74. package/package.json +86 -0
  75. package/projections.d.ts +27 -0
  76. package/projections.js +15 -0
  77. package/projections.js.map +1 -0
  78. package/services.d.ts +1 -0
  79. package/services.js +2 -0
  80. package/services.js.map +1 -0
  81. package/ui/CssProps.d.ts +9 -0
  82. package/ui/CssProps.js +13 -0
  83. package/ui/CssProps.js.map +1 -0
  84. package/ui/DefaultMapProvider.d.ts +39 -0
  85. package/ui/DefaultMapProvider.js +24 -0
  86. package/ui/DefaultMapProvider.js.map +1 -0
  87. package/ui/MapAnchor.d.ts +36 -0
  88. package/ui/MapAnchor.js +28 -0
  89. package/ui/MapAnchor.js.map +1 -0
  90. package/ui/MapContainer.d.ts +50 -0
  91. package/ui/MapContainer.js +191 -0
  92. package/ui/MapContainer.js.map +1 -0
  93. package/ui/MapContainerContext.d.ts +7 -0
  94. package/ui/MapContainerContext.js +17 -0
  95. package/ui/MapContainerContext.js.map +1 -0
  96. package/ui/computeMapAnchorStyles.d.ts +3 -0
  97. package/ui/computeMapAnchorStyles.js +51 -0
  98. package/ui/computeMapAnchorStyles.js.map +1 -0
  99. package/ui/hooks.d.ts +34 -0
  100. package/ui/hooks.js +73 -0
  101. package/ui/hooks.js.map +1 -0
  102. package/ui/styles.css +10 -0
  103. package/ui/styles.css.map +1 -0
  104. package/ui/useMapModel.d.ts +58 -0
  105. package/ui/useMapModel.js +59 -0
  106. package/ui/useMapModel.js.map +1 -0
  107. package/util/capabilities-utils.d.ts +2 -0
  108. package/util/capabilities-utils.js +11 -0
  109. package/util/capabilities-utils.js.map +1 -0
  110. package/util/geometry-utils.d.ts +7 -0
  111. package/util/geometry-utils.js +25 -0
  112. package/util/geometry-utils.js.map +1 -0
  113. package/util/ol-test-support.d.ts +2 -0
  114. package/util/ol-test-support.js +24 -0
  115. package/util/ol-test-support.js.map +1 -0
@@ -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 { ExternalReactive, reactive, external, Reactive } from \"@conterra/reactivity-core\";\nimport { createLogger, destroyResource, Resource } 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 OlSource from \"ol/source/Source\";\nimport {\n HealthCheckFunction,\n Layer,\n LayerBaseType,\n LayerConfig,\n LayerLoadState,\n SimpleLayerConfig\n} 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 LayerBaseType\n{\n #olLayer: OlBaseLayer;\n #isBaseLayer: boolean;\n #healthCheck?: string | HealthCheckFunction;\n\n #visible: ExternalReactive<boolean>;\n #loadState: Reactive<LayerLoadState>;\n\n #visibilityWatchKey: EventsKey | undefined;\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.#healthCheck = config.healthCheck;\n\n this.#visible = external(() => this.#olLayer.getVisible());\n this.#visibilityWatchKey = this.#olLayer.on(\"change:visible\", this.#visible.trigger);\n\n this.#loadState = reactive(getSourceState(getSource(this.#olLayer)));\n this.__setVisible(config.visible ?? true); // apply initial visibility\n }\n\n get visible(): boolean {\n return this.#visible.value;\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.value;\n }\n\n destroy() {\n if (this.__destroyed) {\n return;\n }\n\n this.#stateWatchResource = destroyResource(this.#stateWatchResource);\n this.#visibilityWatchKey && unByKey(this.#visibilityWatchKey);\n this.#visibilityWatchKey = undefined;\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 __attachToMap(map: MapModelImpl): void {\n super.__attachToMap(map);\n\n const { initial: initialState, resource: stateWatchResource } = watchLoadState(\n this,\n this.#healthCheck,\n (state) => {\n this.#loadState.value = state;\n }\n );\n this.#stateWatchResource = stateWatchResource;\n this.#loadState.value = initialState;\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 if (this.#olLayer.getVisible() !== newVisibility) {\n this.#olLayer.setVisible(newVisibility);\n }\n }\n\n abstract readonly type: \"simple\" | \"wms\" | \"wmts\" | \"group\";\n}\n\nfunction watchLoadState(\n layer: AbstractLayer,\n healthCheck: LayerConfig[\"healthCheck\"],\n onChange: (newState: LayerLoadState) => void\n): { initial: LayerLoadState; resource: Resource } {\n const olLayer = layer.olLayer;\n\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 = getSource(olLayer);\n const currentOlLayerState = getSourceState(currentSource);\n\n let currentLoadState: LayerLoadState = currentOlLayerState;\n let currentHealthState = \"loading\"; // initial state loading until health check finished\n\n // custom health check not needed when OpenLayers already returning an error state\n if (currentOlLayerState !== \"error\") {\n // health check only once during initialization\n doHealthCheck(layer, healthCheck).then((state: LayerLoadState) => {\n currentHealthState = state;\n updateState();\n });\n }\n\n const updateState = () => {\n const olLayerState = getSourceState(currentSource);\n const nextLoadState: LayerLoadState =\n currentHealthState === \"error\" ? \"error\" : olLayerState;\n\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 = getSource(olLayer);\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\nasync function doHealthCheck(\n layer: AbstractLayer,\n healthCheck: LayerConfig[\"healthCheck\"]\n): Promise<LayerLoadState> {\n if (healthCheck == null) {\n return \"loaded\";\n }\n\n let healthCheckFn: HealthCheckFunction;\n if (typeof healthCheck === \"function\") {\n healthCheckFn = healthCheck;\n } else if (typeof healthCheck === \"string\") {\n healthCheckFn = async () => {\n const httpService = layer.map.__sharedDependencies.httpService;\n const response = await httpService.fetch(healthCheck);\n if (response.ok) {\n return \"loaded\";\n }\n LOG.warn(\n `Health check failed for layer '${layer.id}' (http status ${response.status})`\n );\n return \"error\";\n };\n } else {\n LOG.error(\n `Unexpected object for 'healthCheck' parameter of layer '${layer.id}'`,\n healthCheck\n );\n return \"error\";\n }\n\n try {\n return await healthCheckFn(layer as Layer);\n } catch (e) {\n LOG.warn(`Health check failed for layer '${layer.id}'`, e);\n return \"error\";\n }\n}\n\nfunction getSource(olLayer: OlLayer | OlBaseLayer) {\n if (!(olLayer instanceof OlLayer)) {\n return undefined;\n }\n return (olLayer?.getSource() as OlSource | null) ?? undefined;\n}\n\nfunction getSourceState(olSource: OlSource | undefined) {\n const state = olSource?.getState();\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,54 @@
1
+ import { EventEmitter } from "@open-pioneer/core";
2
+ import { AnyLayer, AnyLayerBaseType, AnyLayerTypes, ChildrenCollection, LayerBaseEvents, Sublayer } from "../api";
3
+ import { GroupLayer } from "../api/layers/GroupLayer";
4
+ import { GroupLayerCollectionImpl } from "./layers/GroupLayerImpl";
5
+ import { MapModelImpl } from "./MapModelImpl";
6
+ import { SublayersCollectionImpl } from "./SublayersCollectionImpl";
7
+ export interface AbstractLayerBaseOptions {
8
+ id?: string;
9
+ title: string;
10
+ description?: string;
11
+ attributes?: Record<string, unknown>;
12
+ }
13
+ /**
14
+ * Base class for "normal" layers and sublayers alike to implement common properties
15
+ * such as id, title and attributes.
16
+ */
17
+ export declare abstract class AbstractLayerBase<AdditionalEvents = {}> extends EventEmitter<LayerBaseEvents & AdditionalEvents> implements AnyLayerBaseType {
18
+ #private;
19
+ constructor(config: AbstractLayerBaseOptions);
20
+ protected get __destroyed(): boolean;
21
+ get map(): MapModelImpl;
22
+ get id(): string;
23
+ get title(): string;
24
+ get description(): string;
25
+ get attributes(): Record<string | symbol, unknown>;
26
+ get parent(): AnyLayer | undefined;
27
+ get children(): ChildrenCollection<AnyLayer & AbstractLayerBase> | undefined;
28
+ abstract get type(): AnyLayerTypes;
29
+ abstract get visible(): boolean;
30
+ abstract get layers(): GroupLayerCollectionImpl | undefined;
31
+ abstract get sublayers(): SublayersCollectionImpl<Sublayer & AbstractLayerBase> | undefined;
32
+ abstract get legend(): string | undefined;
33
+ destroy(): void;
34
+ /**
35
+ * Attaches the layer to its owning map.
36
+ */
37
+ __attachToMap(map: MapModelImpl): void;
38
+ /**
39
+ * Attach group layers to its parent group layer.
40
+ * Called by the parent layer.
41
+ */
42
+ __attachToGroup(parent: GroupLayer): void;
43
+ /**
44
+ * Detach layer from parent group layer.
45
+ *
46
+ * Called by the parent group layer when destroyed or the layer gets removed.
47
+ */
48
+ __detachFromGroup(): void;
49
+ setTitle(newTitle: string): void;
50
+ setDescription(newDescription: string): void;
51
+ updateAttributes(newAttributes: Record<string | symbol, unknown>): void;
52
+ deleteAttribute(deleteAttribute: string | symbol): void;
53
+ abstract setVisible(newVisibility: boolean): void;
54
+ }
@@ -0,0 +1,119 @@
1
+ import { reactiveMap, computed, reactive, batch } from '@conterra/reactivity-core';
2
+ import { createLogger, EventEmitter } from '@open-pioneer/core';
3
+ import { v4 } from 'uuid';
4
+
5
+ const LOG = createLogger("map:AbstractLayerModel");
6
+ class AbstractLayerBase extends EventEmitter {
7
+ #map;
8
+ #parent;
9
+ #id;
10
+ #title;
11
+ #description;
12
+ #attributesMap = reactiveMap();
13
+ #attributes;
14
+ #destroyed = false;
15
+ constructor(config) {
16
+ super();
17
+ this.#id = config.id ?? v4();
18
+ this.#attributes = computed(() => {
19
+ return Object.fromEntries(this.#attributesMap.entries());
20
+ });
21
+ this.#title = reactive(config.title);
22
+ this.#description = reactive(config.description ?? "");
23
+ if (config.attributes) {
24
+ this.updateAttributes(config.attributes);
25
+ }
26
+ }
27
+ get __destroyed() {
28
+ return this.#destroyed;
29
+ }
30
+ get map() {
31
+ const map = this.#map;
32
+ if (!map) {
33
+ throw new Error(`Layer '${this.id}' has not been attached to a map yet.`);
34
+ }
35
+ return map;
36
+ }
37
+ get id() {
38
+ return this.#id;
39
+ }
40
+ get title() {
41
+ return this.#title.value;
42
+ }
43
+ get description() {
44
+ return this.#description.value;
45
+ }
46
+ get attributes() {
47
+ return this.#attributes.value;
48
+ }
49
+ get parent() {
50
+ return this.#parent;
51
+ }
52
+ get children() {
53
+ return this.layers ?? this.sublayers ?? void 0;
54
+ }
55
+ destroy() {
56
+ if (this.#destroyed) {
57
+ return;
58
+ }
59
+ this.#destroyed = true;
60
+ this.sublayers?.destroy();
61
+ this.layers?.destroy();
62
+ try {
63
+ this.emit("destroy");
64
+ } catch (e) {
65
+ LOG.warn(`Unexpected error from event listener during layer destruction:`, e);
66
+ }
67
+ }
68
+ /**
69
+ * Attaches the layer to its owning map.
70
+ */
71
+ __attachToMap(map) {
72
+ if (this.#map) {
73
+ throw new Error(
74
+ `Layer '${this.id}' has already been attached to the map '${this.map.id}'`
75
+ );
76
+ }
77
+ this.#map = map;
78
+ }
79
+ /**
80
+ * Attach group layers to its parent group layer.
81
+ * Called by the parent layer.
82
+ */
83
+ __attachToGroup(parent) {
84
+ if (this.#parent) {
85
+ throw new Error(
86
+ `Layer '${this.id}' has already been attached to the group layer '${this.#parent.id}'`
87
+ );
88
+ }
89
+ this.#parent = parent;
90
+ }
91
+ /**
92
+ * Detach layer from parent group layer.
93
+ *
94
+ * Called by the parent group layer when destroyed or the layer gets removed.
95
+ */
96
+ __detachFromGroup() {
97
+ this.#parent = void 0;
98
+ }
99
+ setTitle(newTitle) {
100
+ this.#title.value = newTitle;
101
+ }
102
+ setDescription(newDescription) {
103
+ this.#description.value = newDescription;
104
+ }
105
+ updateAttributes(newAttributes) {
106
+ const keys = Reflect.ownKeys(newAttributes);
107
+ batch(() => {
108
+ for (const key of keys) {
109
+ this.#attributesMap.set(key, newAttributes[key]);
110
+ }
111
+ });
112
+ }
113
+ deleteAttribute(deleteAttribute) {
114
+ this.#attributesMap.delete(deleteAttribute);
115
+ }
116
+ }
117
+
118
+ export { AbstractLayerBase };
119
+ //# 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 {\n batch,\n computed,\n reactive,\n Reactive,\n reactiveMap,\n ReadonlyReactive\n} from \"@conterra/reactivity-core\";\nimport { createLogger, EventEmitter } from \"@open-pioneer/core\";\nimport { v4 as uuid4v } from \"uuid\";\nimport {\n AnyLayer,\n AnyLayerBaseType,\n AnyLayerTypes,\n ChildrenCollection,\n LayerBaseEvents,\n Sublayer\n} from \"../api\";\nimport { GroupLayer } from \"../api/layers/GroupLayer\";\nimport { GroupLayerCollectionImpl } from \"./layers/GroupLayerImpl\";\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 AnyLayerBaseType\n{\n #map: MapModelImpl | undefined;\n #parent: AnyLayer | undefined;\n\n #id: string;\n #title: Reactive<string>;\n #description: Reactive<string>;\n #attributesMap = reactiveMap<string | symbol, unknown>();\n #attributes: ReadonlyReactive<Record<string | symbol, unknown>>;\n #destroyed = false;\n\n constructor(config: AbstractLayerBaseOptions) {\n super();\n this.#id = config.id ?? uuid4v();\n this.#attributes = computed(() => {\n return Object.fromEntries(this.#attributesMap.entries());\n });\n this.#title = reactive(config.title);\n this.#description = reactive(config.description ?? \"\");\n\n if (config.attributes) {\n this.updateAttributes(config.attributes);\n }\n }\n\n protected get __destroyed(): boolean {\n return this.#destroyed;\n }\n\n get map(): MapModelImpl {\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.value;\n }\n\n get description(): string {\n return this.#description.value;\n }\n\n get attributes(): Record<string | symbol, unknown> {\n return this.#attributes.value;\n }\n\n get parent(): AnyLayer | undefined {\n return this.#parent;\n }\n\n get children(): ChildrenCollection<AnyLayer & AbstractLayerBase> | undefined {\n return this.layers ?? this.sublayers ?? undefined;\n }\n\n abstract get type(): AnyLayerTypes;\n\n abstract get visible(): boolean;\n\n abstract get layers(): GroupLayerCollectionImpl | undefined;\n\n abstract get sublayers(): SublayersCollectionImpl<Sublayer & AbstractLayerBase> | undefined;\n\n abstract get legend(): string | undefined;\n\n destroy() {\n if (this.#destroyed) {\n return;\n }\n\n this.#destroyed = true;\n this.sublayers?.destroy();\n this.layers?.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 __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 /**\n * Attach group layers to its parent group layer.\n * Called by the parent layer.\n */\n __attachToGroup(parent: GroupLayer): void {\n if (this.#parent) {\n throw new Error(\n `Layer '${this.id}' has already been attached to the group layer '${this.#parent.id}'`\n );\n }\n this.#parent = parent;\n }\n\n /**\n * Detach layer from parent group layer.\n *\n * Called by the parent group layer when destroyed or the layer gets removed.\n */\n __detachFromGroup(): void {\n this.#parent = undefined;\n }\n\n setTitle(newTitle: string): void {\n this.#title.value = newTitle;\n }\n\n setDescription(newDescription: string): void {\n this.#description.value = newDescription;\n }\n\n updateAttributes(newAttributes: Record<string | symbol, unknown>): void {\n const keys = Reflect.ownKeys(newAttributes);\n batch(() => {\n for (const key of keys) {\n this.#attributesMap.set(key, newAttributes[key]);\n }\n });\n }\n\n deleteAttribute(deleteAttribute: string | symbol): void {\n this.#attributesMap.delete(deleteAttribute);\n }\n\n abstract setVisible(newVisibility: boolean): void;\n}\n"],"names":["uuid4v"],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ import { Feature } from "ol";
2
+ import OlMap from "ol/Map";
3
+ import { Geometry } from "ol/geom";
4
+ import VectorLayer from "ol/layer/Vector";
5
+ import VectorSource from "ol/source/Vector";
6
+ import { DisplayTarget, HighlightOptions, HighlightZoomOptions, ZoomOptions } from "../api/MapModel";
7
+ export declare class Highlights {
8
+ #private;
9
+ private olMap;
10
+ private olLayer;
11
+ private olSource;
12
+ private activeHighlights;
13
+ constructor(olMap: OlMap);
14
+ /**
15
+ * Getter for Hightlightlayer
16
+ * @returns Highlights.olLayer
17
+ */
18
+ getLayer(): VectorLayer<VectorSource<Feature<Geometry>>, Feature<Geometry>>;
19
+ /**
20
+ * This method removes all highlights before destroying the class
21
+ */
22
+ destroy(): void;
23
+ /**
24
+ * This method displays geometries or BaseFeatures with optional styling in the map
25
+ */
26
+ addHighlight(displayTarget: DisplayTarget[], highlightOptions: HighlightOptions | undefined): {
27
+ readonly isActive: boolean;
28
+ destroy(): void;
29
+ };
30
+ /**
31
+ * This method zoom to geometries or BaseFeatures
32
+ */
33
+ zoomToHighlight(displayTarget: DisplayTarget[], options: ZoomOptions | undefined): void;
34
+ /**
35
+ * This method displays geometries or BaseFeatures with optional styling in the map and executed a zoom
36
+ */
37
+ addHighlightAndZoom(displayTarget: DisplayTarget[], highlightZoomStyle: HighlightZoomOptions | undefined): {
38
+ readonly isActive: boolean;
39
+ destroy(): void;
40
+ };
41
+ clearHighlight(): void;
42
+ }
@@ -0,0 +1,272 @@
1
+ import { Feature } from 'ol';
2
+ import { createEmpty, extend, getCenter, getArea } from 'ol/extent.js';
3
+ import VectorLayer from 'ol/layer/Vector.js';
4
+ import VectorSource from 'ol/source/Vector.js';
5
+ import { Style, Icon, Stroke, Fill } from 'ol/style.js';
6
+ import { toFunction } from 'ol/style/Style.js';
7
+ import mapMarkerUrl from '../assets/images/mapMarker.png?url';
8
+ import './AbstractLayer.js';
9
+ import './layers/WMSLayerImpl.js';
10
+ import './layers/WMTSLayerImpl.js';
11
+ import 'ol/layer.js';
12
+ import './AbstractLayerBase.js';
13
+ import 'ol/proj/proj4.js';
14
+ import 'proj4';
15
+ import 'ol/source/WMTS.js';
16
+ import 'ol/tilegrid/WMTS.js';
17
+ import 'ol/Observable.js';
18
+ import 'ol/proj.js';
19
+ import 'react';
20
+ import 'react/jsx-runtime';
21
+ import '@open-pioneer/chakra-integration';
22
+ import '@open-pioneer/react-utils';
23
+ import 'react-dom';
24
+ import '../ui/MapContainerContext.js';
25
+ import '../ui/MapContainer.js';
26
+ import '@open-pioneer/runtime/react-integration';
27
+ import 'react-use';
28
+ import './MapModelImpl.js';
29
+ import '../ui/DefaultMapProvider.js';
30
+ import { TOPMOST_LAYER_Z } from './LayerCollectionImpl.js';
31
+
32
+ const DEFAULT_OL_POINT_ZOOM_LEVEL = 17;
33
+ const DEFAULT_OL_MAX_ZOOM_LEVEL = 20;
34
+ const DEFAULT_VIEW_PADDING = { top: 50, right: 20, bottom: 10, left: 20 };
35
+ class Highlights {
36
+ olMap;
37
+ olLayer;
38
+ olSource;
39
+ activeHighlights;
40
+ constructor(olMap) {
41
+ this.olMap = olMap;
42
+ this.olSource = new VectorSource({
43
+ features: void 0
44
+ });
45
+ this.olLayer = new VectorLayer({
46
+ className: "highlight-layer",
47
+ source: this.olSource,
48
+ style: function(feature, resolution) {
49
+ return resolveStyle(feature, resolution);
50
+ }
51
+ });
52
+ this.activeHighlights = /* @__PURE__ */ new Set();
53
+ this.olLayer.setZIndex(TOPMOST_LAYER_Z);
54
+ this.olMap.addLayer(this.olLayer);
55
+ }
56
+ /**
57
+ * Getter for Hightlightlayer
58
+ * @returns Highlights.olLayer
59
+ */
60
+ getLayer() {
61
+ return this.olLayer;
62
+ }
63
+ /**
64
+ * This method removes all highlights before destroying the class
65
+ */
66
+ destroy() {
67
+ this.clearHighlight();
68
+ }
69
+ /**
70
+ * Method of filtering out objects that are not geometry or have no property geometry.
71
+ */
72
+ #filterGeoobjects(geoObjects) {
73
+ const geometries = [];
74
+ geoObjects.forEach((item) => {
75
+ if ("getType" in item) geometries.push(item);
76
+ if ("geometry" in item && item.geometry) geometries.push(item.geometry);
77
+ });
78
+ return geometries;
79
+ }
80
+ /**
81
+ * This method displays geometries or BaseFeatures with optional styling in the map
82
+ */
83
+ addHighlight(displayTarget, highlightOptions) {
84
+ const geometries = this.#filterGeoobjects(displayTarget);
85
+ if (geometries.length === 0) {
86
+ return {
87
+ get isActive() {
88
+ return false;
89
+ },
90
+ destroy() {
91
+ }
92
+ };
93
+ }
94
+ const features = geometries.map((geometry) => {
95
+ const type = geometry.getType();
96
+ const feature = new Feature({
97
+ type,
98
+ geometry
99
+ });
100
+ feature.setStyle(getOwnStyle(type, highlightOptions?.highlightStyle));
101
+ return feature;
102
+ });
103
+ const source = this.olSource;
104
+ const highlights = this.activeHighlights;
105
+ const highlight = {
106
+ get isActive() {
107
+ return highlights.has(highlight);
108
+ },
109
+ destroy() {
110
+ if (!this.isActive) {
111
+ return;
112
+ }
113
+ for (const feature of features) {
114
+ source.removeFeature(feature);
115
+ }
116
+ highlights.delete(highlight);
117
+ }
118
+ };
119
+ source.addFeatures(features);
120
+ this.activeHighlights.add(highlight);
121
+ return highlight;
122
+ }
123
+ /**
124
+ * This method zoom to geometries or BaseFeatures
125
+ */
126
+ zoomToHighlight(displayTarget, options) {
127
+ const geometries = this.#filterGeoobjects(displayTarget);
128
+ if (geometries.length === 0) {
129
+ return;
130
+ }
131
+ let extent = createEmpty();
132
+ for (const geometry of geometries) {
133
+ extent = extend(extent, geometry.getExtent());
134
+ }
135
+ const center = getCenter(extent);
136
+ const isPoint = getArea(extent) === 0;
137
+ const zoomScale = isPoint ? options?.pointZoom ?? DEFAULT_OL_POINT_ZOOM_LEVEL : options?.maxZoom ?? DEFAULT_OL_MAX_ZOOM_LEVEL;
138
+ setCenter(this.olMap, center);
139
+ const {
140
+ top = 0,
141
+ right = 0,
142
+ bottom = 0,
143
+ left = 0
144
+ } = options?.viewPadding ?? DEFAULT_VIEW_PADDING;
145
+ const padding = [top, right, bottom, left];
146
+ zoomTo(this.olMap, extent, zoomScale, padding);
147
+ }
148
+ /**
149
+ * This method displays geometries or BaseFeatures with optional styling in the map and executed a zoom
150
+ */
151
+ addHighlightAndZoom(displayTarget, highlightZoomStyle) {
152
+ const result = this.addHighlight(displayTarget, highlightZoomStyle);
153
+ this.zoomToHighlight(displayTarget, highlightZoomStyle);
154
+ return result;
155
+ }
156
+ clearHighlight() {
157
+ for (const highlight of this.activeHighlights) {
158
+ highlight.destroy();
159
+ }
160
+ }
161
+ }
162
+ function setCenter(olMap, coordinates) {
163
+ coordinates && coordinates.length && olMap.getView().setCenter(coordinates);
164
+ }
165
+ function zoomTo(olMap, extent, zoomLevel, padding) {
166
+ if (extent) {
167
+ olMap.getView().fit(extent, { maxZoom: zoomLevel, padding });
168
+ } else {
169
+ zoomLevel && olMap.getView().setZoom(zoomLevel);
170
+ }
171
+ }
172
+ function resolveStyle(feature, resolution) {
173
+ const type = feature.get("type");
174
+ const style = toFunction(getDefaultStyle(type));
175
+ return style(feature, resolution);
176
+ }
177
+ function getOwnStyle(type, highlightStyle) {
178
+ if (highlightStyle && type in highlightStyle) {
179
+ const supportedType = type;
180
+ const ownStyle = highlightStyle[supportedType];
181
+ return ownStyle ? ownStyle : getDefaultStyle(type);
182
+ } else {
183
+ return getDefaultStyle(type);
184
+ }
185
+ }
186
+ function getDefaultStyle(type) {
187
+ if (type in defaultHighlightStyle) {
188
+ const supportedType = type;
189
+ return defaultHighlightStyle[supportedType];
190
+ } else {
191
+ return defaultHighlightStyle.Polygon;
192
+ }
193
+ }
194
+ const defaultHighlightStyle = {
195
+ "Point": new Style({
196
+ image: new Icon({
197
+ anchor: [0.5, 1],
198
+ src: mapMarkerUrl
199
+ })
200
+ }),
201
+ "MultiPoint": new Style({
202
+ image: new Icon({
203
+ anchor: [0.5, 1],
204
+ src: mapMarkerUrl
205
+ })
206
+ }),
207
+ "LineString": [
208
+ new Style({
209
+ stroke: new Stroke({
210
+ color: "#fff",
211
+ width: 5
212
+ })
213
+ }),
214
+ new Style({
215
+ stroke: new Stroke({
216
+ color: "#00ffff",
217
+ width: 3
218
+ })
219
+ })
220
+ ],
221
+ "MultiLineString": [
222
+ new Style({
223
+ stroke: new Stroke({
224
+ color: "#fff",
225
+ width: 5
226
+ })
227
+ }),
228
+ new Style({
229
+ stroke: new Stroke({
230
+ color: "#00ffff",
231
+ width: 3
232
+ })
233
+ })
234
+ ],
235
+ "Polygon": [
236
+ new Style({
237
+ stroke: new Stroke({
238
+ color: "#fff",
239
+ width: 5
240
+ })
241
+ }),
242
+ new Style({
243
+ stroke: new Stroke({
244
+ color: "#00ffff",
245
+ width: 3
246
+ }),
247
+ fill: new Fill({
248
+ color: "rgba(224,255,255,0.35)"
249
+ })
250
+ })
251
+ ],
252
+ "MultiPolygon": [
253
+ new Style({
254
+ stroke: new Stroke({
255
+ color: "#fff",
256
+ width: 5
257
+ })
258
+ }),
259
+ new Style({
260
+ stroke: new Stroke({
261
+ color: "#00ffff",
262
+ width: 3
263
+ }),
264
+ fill: new Fill({
265
+ color: "rgba(224,255,255,0.35)"
266
+ })
267
+ })
268
+ ]
269
+ };
270
+
271
+ export { Highlights };
272
+ //# sourceMappingURL=Highlights.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Highlights.js","sources":["Highlights.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2023 Open Pioneer project (https://github.com/open-pioneer)\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Feature } from \"ol\";\nimport OlMap from \"ol/Map\";\nimport { Coordinate } from \"ol/coordinate\";\nimport { Extent, createEmpty, extend, getArea, getCenter } from \"ol/extent\";\nimport { Geometry } from \"ol/geom\";\nimport VectorLayer from \"ol/layer/Vector\";\nimport VectorSource from \"ol/source/Vector\";\nimport { Fill, Icon, Stroke, Style } from \"ol/style\";\nimport { toFunction as toStyleFunction } from \"ol/style/Style\";\nimport {\n DisplayTarget,\n Highlight,\n HighlightOptions,\n HighlightStyle,\n HighlightZoomOptions,\n ZoomOptions\n} from \"../api/MapModel\";\nimport mapMarkerUrl from \"../assets/images/mapMarker.png?url\";\nimport { FeatureLike } from \"ol/Feature\";\nimport { TOPMOST_LAYER_Z } from \"../api\";\nimport { Type } from \"ol/geom/Geometry\";\n\ntype HighlightStyleType = keyof HighlightStyle;\n\nconst DEFAULT_OL_POINT_ZOOM_LEVEL = 17;\nconst DEFAULT_OL_MAX_ZOOM_LEVEL = 20;\nconst DEFAULT_VIEW_PADDING = { top: 50, right: 20, bottom: 10, left: 20 };\n\nexport class Highlights {\n private olMap: OlMap;\n\n private olLayer: VectorLayer<VectorSource, Feature>;\n private olSource: VectorSource<Feature<Geometry>>;\n private activeHighlights: Set<Highlight>;\n\n constructor(olMap: OlMap) {\n this.olMap = olMap;\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.activeHighlights = new Set();\n this.olLayer.setZIndex(TOPMOST_LAYER_Z);\n this.olMap.addLayer(this.olLayer);\n }\n\n /**\n * Getter for Hightlightlayer\n * @returns Highlights.olLayer\n */\n getLayer() {\n return this.olLayer;\n }\n\n /**\n * This method removes all highlights before destroying the class\n */\n destroy() {\n this.clearHighlight();\n }\n\n /**\n * Method of filtering out objects that are not geometry or have no property geometry.\n */\n #filterGeoobjects(geoObjects: DisplayTarget[]): Geometry[] {\n const geometries: Geometry[] = [];\n geoObjects.forEach((item) => {\n if (\"getType\" in item) geometries.push(item);\n if (\"geometry\" in item && item.geometry) geometries.push(item.geometry);\n });\n return geometries;\n }\n\n /**\n * This method displays geometries or BaseFeatures with optional styling in the map\n */\n addHighlight(displayTarget: DisplayTarget[], highlightOptions: HighlightOptions | undefined) {\n const geometries = this.#filterGeoobjects(displayTarget);\n\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, highlightOptions?.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 * This method zoom to geometries or BaseFeatures\n */\n zoomToHighlight(displayTarget: DisplayTarget[], options: ZoomOptions | undefined) {\n const geometries = this.#filterGeoobjects(displayTarget);\n\n if (geometries.length === 0) {\n return;\n }\n\n let extent = createEmpty();\n for (const geometry of geometries) {\n extent = extend(extent, geometry!.getExtent());\n }\n\n const center = getCenter(extent);\n const isPoint = getArea(extent) === 0;\n const zoomScale = isPoint\n ? (options?.pointZoom ?? DEFAULT_OL_POINT_ZOOM_LEVEL)\n : (options?.maxZoom ?? DEFAULT_OL_MAX_ZOOM_LEVEL);\n setCenter(this.olMap, center);\n\n const {\n top = 0,\n right = 0,\n bottom = 0,\n left = 0\n } = options?.viewPadding ?? DEFAULT_VIEW_PADDING;\n const padding = [top, right, bottom, left];\n zoomTo(this.olMap, extent, zoomScale, padding);\n }\n\n /**\n * This method displays geometries or BaseFeatures with optional styling in the map and executed a zoom\n */\n addHighlightAndZoom(\n displayTarget: DisplayTarget[],\n highlightZoomStyle: HighlightZoomOptions | undefined\n ) {\n const result = this.addHighlight(displayTarget, highlightZoomStyle);\n this.zoomToHighlight(displayTarget, highlightZoomStyle);\n return result;\n }\n\n clearHighlight() {\n for (const highlight of this.activeHighlights) {\n highlight.destroy();\n }\n }\n}\n\nfunction setCenter(olMap: OlMap, coordinates: Coordinate | undefined) {\n coordinates && coordinates.length && olMap.getView().setCenter(coordinates);\n}\n\nfunction zoomTo(\n olMap: OlMap,\n extent: Extent | undefined,\n zoomLevel: number | undefined,\n padding: number[]\n) {\n if (extent) {\n olMap.getView().fit(extent, { maxZoom: zoomLevel, padding: padding });\n } else {\n zoomLevel && olMap.getView().setZoom(zoomLevel);\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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"}
@@ -0,0 +1,27 @@
1
+ import OlBaseLayer from "ol/layer/Base";
2
+ import { Layer, LayerCollection, LayerRetrievalOptions, AnyLayer } from "../api";
3
+ import { MapModelImpl } from "./MapModelImpl";
4
+ /**
5
+ * Z index for layers that should always be rendered on top of all other layers.
6
+ * Note that this is an internal, unstable property!
7
+ *
8
+ * @internal
9
+ */
10
+ export declare const TOPMOST_LAYER_Z = 9999999;
11
+ /**
12
+ * Manages the (top-level) content of the map.
13
+ */
14
+ export declare class LayerCollectionImpl implements LayerCollection {
15
+ #private;
16
+ constructor(map: MapModelImpl);
17
+ destroy(): void;
18
+ addLayer(layer: Layer): void;
19
+ getBaseLayers(): Layer[];
20
+ getActiveBaseLayer(): Layer | undefined;
21
+ activateBaseLayer(id: string | undefined): boolean;
22
+ getOperationalLayers(options?: LayerRetrievalOptions): Layer[];
23
+ getAllLayers(options?: LayerRetrievalOptions): Layer[];
24
+ getLayerById(id: string): AnyLayer | undefined;
25
+ removeLayerById(id: string): void;
26
+ getLayerByRawInstance(layer: OlBaseLayer): Layer | undefined;
27
+ }