@open-pioneer/map 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (81) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/LICENSE +202 -0
  3. package/MapRegistryImpl.d.ts +15 -0
  4. package/MapRegistryImpl.js +89 -0
  5. package/MapRegistryImpl.js.map +1 -0
  6. package/README.md +653 -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/MapConfig.d.ts +111 -0
  10. package/api/MapModel.d.ts +112 -0
  11. package/api/MapRegistry.d.ts +54 -0
  12. package/api/index.d.ts +12 -0
  13. package/api/layers/SimpleLayer.d.ts +24 -0
  14. package/api/layers/SimpleLayer.js +6 -0
  15. package/api/layers/SimpleLayer.js.map +1 -0
  16. package/api/layers/WMSLayer.d.ts +42 -0
  17. package/api/layers/WMSLayer.js +6 -0
  18. package/api/layers/WMSLayer.js.map +1 -0
  19. package/api/layers/base.d.ts +170 -0
  20. package/api/layers/index.d.ts +3 -0
  21. package/api/shared.d.ts +10 -0
  22. package/index.d.ts +1 -0
  23. package/index.js +11 -0
  24. package/index.js.map +1 -0
  25. package/layers/BkgTopPlusOpen.d.ts +21 -0
  26. package/layers/BkgTopPlusOpen.js +61 -0
  27. package/layers/BkgTopPlusOpen.js.map +1 -0
  28. package/model/AbstractLayer.d.ts +24 -0
  29. package/model/AbstractLayer.js +133 -0
  30. package/model/AbstractLayer.js.map +1 -0
  31. package/model/AbstractLayerBase.d.ts +37 -0
  32. package/model/AbstractLayerBase.js +106 -0
  33. package/model/AbstractLayerBase.js.map +1 -0
  34. package/model/LayerCollectionImpl.d.ts +27 -0
  35. package/model/LayerCollectionImpl.js +226 -0
  36. package/model/LayerCollectionImpl.js.map +1 -0
  37. package/model/MapModelImpl.d.ts +19 -0
  38. package/model/MapModelImpl.js +179 -0
  39. package/model/MapModelImpl.js.map +1 -0
  40. package/model/SublayersCollectionImpl.d.ts +15 -0
  41. package/model/SublayersCollectionImpl.js +29 -0
  42. package/model/SublayersCollectionImpl.js.map +1 -0
  43. package/model/createMapModel.d.ts +3 -0
  44. package/model/createMapModel.js +154 -0
  45. package/model/createMapModel.js.map +1 -0
  46. package/model/layers/SimpleLayerImpl.d.ts +9 -0
  47. package/model/layers/SimpleLayerImpl.js +10 -0
  48. package/model/layers/SimpleLayerImpl.js.map +1 -0
  49. package/model/layers/WMSLayerImpl.d.ts +29 -0
  50. package/model/layers/WMSLayerImpl.js +177 -0
  51. package/model/layers/WMSLayerImpl.js.map +1 -0
  52. package/package.json +67 -0
  53. package/projections.d.ts +27 -0
  54. package/projections.js +15 -0
  55. package/projections.js.map +1 -0
  56. package/services.d.ts +1 -0
  57. package/services.js +2 -0
  58. package/services.js.map +1 -0
  59. package/ui/MapAnchor.d.ts +49 -0
  60. package/ui/MapAnchor.js +91 -0
  61. package/ui/MapAnchor.js.map +1 -0
  62. package/ui/MapContainer.d.ts +60 -0
  63. package/ui/MapContainer.js +192 -0
  64. package/ui/MapContainer.js.map +1 -0
  65. package/ui/MapContext.d.ts +11 -0
  66. package/ui/MapContext.js +17 -0
  67. package/ui/MapContext.js.map +1 -0
  68. package/ui/hooks.d.ts +24 -0
  69. package/ui/hooks.js +73 -0
  70. package/ui/hooks.js.map +1 -0
  71. package/ui/styles.css +3 -0
  72. package/ui/styles.css.map +1 -0
  73. package/ui/useMapModel.d.ts +31 -0
  74. package/ui/useMapModel.js +21 -0
  75. package/ui/useMapModel.js.map +1 -0
  76. package/util/defer.d.ts +18 -0
  77. package/util/defer.js +21 -0
  78. package/util/defer.js.map +1 -0
  79. package/util/ol-test-support.d.ts +2 -0
  80. package/util/ol-test-support.js +24 -0
  81. package/util/ol-test-support.js.map +1 -0
@@ -0,0 +1,179 @@
1
+ import { createLogger, EventEmitter, isAbortError, createManualPromise, createAbortError } from '@open-pioneer/core';
2
+ import { unByKey } from 'ol/Observable';
3
+ import { getCenter } from 'ol/extent';
4
+ import { LayerCollectionImpl } from './LayerCollectionImpl.js';
5
+
6
+ const LOG = createLogger("map:MapModel");
7
+ class MapModelImpl extends EventEmitter {
8
+ #id;
9
+ #olMap;
10
+ #layers = new LayerCollectionImpl(this);
11
+ #destroyed = false;
12
+ #container;
13
+ #initialExtent;
14
+ #targetWatchKey;
15
+ #abortController = new AbortController();
16
+ #displayStatus;
17
+ #displayWaiter;
18
+ constructor(properties) {
19
+ super();
20
+ this.#id = properties.id;
21
+ this.#olMap = properties.olMap;
22
+ this.#initialExtent = properties.initialExtent;
23
+ this.#displayStatus = "waiting";
24
+ this.#initializeView().then(
25
+ () => {
26
+ this.#displayStatus = "ready";
27
+ this.#displayWaiter?.resolve();
28
+ this.#displayWaiter = void 0;
29
+ },
30
+ (error) => {
31
+ if (!isAbortError(error)) {
32
+ LOG.error(`Failed to initialize map`, error);
33
+ }
34
+ this.#displayStatus = "error";
35
+ this.#displayWaiter?.reject(new Error(`Failed to initialize map.`));
36
+ this.#displayWaiter = void 0;
37
+ }
38
+ );
39
+ this.#targetWatchKey = this.#olMap.on("change:target", () => {
40
+ this.#onTargetChanged();
41
+ });
42
+ }
43
+ destroy() {
44
+ if (this.#destroyed) {
45
+ return;
46
+ }
47
+ this.#destroyed = true;
48
+ try {
49
+ this.emit("destroy");
50
+ } catch (e) {
51
+ LOG.warn(`Unexpected error from event listener during map model destruction:`, e);
52
+ }
53
+ if (this.#targetWatchKey) {
54
+ unByKey(this.#targetWatchKey);
55
+ }
56
+ this.#targetWatchKey = void 0;
57
+ this.#abortController.abort();
58
+ this.#displayWaiter?.reject(new Error("Map model was destroyed."));
59
+ this.#layers.destroy();
60
+ this.#olMap.dispose();
61
+ }
62
+ get id() {
63
+ return this.#id;
64
+ }
65
+ get olMap() {
66
+ return this.#olMap;
67
+ }
68
+ get layers() {
69
+ return this.#layers;
70
+ }
71
+ get container() {
72
+ return this.#container;
73
+ }
74
+ get initialExtent() {
75
+ return this.#initialExtent;
76
+ }
77
+ whenDisplayed() {
78
+ if (this.#destroyed) {
79
+ return Promise.reject(new Error("Map model was destroyed."));
80
+ }
81
+ if (this.#displayStatus === "error") {
82
+ return Promise.reject(new Error(`Failed to initialize map.`));
83
+ }
84
+ if (this.#displayStatus === "ready") {
85
+ return Promise.resolve();
86
+ }
87
+ return (this.#displayWaiter ??= createManualPromise()).promise;
88
+ }
89
+ /**
90
+ * Waits for the map to be displayed and then initializes the view (if necessary).
91
+ *
92
+ * May simply resolve when done, or throw an error when a problem occurs.
93
+ * AbortError is thrown when cancelled via `this.#abortController`, for example
94
+ * when the map model is destroyed before it has ever been displayed.
95
+ */
96
+ async #initializeView() {
97
+ try {
98
+ await waitForMapSize(this.olMap, this.#abortController.signal);
99
+ } catch (e) {
100
+ if (isAbortError(e)) {
101
+ throw e;
102
+ }
103
+ throw new Error(`Failed to wait for the map to be displayed.`, { cause: e });
104
+ }
105
+ try {
106
+ const olMap = this.#olMap;
107
+ const view = olMap.getView();
108
+ if (this.#initialExtent) {
109
+ const extent = this.#initialExtent;
110
+ const olExtent = [extent.xMin, extent.yMin, extent.xMax, extent.yMax];
111
+ const olCenter = getCenter(olExtent);
112
+ const resolution = view.getResolutionForExtent(olExtent);
113
+ LOG.debug(`Applying initial extent`, extent);
114
+ LOG.debug(` Computed center:`, olCenter);
115
+ LOG.debug(` Computed resolution:`, resolution);
116
+ view.setCenter(olCenter);
117
+ view.setResolution(resolution);
118
+ } else {
119
+ const olExtent = view.calculateExtent();
120
+ const [xMin = 0, yMin = 0, xMax = 0, yMax = 0] = olExtent;
121
+ const extent = { xMin, yMin, xMax, yMax };
122
+ LOG.debug(`Detected initial extent`, extent);
123
+ this.#initialExtent = extent;
124
+ this.emit("changed:initialExtent");
125
+ this.emit("changed");
126
+ }
127
+ } catch (e) {
128
+ throw new Error(`Failed to apply the initial extent.`, { cause: e });
129
+ }
130
+ }
131
+ #onTargetChanged() {
132
+ const newContainer = this.#olMap.getTargetElement() ?? void 0;
133
+ if (this.#container !== newContainer) {
134
+ this.#container = newContainer;
135
+ this.emit("changed:container");
136
+ this.emit("changed");
137
+ }
138
+ }
139
+ }
140
+ function waitForMapSize(olMap, signal) {
141
+ const promise = new Promise((resolve, reject) => {
142
+ let eventKey;
143
+ function checkSize() {
144
+ const currentSize = olMap.getSize() ?? [];
145
+ const [width = 0, height = 0] = currentSize;
146
+ if (currentSize && width > 0 && height > 0) {
147
+ finish();
148
+ }
149
+ }
150
+ function onAbort() {
151
+ finish(createAbortError());
152
+ }
153
+ function finish(error) {
154
+ if (eventKey) {
155
+ unByKey(eventKey);
156
+ eventKey = void 0;
157
+ }
158
+ signal.removeEventListener("abort", onAbort);
159
+ if (error) {
160
+ reject(error);
161
+ } else {
162
+ resolve(wait(25));
163
+ }
164
+ }
165
+ if (signal.aborted) {
166
+ finish(createAbortError());
167
+ return;
168
+ }
169
+ signal.addEventListener("abort", onAbort);
170
+ eventKey = olMap.on("change:size", checkSize);
171
+ });
172
+ return promise;
173
+ }
174
+ function wait(milliseconds) {
175
+ return new Promise((resolve) => setTimeout(resolve, milliseconds));
176
+ }
177
+
178
+ export { MapModelImpl };
179
+ //# sourceMappingURL=MapModelImpl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MapModelImpl.js","sources":["MapModelImpl.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2023 Open Pioneer project (https://github.com/open-pioneer)\n// SPDX-License-Identifier: Apache-2.0\nimport {\n EventEmitter,\n ManualPromise,\n createAbortError,\n createLogger,\n createManualPromise,\n isAbortError\n} from \"@open-pioneer/core\";\nimport OlMap from \"ol/Map\";\nimport { unByKey } from \"ol/Observable\";\nimport { EventsKey } from \"ol/events\";\nimport { getCenter } from \"ol/extent\";\nimport { ExtentConfig, MapModel, MapModelEvents } from \"../api\";\nimport { LayerCollectionImpl } from \"./LayerCollectionImpl\";\n\nconst LOG = createLogger(\"map:MapModel\");\n\nexport class MapModelImpl extends EventEmitter<MapModelEvents> implements MapModel {\n readonly #id: string;\n readonly #olMap: OlMap;\n readonly #layers = new LayerCollectionImpl(this);\n #destroyed = false;\n #container: HTMLElement | undefined;\n #initialExtent: ExtentConfig | undefined;\n #targetWatchKey: EventsKey | undefined;\n\n readonly #abortController = new AbortController();\n #displayStatus: \"waiting\" | \"ready\" | \"error\";\n #displayWaiter: ManualPromise<void> | undefined;\n\n constructor(properties: { id: string; olMap: OlMap; initialExtent: ExtentConfig | undefined }) {\n super();\n this.#id = properties.id;\n this.#olMap = properties.olMap;\n this.#initialExtent = properties.initialExtent;\n\n this.#displayStatus = \"waiting\";\n this.#initializeView().then(\n () => {\n this.#displayStatus = \"ready\";\n this.#displayWaiter?.resolve();\n this.#displayWaiter = undefined;\n },\n (error) => {\n if (!isAbortError(error)) {\n LOG.error(`Failed to initialize map`, error);\n }\n\n this.#displayStatus = \"error\";\n this.#displayWaiter?.reject(new Error(`Failed to initialize map.`));\n this.#displayWaiter = undefined;\n }\n );\n this.#targetWatchKey = this.#olMap.on(\"change:target\", () => {\n this.#onTargetChanged();\n });\n }\n\n destroy() {\n if (this.#destroyed) {\n return;\n }\n\n this.#destroyed = true;\n try {\n this.emit(\"destroy\");\n } catch (e) {\n LOG.warn(`Unexpected error from event listener during map model destruction:`, e);\n }\n\n if (this.#targetWatchKey) {\n unByKey(this.#targetWatchKey);\n }\n this.#targetWatchKey = undefined;\n this.#abortController.abort();\n this.#displayWaiter?.reject(new Error(\"Map model was destroyed.\"));\n this.#layers.destroy();\n this.#olMap.dispose();\n }\n\n get id(): string {\n return this.#id;\n }\n\n get olMap(): OlMap {\n return this.#olMap;\n }\n\n get layers(): LayerCollectionImpl {\n return this.#layers;\n }\n\n get container(): HTMLElement | undefined {\n return this.#container;\n }\n\n get initialExtent(): ExtentConfig | undefined {\n return this.#initialExtent;\n }\n\n whenDisplayed(): Promise<void> {\n if (this.#destroyed) {\n return Promise.reject(new Error(\"Map model was destroyed.\"));\n }\n if (this.#displayStatus === \"error\") {\n return Promise.reject(new Error(`Failed to initialize map.`));\n }\n if (this.#displayStatus === \"ready\") {\n return Promise.resolve();\n }\n return (this.#displayWaiter ??= createManualPromise()).promise;\n }\n\n /**\n * Waits for the map to be displayed and then initializes the view (if necessary).\n *\n * May simply resolve when done, or throw an error when a problem occurs.\n * AbortError is thrown when cancelled via `this.#abortController`, for example\n * when the map model is destroyed before it has ever been displayed.\n */\n async #initializeView(): Promise<void> {\n try {\n await waitForMapSize(this.olMap, this.#abortController.signal); // may throw on cancel\n } catch (e) {\n if (isAbortError(e)) {\n throw e;\n }\n throw new Error(`Failed to wait for the map to be displayed.`, { cause: e });\n }\n\n try {\n const olMap = this.#olMap;\n const view = olMap.getView();\n\n if (this.#initialExtent) {\n // Initial extent was set from the outside. We simply ensure that it gets displayed by the map.\n const extent = this.#initialExtent;\n const olExtent = [extent.xMin, extent.yMin, extent.xMax, extent.yMax];\n\n const olCenter = getCenter(olExtent);\n const resolution = view.getResolutionForExtent(olExtent);\n LOG.debug(`Applying initial extent`, extent);\n LOG.debug(` Computed center:`, olCenter);\n LOG.debug(` Computed resolution:`, resolution);\n\n view.setCenter(olCenter);\n view.setResolution(resolution);\n } else {\n // Initial extent was NOT set from the outside.\n // We detect whatever the view is displaying and consider it to be the initial extent.\n const olExtent = view.calculateExtent();\n const [xMin = 0, yMin = 0, xMax = 0, yMax = 0] = olExtent;\n const extent: ExtentConfig = { xMin, yMin, xMax, yMax };\n LOG.debug(`Detected initial extent`, extent);\n\n this.#initialExtent = extent;\n this.emit(\"changed:initialExtent\");\n this.emit(\"changed\");\n }\n } catch (e) {\n throw new Error(`Failed to apply the initial extent.`, { cause: e });\n }\n }\n\n #onTargetChanged() {\n const newContainer: HTMLElement | undefined = this.#olMap.getTargetElement() ?? undefined;\n if (this.#container !== newContainer) {\n this.#container = newContainer;\n this.emit(\"changed:container\");\n this.emit(\"changed\");\n }\n }\n}\n\nfunction waitForMapSize(olMap: OlMap, signal: AbortSignal): Promise<void> {\n const promise = new Promise<void>((resolve, reject) => {\n let eventKey: EventsKey | undefined;\n\n function checkSize() {\n const currentSize = olMap.getSize() ?? [];\n const [width = 0, height = 0] = currentSize;\n if (currentSize && width > 0 && height > 0) {\n finish();\n }\n }\n\n function onAbort() {\n finish(createAbortError());\n }\n\n function finish(error?: Error | undefined) {\n if (eventKey) {\n unByKey(eventKey);\n eventKey = undefined;\n }\n signal.removeEventListener(\"abort\", onAbort);\n\n if (error) {\n reject(error);\n } else {\n resolve(wait(25)); // Give the map some time to render\n }\n }\n\n if (signal.aborted) {\n finish(createAbortError());\n return;\n }\n\n signal.addEventListener(\"abort\", onAbort);\n eventKey = olMap.on(\"change:size\", checkSize);\n });\n return promise;\n}\n\nfunction wait(milliseconds: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, milliseconds));\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import { EventEmitter } from "@open-pioneer/core";
2
+ import { LayerRetrievalOptions, Sublayer as SublayerInterface, SublayersCollection, SublayersCollectionEvents } from "../api";
3
+ import { AbstractLayerBase } from "./AbstractLayerBase";
4
+ export declare class SublayersCollectionImpl<Sublayer extends SublayerInterface & AbstractLayerBase> extends EventEmitter<SublayersCollectionEvents> implements SublayersCollection {
5
+ #private;
6
+ constructor(sublayers: Sublayer[]);
7
+ destroy(): void;
8
+ getSublayers(_options?: LayerRetrievalOptions | undefined): Sublayer[];
9
+ /**
10
+ * Returns a reference to the internal sublayers array.
11
+ *
12
+ * NOTE: Do not modify directly!
13
+ */
14
+ __getRawSublayers(): Sublayer[];
15
+ }
@@ -0,0 +1,29 @@
1
+ import { EventEmitter } from '@open-pioneer/core';
2
+
3
+ class SublayersCollectionImpl extends EventEmitter {
4
+ #sublayers;
5
+ constructor(sublayers) {
6
+ super();
7
+ this.#sublayers = sublayers;
8
+ }
9
+ destroy() {
10
+ for (const layer of this.#sublayers) {
11
+ layer.destroy();
12
+ }
13
+ this.#sublayers = [];
14
+ }
15
+ getSublayers(_options) {
16
+ return this.#sublayers.slice();
17
+ }
18
+ /**
19
+ * Returns a reference to the internal sublayers array.
20
+ *
21
+ * NOTE: Do not modify directly!
22
+ */
23
+ __getRawSublayers() {
24
+ return this.#sublayers;
25
+ }
26
+ }
27
+
28
+ export { SublayersCollectionImpl };
29
+ //# sourceMappingURL=SublayersCollectionImpl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SublayersCollectionImpl.js","sources":["SublayersCollectionImpl.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2023 Open Pioneer project (https://github.com/open-pioneer)\n// SPDX-License-Identifier: Apache-2.0\nimport { EventEmitter } from \"@open-pioneer/core\";\nimport {\n LayerRetrievalOptions,\n Sublayer as SublayerInterface,\n SublayersCollection,\n SublayersCollectionEvents\n} from \"../api\";\nimport { AbstractLayerBase } from \"./AbstractLayerBase\";\n\n// NOTE: adding / removing sublayers currently not supported\nexport class SublayersCollectionImpl<Sublayer extends SublayerInterface & AbstractLayerBase>\n extends EventEmitter<SublayersCollectionEvents>\n implements SublayersCollection\n{\n #sublayers: Sublayer[];\n\n constructor(sublayers: Sublayer[]) {\n super();\n this.#sublayers = sublayers;\n }\n\n destroy() {\n for (const layer of this.#sublayers) {\n layer.destroy();\n }\n this.#sublayers = [];\n }\n\n getSublayers(_options?: LayerRetrievalOptions | undefined): Sublayer[] {\n // NOTE: options are ignored because layers are always ordered at this time.\n return this.#sublayers.slice();\n }\n\n /**\n * Returns a reference to the internal sublayers array.\n *\n * NOTE: Do not modify directly!\n */\n __getRawSublayers(): Sublayer[] {\n return this.#sublayers;\n }\n}\n"],"names":[],"mappings":";;AAYO,MAAM,gCACD,YAEZ,CAAA;AAAA,EACI,UAAA,CAAA;AAAA,EAEA,YAAY,SAAuB,EAAA;AAC/B,IAAM,KAAA,EAAA,CAAA;AACN,IAAA,IAAA,CAAK,UAAa,GAAA,SAAA,CAAA;AAAA,GACtB;AAAA,EAEA,OAAU,GAAA;AACN,IAAW,KAAA,MAAA,KAAA,IAAS,KAAK,UAAY,EAAA;AACjC,MAAA,KAAA,CAAM,OAAQ,EAAA,CAAA;AAAA,KAClB;AACA,IAAA,IAAA,CAAK,aAAa,EAAC,CAAA;AAAA,GACvB;AAAA,EAEA,aAAa,QAA0D,EAAA;AAEnE,IAAO,OAAA,IAAA,CAAK,WAAW,KAAM,EAAA,CAAA;AAAA,GACjC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,iBAAgC,GAAA;AAC5B,IAAA,OAAO,IAAK,CAAA,UAAA,CAAA;AAAA,GAChB;AACJ;;;;"}
@@ -0,0 +1,3 @@
1
+ import { MapModelImpl } from "./MapModelImpl";
2
+ import { MapConfig } from "../api";
3
+ export declare function createMapModel(mapId: string, mapConfig: MapConfig): Promise<MapModelImpl>;
@@ -0,0 +1,154 @@
1
+ import { createLogger } from '@open-pioneer/core';
2
+ import OlMap from 'ol/Map';
3
+ import View from 'ol/View';
4
+ import Attribution from 'ol/control/Attribution';
5
+ import { getCenter } from 'ol/extent';
6
+ import TileLayer from 'ol/layer/Tile';
7
+ import { get } from 'ol/proj';
8
+ import OSM from 'ol/source/OSM';
9
+ import { defaults, DragZoom } from 'ol/interaction';
10
+ import { MapModelImpl } from './MapModelImpl.js';
11
+ import { registerProjections } from '../projections.js';
12
+ import { patchOpenLayersClassesForTesting } from '../util/ol-test-support.js';
13
+
14
+ registerProjections({
15
+ "EPSG:25832": "+proj=utm +zone=32 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +type=crs",
16
+ "EPSG:25833": "+proj=utm +zone=33 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +type=crs"
17
+ });
18
+ const LOG = createLogger("map:createMapModel");
19
+ async function createMapModel(mapId, mapConfig) {
20
+ return await new MapModelFactory(mapId, mapConfig).createMapModel();
21
+ }
22
+ class MapModelFactory {
23
+ mapId;
24
+ mapConfig;
25
+ constructor(mapId, mapConfig) {
26
+ this.mapId = mapId;
27
+ this.mapConfig = mapConfig;
28
+ }
29
+ async createMapModel() {
30
+ const mapId = this.mapId;
31
+ const mapConfig = this.mapConfig;
32
+ const { view: viewOption, ...rawOlOptions } = mapConfig.advanced ?? {};
33
+ const mapOptions = {
34
+ ...rawOlOptions
35
+ };
36
+ if (!mapOptions.controls) {
37
+ mapOptions.controls = [new Attribution({ collapsible: false })];
38
+ }
39
+ if (!mapOptions.interactions) {
40
+ const shiftCtrlKeysOnly = (mapBrowserEvent) => {
41
+ const originalEvent = mapBrowserEvent.originalEvent;
42
+ return (originalEvent.metaKey || originalEvent.ctrlKey) && originalEvent.shiftKey;
43
+ };
44
+ mapOptions.interactions = defaults({
45
+ dragPan: true,
46
+ altShiftDragRotate: false,
47
+ pinchRotate: false,
48
+ mouseWheelZoom: true
49
+ }).extend([new DragZoom({ out: true, condition: shiftCtrlKeysOnly })]);
50
+ }
51
+ const view = await viewOption ?? {};
52
+ this.initializeViewOptions(view);
53
+ mapOptions.view = view instanceof View ? view : new View(view);
54
+ if (!mapOptions.layers && !mapConfig.layers) {
55
+ mapOptions.layers = [
56
+ new TileLayer({
57
+ source: new OSM()
58
+ })
59
+ ];
60
+ }
61
+ const initialView = mapConfig.initialView;
62
+ const initialExtent = initialView?.kind === "extent" ? initialView.extent : void 0;
63
+ LOG.debug(`Constructing open layers map with options`, mapOptions);
64
+ if (import.meta.env.VITEST) {
65
+ patchOpenLayersClassesForTesting();
66
+ }
67
+ const olMap = new OlMap(mapOptions);
68
+ const mapModel = new MapModelImpl({
69
+ id: mapId,
70
+ olMap,
71
+ initialExtent
72
+ });
73
+ try {
74
+ if (mapConfig.layers) {
75
+ for (const layerConfig of mapConfig.layers) {
76
+ mapModel.layers.addLayer(layerConfig);
77
+ }
78
+ }
79
+ return mapModel;
80
+ } catch (e) {
81
+ mapModel.destroy();
82
+ throw e;
83
+ }
84
+ }
85
+ initializeViewOptions(view) {
86
+ const mapId = this.mapId;
87
+ const mapConfig = this.mapConfig;
88
+ if (view instanceof View) {
89
+ const warn = (prop) => {
90
+ LOG.warn(
91
+ `The advanced configuration for map id '${mapId}' has provided a fully constructed view instance: ${prop} cannot be applied.
92
+ Use ViewOptions instead of a View instance.`
93
+ );
94
+ };
95
+ if (mapConfig.projection != null) {
96
+ warn("projection");
97
+ }
98
+ if (mapConfig.initialView != null) {
99
+ warn("initialView");
100
+ }
101
+ return;
102
+ }
103
+ const projection = view.projection = this.initializeProjection(mapConfig.projection);
104
+ const initialView = mapConfig.initialView;
105
+ if (initialView) {
106
+ switch (initialView.kind) {
107
+ case "position":
108
+ view.zoom = initialView.zoom;
109
+ view.center = [initialView.center.x, initialView.center.y];
110
+ break;
111
+ case "extent": {
112
+ const extent = initialView.extent;
113
+ view.zoom = 0;
114
+ view.center = [
115
+ extent.xMin + (extent.xMax - extent.xMin) / 2,
116
+ extent.yMin + (extent.yMax - extent.yMin) / 2
117
+ ];
118
+ break;
119
+ }
120
+ }
121
+ } else {
122
+ this.setViewDefaults(view, projection);
123
+ }
124
+ }
125
+ setViewDefaults(view, projection) {
126
+ if (view.center == null) {
127
+ const extent = projection.getExtent();
128
+ if (!extent) {
129
+ LOG.warn(
130
+ `Cannot set default center coordinate because the current projection has no associated extent.
131
+ Try to configure 'initialView' explicity.`
132
+ );
133
+ } else {
134
+ view.center = getCenter(extent);
135
+ }
136
+ }
137
+ if (view.zoom == null || view.resolution == null) {
138
+ view.zoom = 0;
139
+ }
140
+ }
141
+ initializeProjection(projectionOption) {
142
+ if (projectionOption == null) {
143
+ return get("EPSG:3857");
144
+ }
145
+ const projection = get(projectionOption);
146
+ if (!projection) {
147
+ throw new Error(`Failed to retrieve projection for code '${projectionOption}'.`);
148
+ }
149
+ return projection;
150
+ }
151
+ }
152
+
153
+ export { createMapModel };
154
+ //# sourceMappingURL=createMapModel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createMapModel.js","sources":["createMapModel.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2023 Open Pioneer project (https://github.com/open-pioneer)\n// SPDX-License-Identifier: Apache-2.0\nimport { createLogger } from \"@open-pioneer/core\";\nimport OlMap, { MapOptions } from \"ol/Map\";\nimport View, { ViewOptions } from \"ol/View\";\nimport Attribution from \"ol/control/Attribution\";\nimport { getCenter } from \"ol/extent\";\nimport TileLayer from \"ol/layer/Tile\";\nimport { Projection, get as getProjection } from \"ol/proj\";\nimport OSM from \"ol/source/OSM\";\nimport { DragZoom, defaults as defaultInteractions } from \"ol/interaction\";\nimport { MapBrowserEvent } from \"ol\";\nimport { MapModelImpl } from \"./MapModelImpl\";\nimport { MapConfig } from \"../api\";\nimport { registerProjections } from \"../projections\";\nimport { patchOpenLayersClassesForTesting } from \"../util/ol-test-support\";\n\n/**\n * Register custom projection to the global proj4js definitions. User can select `EPSG:25832`\n * and `EPSG:25833` from the predefined projections without calling `registerProjections`.\n */\nregisterProjections({\n \"EPSG:25832\":\n \"+proj=utm +zone=32 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +type=crs\",\n \"EPSG:25833\":\n \"+proj=utm +zone=33 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +type=crs\"\n});\nconst LOG = createLogger(\"map:createMapModel\");\n\nexport async function createMapModel(mapId: string, mapConfig: MapConfig): Promise<MapModelImpl> {\n return await new MapModelFactory(mapId, mapConfig).createMapModel();\n}\n\nclass MapModelFactory {\n private mapId: string;\n private mapConfig: MapConfig;\n\n constructor(mapId: string, mapConfig: MapConfig) {\n this.mapId = mapId;\n this.mapConfig = mapConfig;\n }\n\n async createMapModel() {\n const mapId = this.mapId;\n const mapConfig = this.mapConfig;\n const { view: viewOption, ...rawOlOptions } = mapConfig.advanced ?? {};\n const mapOptions: MapOptions = {\n ...rawOlOptions\n };\n\n if (!mapOptions.controls) {\n mapOptions.controls = [new Attribution({ collapsible: false })];\n }\n\n if (!mapOptions.interactions) {\n const shiftCtrlKeysOnly = (mapBrowserEvent: MapBrowserEvent<KeyboardEvent>) => {\n const originalEvent = mapBrowserEvent.originalEvent;\n return (originalEvent.metaKey || originalEvent.ctrlKey) && originalEvent.shiftKey;\n };\n /*\n * setting altShiftDragRotate to false disables or excludes DragRotate interaction\n * */\n mapOptions.interactions = defaultInteractions({\n dragPan: true,\n altShiftDragRotate: false,\n pinchRotate: false,\n mouseWheelZoom: true\n }).extend([new DragZoom({ out: true, condition: shiftCtrlKeysOnly })]);\n }\n\n const view = (await viewOption) ?? {};\n this.initializeViewOptions(view);\n mapOptions.view = view instanceof View ? view : new View(view);\n\n if (!mapOptions.layers && !mapConfig.layers) {\n mapOptions.layers = [\n new TileLayer({\n source: new OSM()\n })\n ];\n }\n\n const initialView = mapConfig.initialView;\n const initialExtent = initialView?.kind === \"extent\" ? initialView.extent : undefined;\n\n LOG.debug(`Constructing open layers map with options`, mapOptions);\n\n if (import.meta.env.VITEST) {\n patchOpenLayersClassesForTesting();\n }\n\n const olMap = new OlMap(mapOptions);\n\n const mapModel = new MapModelImpl({\n id: mapId,\n olMap,\n initialExtent\n });\n\n try {\n if (mapConfig.layers) {\n for (const layerConfig of mapConfig.layers) {\n mapModel.layers.addLayer(layerConfig);\n }\n }\n return mapModel;\n } catch (e) {\n mapModel.destroy();\n throw e;\n }\n }\n\n private initializeViewOptions(view: View | ViewOptions) {\n const mapId = this.mapId;\n const mapConfig = this.mapConfig;\n if (view instanceof View) {\n const warn = (prop: string) => {\n LOG.warn(\n `The advanced configuration for map id '${mapId}' has provided a fully constructed view instance: ${prop} cannot be applied.\\n` +\n `Use ViewOptions instead of a View instance.`\n );\n };\n\n if (mapConfig.projection != null) {\n warn(\"projection\");\n }\n if (mapConfig.initialView != null) {\n warn(\"initialView\");\n }\n return;\n }\n\n const projection = (view.projection = this.initializeProjection(mapConfig.projection));\n const initialView = mapConfig.initialView;\n if (initialView) {\n switch (initialView.kind) {\n case \"position\":\n view.zoom = initialView.zoom;\n view.center = [initialView.center.x, initialView.center.y];\n break;\n case \"extent\": {\n /*\n OpenLayers does not support configuration of the initial map extent.\n The only relevant options here are center, zoom (and resolution).\n We must set those values because otherwise OL will not initialize layer sources.\n\n The actual initial extent is applied once tha map has loaded and its size is known.\n */\n const extent = initialView.extent;\n view.zoom = 0;\n view.center = [\n extent.xMin + (extent.xMax - extent.xMin) / 2,\n extent.yMin + (extent.yMax - extent.yMin) / 2\n ];\n break;\n }\n }\n } else {\n this.setViewDefaults(view, projection);\n }\n }\n\n private setViewDefaults(view: ViewOptions, projection: Projection) {\n if (view.center == null) {\n const extent = projection.getExtent(); // can be null\n if (!extent) {\n LOG.warn(\n `Cannot set default center coordinate because the current projection has no associated extent.\\n` +\n `Try to configure 'initialView' explicity.`\n );\n } else {\n view.center = getCenter(extent);\n }\n }\n\n if (view.zoom == null || view.resolution == null) {\n view.zoom = 0;\n }\n }\n\n private initializeProjection(projectionOption: MapConfig[\"projection\"]) {\n if (projectionOption == null) {\n return getProjection(\"EPSG:3857\")!; // default OpenLayers projection\n }\n\n const projection = getProjection(projectionOption);\n if (!projection) {\n throw new Error(`Failed to retrieve projection for code '${projectionOption}'.`);\n }\n return projection;\n }\n}\n"],"names":["defaultInteractions","getProjection"],"mappings":";;;;;;;;;;;;;AAqBA,mBAAoB,CAAA;AAAA,EAChB,YACI,EAAA,oFAAA;AAAA,EACJ,YACI,EAAA,oFAAA;AACR,CAAC,CAAA,CAAA;AACD,MAAM,GAAA,GAAM,aAAa,oBAAoB,CAAA,CAAA;AAEvB,eAAA,cAAA,CAAe,OAAe,SAA6C,EAAA;AAC7F,EAAA,OAAO,MAAM,IAAI,eAAA,CAAgB,KAAO,EAAA,SAAS,EAAE,cAAe,EAAA,CAAA;AACtE,CAAA;AAEA,MAAM,eAAgB,CAAA;AAAA,EACV,KAAA,CAAA;AAAA,EACA,SAAA,CAAA;AAAA,EAER,WAAA,CAAY,OAAe,SAAsB,EAAA;AAC7C,IAAA,IAAA,CAAK,KAAQ,GAAA,KAAA,CAAA;AACb,IAAA,IAAA,CAAK,SAAY,GAAA,SAAA,CAAA;AAAA,GACrB;AAAA,EAEA,MAAM,cAAiB,GAAA;AACnB,IAAA,MAAM,QAAQ,IAAK,CAAA,KAAA,CAAA;AACnB,IAAA,MAAM,YAAY,IAAK,CAAA,SAAA,CAAA;AACvB,IAAM,MAAA,EAAE,MAAM,UAAY,EAAA,GAAG,cAAiB,GAAA,SAAA,CAAU,YAAY,EAAC,CAAA;AACrE,IAAA,MAAM,UAAyB,GAAA;AAAA,MAC3B,GAAG,YAAA;AAAA,KACP,CAAA;AAEA,IAAI,IAAA,CAAC,WAAW,QAAU,EAAA;AACtB,MAAW,UAAA,CAAA,QAAA,GAAW,CAAC,IAAI,WAAA,CAAY,EAAE,WAAa,EAAA,KAAA,EAAO,CAAC,CAAA,CAAA;AAAA,KAClE;AAEA,IAAI,IAAA,CAAC,WAAW,YAAc,EAAA;AAC1B,MAAM,MAAA,iBAAA,GAAoB,CAAC,eAAoD,KAAA;AAC3E,QAAA,MAAM,gBAAgB,eAAgB,CAAA,aAAA,CAAA;AACtC,QAAA,OAAA,CAAQ,aAAc,CAAA,OAAA,IAAW,aAAc,CAAA,OAAA,KAAY,aAAc,CAAA,QAAA,CAAA;AAAA,OAC7E,CAAA;AAIA,MAAA,UAAA,CAAW,eAAeA,QAAoB,CAAA;AAAA,QAC1C,OAAS,EAAA,IAAA;AAAA,QACT,kBAAoB,EAAA,KAAA;AAAA,QACpB,WAAa,EAAA,KAAA;AAAA,QACb,cAAgB,EAAA,IAAA;AAAA,OACnB,CAAA,CAAE,MAAO,CAAA,CAAC,IAAI,QAAA,CAAS,EAAE,GAAA,EAAK,IAAM,EAAA,SAAA,EAAW,iBAAkB,EAAC,CAAC,CAAC,CAAA,CAAA;AAAA,KACzE;AAEA,IAAM,MAAA,IAAA,GAAQ,MAAM,UAAA,IAAe,EAAC,CAAA;AACpC,IAAA,IAAA,CAAK,sBAAsB,IAAI,CAAA,CAAA;AAC/B,IAAA,UAAA,CAAW,OAAO,IAAgB,YAAA,IAAA,GAAO,IAAO,GAAA,IAAI,KAAK,IAAI,CAAA,CAAA;AAE7D,IAAA,IAAI,CAAC,UAAA,CAAW,MAAU,IAAA,CAAC,UAAU,MAAQ,EAAA;AACzC,MAAA,UAAA,CAAW,MAAS,GAAA;AAAA,QAChB,IAAI,SAAU,CAAA;AAAA,UACV,MAAA,EAAQ,IAAI,GAAI,EAAA;AAAA,SACnB,CAAA;AAAA,OACL,CAAA;AAAA,KACJ;AAEA,IAAA,MAAM,cAAc,SAAU,CAAA,WAAA,CAAA;AAC9B,IAAA,MAAM,aAAgB,GAAA,WAAA,EAAa,IAAS,KAAA,QAAA,GAAW,YAAY,MAAS,GAAA,KAAA,CAAA,CAAA;AAE5E,IAAI,GAAA,CAAA,KAAA,CAAM,6CAA6C,UAAU,CAAA,CAAA;AAEjE,IAAI,IAAA,MAAA,CAAA,IAAA,CAAY,IAAI,MAAQ,EAAA;AACxB,MAAiC,gCAAA,EAAA,CAAA;AAAA,KACrC;AAEA,IAAM,MAAA,KAAA,GAAQ,IAAI,KAAA,CAAM,UAAU,CAAA,CAAA;AAElC,IAAM,MAAA,QAAA,GAAW,IAAI,YAAa,CAAA;AAAA,MAC9B,EAAI,EAAA,KAAA;AAAA,MACJ,KAAA;AAAA,MACA,aAAA;AAAA,KACH,CAAA,CAAA;AAED,IAAI,IAAA;AACA,MAAA,IAAI,UAAU,MAAQ,EAAA;AAClB,QAAW,KAAA,MAAA,WAAA,IAAe,UAAU,MAAQ,EAAA;AACxC,UAAS,QAAA,CAAA,MAAA,CAAO,SAAS,WAAW,CAAA,CAAA;AAAA,SACxC;AAAA,OACJ;AACA,MAAO,OAAA,QAAA,CAAA;AAAA,aACF,CAAG,EAAA;AACR,MAAA,QAAA,CAAS,OAAQ,EAAA,CAAA;AACjB,MAAM,MAAA,CAAA,CAAA;AAAA,KACV;AAAA,GACJ;AAAA,EAEQ,sBAAsB,IAA0B,EAAA;AACpD,IAAA,MAAM,QAAQ,IAAK,CAAA,KAAA,CAAA;AACnB,IAAA,MAAM,YAAY,IAAK,CAAA,SAAA,CAAA;AACvB,IAAA,IAAI,gBAAgB,IAAM,EAAA;AACtB,MAAM,MAAA,IAAA,GAAO,CAAC,IAAiB,KAAA;AAC3B,QAAI,GAAA,CAAA,IAAA;AAAA,UACA,CAAA,uCAAA,EAA0C,KAAK,CAAA,kDAAA,EAAqD,IAAI,CAAA;AAAA,2CAAA,CAAA;AAAA,SAE5G,CAAA;AAAA,OACJ,CAAA;AAEA,MAAI,IAAA,SAAA,CAAU,cAAc,IAAM,EAAA;AAC9B,QAAA,IAAA,CAAK,YAAY,CAAA,CAAA;AAAA,OACrB;AACA,MAAI,IAAA,SAAA,CAAU,eAAe,IAAM,EAAA;AAC/B,QAAA,IAAA,CAAK,aAAa,CAAA,CAAA;AAAA,OACtB;AACA,MAAA,OAAA;AAAA,KACJ;AAEA,IAAA,MAAM,aAAc,IAAK,CAAA,UAAA,GAAa,IAAK,CAAA,oBAAA,CAAqB,UAAU,UAAU,CAAA,CAAA;AACpF,IAAA,MAAM,cAAc,SAAU,CAAA,WAAA,CAAA;AAC9B,IAAA,IAAI,WAAa,EAAA;AACb,MAAA,QAAQ,YAAY,IAAM;AAAA,QACtB,KAAK,UAAA;AACD,UAAA,IAAA,CAAK,OAAO,WAAY,CAAA,IAAA,CAAA;AACxB,UAAA,IAAA,CAAK,SAAS,CAAC,WAAA,CAAY,OAAO,CAAG,EAAA,WAAA,CAAY,OAAO,CAAC,CAAA,CAAA;AACzD,UAAA,MAAA;AAAA,QACJ,KAAK,QAAU,EAAA;AAQX,UAAA,MAAM,SAAS,WAAY,CAAA,MAAA,CAAA;AAC3B,UAAA,IAAA,CAAK,IAAO,GAAA,CAAA,CAAA;AACZ,UAAA,IAAA,CAAK,MAAS,GAAA;AAAA,YACV,MAAO,CAAA,IAAA,GAAA,CAAQ,MAAO,CAAA,IAAA,GAAO,OAAO,IAAQ,IAAA,CAAA;AAAA,YAC5C,MAAO,CAAA,IAAA,GAAA,CAAQ,MAAO,CAAA,IAAA,GAAO,OAAO,IAAQ,IAAA,CAAA;AAAA,WAChD,CAAA;AACA,UAAA,MAAA;AAAA,SACJ;AAAA,OACJ;AAAA,KACG,MAAA;AACH,MAAK,IAAA,CAAA,eAAA,CAAgB,MAAM,UAAU,CAAA,CAAA;AAAA,KACzC;AAAA,GACJ;AAAA,EAEQ,eAAA,CAAgB,MAAmB,UAAwB,EAAA;AAC/D,IAAI,IAAA,IAAA,CAAK,UAAU,IAAM,EAAA;AACrB,MAAM,MAAA,MAAA,GAAS,WAAW,SAAU,EAAA,CAAA;AACpC,MAAA,IAAI,CAAC,MAAQ,EAAA;AACT,QAAI,GAAA,CAAA,IAAA;AAAA,UACA,CAAA;AAAA,yCAAA,CAAA;AAAA,SAEJ,CAAA;AAAA,OACG,MAAA;AACH,QAAK,IAAA,CAAA,MAAA,GAAS,UAAU,MAAM,CAAA,CAAA;AAAA,OAClC;AAAA,KACJ;AAEA,IAAA,IAAI,IAAK,CAAA,IAAA,IAAQ,IAAQ,IAAA,IAAA,CAAK,cAAc,IAAM,EAAA;AAC9C,MAAA,IAAA,CAAK,IAAO,GAAA,CAAA,CAAA;AAAA,KAChB;AAAA,GACJ;AAAA,EAEQ,qBAAqB,gBAA2C,EAAA;AACpE,IAAA,IAAI,oBAAoB,IAAM,EAAA;AAC1B,MAAA,OAAOC,IAAc,WAAW,CAAA,CAAA;AAAA,KACpC;AAEA,IAAM,MAAA,UAAA,GAAaA,IAAc,gBAAgB,CAAA,CAAA;AACjD,IAAA,IAAI,CAAC,UAAY,EAAA;AACb,MAAA,MAAM,IAAI,KAAA,CAAM,CAA2C,wCAAA,EAAA,gBAAgB,CAAI,EAAA,CAAA,CAAA,CAAA;AAAA,KACnF;AACA,IAAO,OAAA,UAAA,CAAA;AAAA,GACX;AACJ;;;;"}
@@ -0,0 +1,9 @@
1
+ import { AbstractLayer } from "../AbstractLayer";
2
+ /**
3
+ * A simple layer that accepts a custom OpenLayer's layer instance.
4
+ *
5
+ * Some API features (such as sublayers) will not be available.
6
+ */
7
+ export declare class SimpleLayerImpl extends AbstractLayer {
8
+ get sublayers(): undefined;
9
+ }
@@ -0,0 +1,10 @@
1
+ import { AbstractLayer } from '../AbstractLayer.js';
2
+
3
+ class SimpleLayerImpl extends AbstractLayer {
4
+ get sublayers() {
5
+ return void 0;
6
+ }
7
+ }
8
+
9
+ export { SimpleLayerImpl };
10
+ //# sourceMappingURL=SimpleLayerImpl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SimpleLayerImpl.js","sources":["SimpleLayerImpl.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2023 Open Pioneer project (https://github.com/open-pioneer)\n// SPDX-License-Identifier: Apache-2.0\nimport { AbstractLayer } from \"../AbstractLayer\";\n\n/**\n * A simple layer that accepts a custom OpenLayer's layer instance.\n *\n * Some API features (such as sublayers) will not be available.\n */\nexport class SimpleLayerImpl extends AbstractLayer {\n get sublayers(): undefined {\n return undefined;\n }\n}\n"],"names":[],"mappings":";;AASO,MAAM,wBAAwB,aAAc,CAAA;AAAA,EAC/C,IAAI,SAAuB,GAAA;AACvB,IAAO,OAAA,KAAA,CAAA,CAAA;AAAA,GACX;AACJ;;;;"}
@@ -0,0 +1,29 @@
1
+ import { Sublayer, WMSLayerConfig, WMSLayer, WMSSublayerConfig } from "../../api";
2
+ import { AbstractLayer } from "../AbstractLayer";
3
+ import { AbstractLayerBase } from "../AbstractLayerBase";
4
+ import { MapModelImpl } from "../MapModelImpl";
5
+ import { SublayersCollectionImpl } from "../SublayersCollectionImpl";
6
+ export declare class WMSLayerImpl extends AbstractLayer implements WMSLayer {
7
+ #private;
8
+ constructor(config: WMSLayerConfig);
9
+ get url(): string;
10
+ get sublayers(): SublayersCollectionImpl<WMSSublayerImpl>;
11
+ __attach(map: MapModelImpl): void;
12
+ /** Called by the sublayers when their visibility changed. */
13
+ __updateSublayerVisibility(): void;
14
+ }
15
+ declare class WMSSublayerImpl extends AbstractLayerBase implements Sublayer {
16
+ #private;
17
+ constructor(config: WMSSublayerConfig);
18
+ get name(): string;
19
+ get sublayers(): SublayersCollectionImpl<WMSSublayerImpl>;
20
+ get parent(): WMSSublayerImpl | WMSLayerImpl;
21
+ get parentLayer(): WMSLayerImpl;
22
+ /**
23
+ * Called by the parent layer when it is attached to the map to attach all sublayers.
24
+ */
25
+ __attach(map: MapModelImpl, parentLayer: WMSLayerImpl, parent: WMSLayerImpl | WMSSublayerImpl): void;
26
+ get visible(): boolean;
27
+ setVisible(newVisibility: boolean): void;
28
+ }
29
+ export {};