@masterportal/masterportalapi 2.23.0 → 2.25.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 CHANGED
@@ -3,10 +3,57 @@
3
3
 
4
4
  The [Semantic Versioning](https://semver.org/spec/v2.0.0.html) is used.
5
5
 
6
+ ### Unreleased - in development
7
+ ## Added
8
+
9
+ ### Changed
10
+ - WebGL: method "afterLoading" catches MultiPoint geometries and parses them to a single point feature for proper rendering
11
+ - WebGL Render-Pipeline for VectorLayer of type VectorTile can be called using {"renderer": "webgl"} in config.json.
12
+
13
+ ## Changed
14
+ - The styleList is now loading asynchronus
15
+
16
+ ## Deprecated
17
+
18
+ ## Removed
19
+
20
+ ## Fixed
21
+
22
+ ---
23
+
24
+ ## 2.24.0 - 2023-08-03
25
+ ### Added
26
+ - The following packages have been installed:
27
+ - @swc/jest: 0.2.27
28
+ - Add a function to convertUnits in drawInteractions.
29
+ - Remove VectorBase layer and add it to masterportal.
30
+
31
+ ### Changed
32
+ - The following packages have been updated:
33
+ - dependencies:
34
+ - core-js: 3.30.2 to 3.32.0
35
+ - dayjs: 1.11.7 to 1.11.9
36
+ - olcs: 2.14.0 to 2.15.0
37
+ - xml2js: 0.5.0 to 0.6.2
38
+ - devDependencies:
39
+ - @babel/core: 7.21.8 to 7.22.9
40
+ - @babel/plugin-transform-modules-commonjs: 7.21.5 to 7.21.5
41
+ - @parcel/transformer-sass: 2.8.3 to 2.9.3
42
+ - buffer: 5.7.1 to 6.0.3
43
+ - eslint: 8.40.0 to 8.46.0
44
+ - jest: 29.5.0 to 29.6.2
45
+ - jest-canvas-mock: 2.5.0 to 2.5.2
46
+ - jest-environment-jsdom: 29.5.0 to 29.6.2
47
+ - parcel: 2.8.3 to 2.9.3
48
+ - sass: 1.62.1 to 1.64.2
49
+
50
+ ### Fixed
51
+ - Changed peerDependency from cesium 1.106.0 to @cesium/engine 2.4.1.
52
+
53
+ ---
54
+
6
55
  ## 2.23.0 - 2023-08-02
7
56
  ### Added
8
- - VectorStyle: Add Styling rules for Geoemtries of type `Circle`.
9
- - Add Styling and zIndex to draw interactions and improve the draw behavior.
10
57
  - Add select and modify interactions for editing ol features.
11
58
 
12
59
  ### Fixed
@@ -15,8 +62,15 @@
15
62
  ---
16
63
 
17
64
  ## 2.22.0 - 2023-07-25
65
+ ### Changed
66
+ - Replace derprecated cesium tileset and terrain loading functions.
67
+ - WFST Refactoring
68
+
69
+ ---
70
+
71
+ ## 2.21.0 - 2023-07-21
18
72
  ### Added
19
- - VectorStyle: Add Styling rules for Geoemtries of type `Circle`.
73
+ - VectorStyle: Add Styling rules for Geometries of type `Circle`.
20
74
  - Add Styling and zIndex to draw interactions and improve the draw behavior.
21
75
 
22
76
  ### Changed
@@ -24,9 +78,6 @@
24
78
  - WFS:
25
79
  - Migrated writeTransaction and sendTransaction from masterportal the masterportalAPI.
26
80
  - Exports in src/layer/wfs.js changed to export default {} to provide ES-Syntax.
27
- ### Deprecated
28
-
29
- ### Removed
30
81
 
31
82
  ### Fixed
32
83
  - WFS: fixed a bug that prevented parsing GeoServer responses.
@@ -45,6 +45,12 @@
45
45
  "styleId": "1534",
46
46
  "typ": "WFS"
47
47
  },
48
+ {
49
+ "id": "5097",
50
+ "renderer": "webgl",
51
+ "isPointLayer": true,
52
+ "typ": "WFS"
53
+ },
48
54
  {
49
55
  "id": "2003",
50
56
  "renderer": "webgl",
@@ -77,6 +83,6 @@
77
83
  }
78
84
  }
79
85
  ],
80
- "cesiumLib":"https://geoportal-hamburg.de/mastercode/cesium/1_99/Cesium.js",
86
+ "cesiumLib":"https://geoportal-hamburg.de/mastercode/cesium/latest/Cesium.js",
81
87
  "wfsImgPath": "https://geodienste.hamburg.de/lgv-config/img/"
82
88
  }
@@ -133,6 +133,16 @@
133
133
  "version" : "1.1.0",
134
134
  "featureNS" : "https://registry.gdi-de.org/id/de.hh.up"
135
135
  },
136
+ {
137
+ "id" : "5097",
138
+ "name" : "de.hh.up:strassenbaumkataster hpa",
139
+ "url" : "https://geodienste.hamburg.de/HH_WFS_Strassenbaumkataster",
140
+ "typ" : "WFS",
141
+ "featureType" : "strassenbaumkataster_hpa",
142
+ "outputFormat" : "XML",
143
+ "version" : "1.1.0",
144
+ "featureNS" : "https://registry.gdi-de.org/id/de.hh.up"
145
+ },
136
146
  {
137
147
  "id": "6001",
138
148
  "name": "ArcGIS VectorTile",
package/example/index.js CHANGED
@@ -249,7 +249,7 @@ document.getElementById("enable").addEventListener("click", function () {
249
249
  document.getElementById("layer-visibility").style.display = "none";
250
250
  }
251
251
  else {
252
- const lib = portalConfig.cesiumLib ? portalConfig.cesiumLib : "https://geoportal-hamburg.de/mastercode/cesium/1_99/index.js";
252
+ const lib = portalConfig.cesiumLib ? portalConfig.cesiumLib : "https://geoportal-hamburg.de/mastercode/cesium/latest/index.js";
253
253
 
254
254
  document.getElementById("layer-visibility").style.display = "block";
255
255
 
package/jest.config.js CHANGED
@@ -1,5 +1,8 @@
1
1
  /* eslint-env node */
2
2
  module.exports = {
3
+ "transform": {
4
+ "^.+\\.(t|j)sx?$": "@swc/jest"
5
+ },
3
6
  /** ol prints errors without HTMLCanvasElement being available in test environment */
4
7
  "setupFiles": ["jest-canvas-mock"],
5
8
  /** node_modules are usually ignored by babel-jest, but ol is published in ES6 */
package/package.json CHANGED
@@ -1,65 +1,66 @@
1
- {
2
- "name": "@masterportal/masterportalapi",
3
- "author": "Implementierungspartnerschaft Masterportal <info@masterportal.org> (https://www.masterportal.org)",
4
- "version": "2.23.0",
5
- "license": "MIT",
6
- "description": "Basic functions of the Masterportal as api",
7
- "repository": {
8
- "type": "git",
9
- "url": "git+https://bitbucket.org/geowerkstatt-hamburg/masterportalapi.git"
10
- },
11
- "main": "src/index.js",
12
- "scripts": {
13
- "test": "jest .test.js --config ./jest.config.js --collectCoverage",
14
- "test:trace": "node --trace-warnings node_modules/jest/bin/jest.js .test.js --config ./jest.config.js",
15
- "test:watch": "jest .test.js --config ./jest.config.js --watch",
16
- "example": "parcel example/index.html",
17
- "generate-jsdoc": "jsdoc ./src -r -d ./docs/ -R ./README.md -c jsdoc.json",
18
- "prePushHook": "eslint --max-warnings 0 \"./**/*.js\" && npm run test",
19
- "prepare": "husky install"
20
- },
21
- "dependencies": {
22
- "core-js": "^3.30.2",
23
- "dayjs": "^1.11.7",
24
- "ol": "7.4.0",
25
- "olcs": "^2.14.0",
26
- "proj4": "^2.9.0",
27
- "xml2js": "^0.5.0"
28
- },
29
- "devDependencies": {
30
- "@babel/core": "^7.21.8",
31
- "@babel/plugin-transform-modules-commonjs": "^7.21.5",
32
- "@parcel/transformer-sass": "^2.8.3",
33
- "buffer": "^5.7.1",
34
- "canvas": "^2.11.2",
35
- "eslint": "^8.40.0",
36
- "events": "^3.3.0",
37
- "husky": "^8.0.3",
38
- "jest": "^29.5.0",
39
- "jest-canvas-mock": "^2.5.0",
40
- "jest-environment-jsdom": "^29.5.0",
41
- "jest-fetch-mock": "^3.0.3",
42
- "jsdoc": "^4.0.2",
43
- "parcel": "^2.8.3",
44
- "process": "^0.11.10",
45
- "sass": "^1.62.1",
46
- "stream-browserify": "^3.0.0",
47
- "timers-browserify": "^2.0.12",
48
- "use-resize-observer": "^9.1.0"
49
- },
50
- "peerDependencies": {
51
- "@cesium/engine": "^2.4.1"
52
- },
53
- "engines": {
54
- "node": "^16.13.2 || ^18.12.0",
55
- "npm": "^8.1.2 || ^9.3.1"
56
- },
57
- "homepage": "https://bitbucket.org/geowerkstatt-hamburg/masterportalapi#readme",
58
- "directories": {
59
- "example": "example",
60
- "test": "test"
61
- },
62
- "bugs": {
63
- "url": "https://bitbucket.org/geowerkstatt-hamburg/masterportalapi/issues"
64
- }
65
- }
1
+ {
2
+ "name": "@masterportal/masterportalapi",
3
+ "author": "Implementierungspartnerschaft Masterportal <info@masterportal.org> (https://www.masterportal.org)",
4
+ "version": "2.25.0",
5
+ "license": "MIT",
6
+ "description": "Basic functions of the Masterportal as api",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "git+https://bitbucket.org/geowerkstatt-hamburg/masterportalapi.git"
10
+ },
11
+ "main": "src/index.js",
12
+ "scripts": {
13
+ "test": "jest .test.js --config ./jest.config.js --collectCoverage",
14
+ "test:trace": "node --trace-warnings node_modules/jest/bin/jest.js .test.js --config ./jest.config.js",
15
+ "test:watch": "jest .test.js --config ./jest.config.js --watch",
16
+ "example": "parcel example/index.html",
17
+ "generate-jsdoc": "jsdoc ./src -r -d ./docs/ -R ./README.md -c jsdoc.json",
18
+ "prePushHook": "eslint --max-warnings 0 \"./**/*.js\" && npm run test",
19
+ "prepare": "husky install"
20
+ },
21
+ "dependencies": {
22
+ "core-js": "^3.32.0",
23
+ "dayjs": "^1.11.9",
24
+ "ol": "7.4.0",
25
+ "olcs": "^2.15.0",
26
+ "proj4": "^2.9.0",
27
+ "xml2js": "^0.6.2"
28
+ },
29
+ "devDependencies": {
30
+ "@babel/core": "^7.22.9",
31
+ "@babel/plugin-transform-modules-commonjs": "^7.22.5",
32
+ "@parcel/transformer-sass": "^2.9.3",
33
+ "@swc/jest": "^0.2.27",
34
+ "buffer": "^6.0.3",
35
+ "canvas": "^2.11.2",
36
+ "eslint": "^8.46.0",
37
+ "events": "^3.3.0",
38
+ "husky": "^8.0.3",
39
+ "jest": "^29.6.2",
40
+ "jest-canvas-mock": "^2.5.2",
41
+ "jest-environment-jsdom": "^29.6.2",
42
+ "jest-fetch-mock": "^3.0.3",
43
+ "jsdoc": "^4.0.2",
44
+ "parcel": "^2.9.3",
45
+ "process": "^0.11.10",
46
+ "sass": "^1.64.2",
47
+ "stream-browserify": "^3.0.0",
48
+ "timers-browserify": "^2.0.12",
49
+ "use-resize-observer": "^9.1.0"
50
+ },
51
+ "peerDependencies": {
52
+ "@cesium/engine": "^2.4.1"
53
+ },
54
+ "engines": {
55
+ "node": "^16.13.2 || ^18.12.0",
56
+ "npm": "^8.1.2 || ^9.3.1"
57
+ },
58
+ "homepage": "https://bitbucket.org/geowerkstatt-hamburg/masterportalapi#readme",
59
+ "directories": {
60
+ "example": "example",
61
+ "test": "test"
62
+ },
63
+ "bugs": {
64
+ "url": "https://bitbucket.org/geowerkstatt-hamburg/masterportalapi/issues"
65
+ }
66
+ }
package/src/index.js CHANGED
@@ -5,7 +5,6 @@ import * as wms from "./layer/wms";
5
5
  import wmts from "./layer/wmts";
6
6
  import wfs from "./layer/wfs";
7
7
  import * as geojson from "./layer/geojson";
8
- import * as vectorBase from "./layer/vectorBase";
9
8
  import * as vectorTile from "./layer/vectorTile";
10
9
  import * as oaf from "./layer/oaf";
11
10
  import * as terrain from "./layer/terrain";
@@ -24,7 +23,6 @@ export {
24
23
  wfs,
25
24
  geojson,
26
25
  layerLib,
27
- vectorBase,
28
26
  vectorTile,
29
27
  oaf,
30
28
  terrain,
@@ -23,10 +23,11 @@ export {setCustomStyles};
23
23
  * @param {"default" | "webgl" | undefined} [rawLayer.renderer] - use default canvas or webgl renderer
24
24
  * @param {string} [rawLayer.styleId] - the styleId of the layer, only necessary for webgl style pipeline
25
25
  * @param {string[]} [rawLayer.excludeTypesFromParsing] - types that should not be parsed from strings, only necessary for webgl
26
+ * @param {string[]} [rawLayer.isPointLayer] - whether the layer consists merely of points (or multi points)
26
27
  * @param {object} options - options of the geojson layer
27
28
  * @returns {ol.source.Vector} created VectorSource
28
29
  */
29
- export function createLayerSource ({url, features, clusterDistance, renderer, styleId, excludeTypesFromParsing}, options) {
30
+ export function createLayerSource ({url, features, clusterDistance, renderer, styleId, excludeTypesFromParsing, isPointLayer}, options) {
30
31
  const format = new GeoJSON();
31
32
  let source = null;
32
33
 
@@ -46,11 +47,11 @@ export function createLayerSource ({url, features, clusterDistance, renderer, st
46
47
  if (renderer === "webgl") {
47
48
  // if features were provided before source creation
48
49
  if (features?.length > 0) {
49
- webgl.afterLoading(source.getFeatures(), styleId, excludeTypesFromParsing);
50
+ webgl.afterLoading(source.getFeatures(), styleId, excludeTypesFromParsing, isPointLayer);
50
51
  }
51
52
  // wait for loading
52
53
  source.once("featuresloadend", event => {
53
- webgl.afterLoading(event?.features, styleId, excludeTypesFromParsing);
54
+ webgl.afterLoading(event?.features, styleId, excludeTypesFromParsing, isPointLayer);
54
55
  });
55
56
  }
56
57
 
@@ -75,7 +76,8 @@ export function createLayer (rawLayer = {}, {layerParams = {}, options = {}} = {
75
76
  ...rawLayer,
76
77
  renderer: layerParams.renderer,
77
78
  styleId: layerParams.styleId,
78
- excludeTypesFromParsing: layerParams.excludeTypesFromParsing
79
+ excludeTypesFromParsing: layerParams.excludeTypesFromParsing,
80
+ isPointLayer: layerParams.isPointLayer
79
81
  }, options);
80
82
  layer = webgl.createLayer({
81
83
  ...rawLayer,
@@ -118,7 +120,7 @@ export function updateSource (layer) {
118
120
  // perform necessary feature operations if renderer is webgl
119
121
  if (layer.get("renderer") === "webgl") {
120
122
  layer.getSource().once("featuresloadend", event => {
121
- webgl.afterLoading(event?.features, layer.get("styleId"), layer.get("excludeTypesFromParsing"));
123
+ webgl.afterLoading(event?.features, layer.get("styleId"), layer.get("excludeTypesFromParsing"), layer.get("isPointLayer"));
122
124
  });
123
125
  }
124
126
  }
package/src/layer/oaf.js CHANGED
@@ -188,7 +188,7 @@ export function createLayerSource (rawLayer, options = {}) {
188
188
 
189
189
  if (rawLayer.renderer === "webgl") {
190
190
  source.once("featuresloadend", event => {
191
- webgl.afterLoading(event?.features, rawLayer.styleId, rawLayer.excludeTypesFromParsing);
191
+ webgl.afterLoading(event?.features, rawLayer.styleId, rawLayer.excludeTypesFromParsing, rawLayer.isPointLayer);
192
192
  });
193
193
  }
194
194
 
@@ -212,7 +212,8 @@ export function createLayer (rawLayer = {}, {layerParams = {}, options = {}} = {
212
212
  ...rawLayer,
213
213
  renderer: layerParams.renderer,
214
214
  styleId: layerParams.styleId,
215
- excludeTypesFromParsing: layerParams.excludeTypesFromParsing
215
+ excludeTypesFromParsing: layerParams.excludeTypesFromParsing,
216
+ isPointLayer: layerParams.isPointLayer
216
217
  }, options);
217
218
  layer = webgl.createLayer({
218
219
  ...rawLayer,
@@ -5,14 +5,15 @@
5
5
  * @param {string} [rawLayer.cesiumTerrainProviderOptions] - see https://cesiumjs.org/Cesium/Build/Documentation/CesiumTerrainProvider.html
6
6
  * @returns {void}
7
7
  */
8
- function createTerrainProvider (rawLayer) {
9
- const options = {};
8
+ async function createTerrainProvider (rawLayer) {
9
+ const options = {},
10
+ terrainProvider = await Cesium.CesiumTerrainProvider.fromUrl(rawLayer.url, options);
10
11
 
11
12
  if (rawLayer.cesiumTerrainProviderOptions) {
12
13
  Object.assign(options, rawLayer.cesiumTerrainProviderOptions);
13
14
  }
14
- options.url = rawLayer.url;
15
- return new Cesium.CesiumTerrainProvider(options);
15
+
16
+ return terrainProvider;
16
17
  }
17
18
 
18
19
  /**
@@ -24,10 +25,10 @@ function createTerrainProvider (rawLayer) {
24
25
  * @param {OLCesium} map ol cesium map
25
26
  * @returns {void}
26
27
  */
27
- export function setVisible (value, rawLayer, map) {
28
+ async function setVisible (value, rawLayer, map) {
28
29
  if (map && typeof map.getCesiumScene === "function") {
29
30
  if (value) {
30
- map.getCesiumScene().terrainProvider = createTerrainProvider(rawLayer);
31
+ map.getCesiumScene().terrainProvider = await createTerrainProvider(rawLayer);
31
32
  }
32
33
  else {
33
34
  map.getCesiumScene().terrainProvider = new Cesium.EllipsoidTerrainProvider({});
@@ -63,3 +64,4 @@ export function get (key) {
63
64
  return this.values[key];
64
65
  }
65
66
 
67
+ module.exports.setVisible = setVisible;
@@ -9,11 +9,12 @@ function createTileSet (rawLayer) {
9
9
  const url = rawLayer.url.split("?")[0] + "/tileset.json",
10
10
  options = {};
11
11
 
12
+
12
13
  if (rawLayer.cesium3DTilesetOptions) {
13
14
  Object.assign(options, rawLayer.cesium3DTilesetOptions);
14
15
  }
15
- options.url = url;
16
- return new Cesium.Cesium3DTileset(options);
16
+
17
+ return Promise.resolve(Cesium.Cesium3DTileset.fromUrl(url, options));
17
18
  }
18
19
 
19
20
  /**
@@ -24,6 +25,7 @@ function createTileSet (rawLayer) {
24
25
  * @param {string} [rawLayer.cesiumTerrainProviderOptions] - see https://cesiumjs.org/Cesium/Build/Documentation/CesiumTerrainProvider.html
25
26
  * @returns {void}
26
27
  */
28
+
27
29
  export default function Tileset (rawLayer) {
28
30
  this.values = {
29
31
  name: rawLayer.name,
@@ -31,8 +33,13 @@ export default function Tileset (rawLayer) {
31
33
  typ: rawLayer.typ
32
34
  };
33
35
  if (Cesium) {
34
- this.tileset = createTileSet(rawLayer);
35
- this.tileset.layerReferenceId = rawLayer.id;
36
+ this.tileset = Promise.resolve(createTileSet(rawLayer));
37
+ this.tileset.then(function (tileset) {
38
+ if (tileset) {
39
+ tileset.layerReferenceId = rawLayer.id;
40
+ }
41
+ });
42
+
36
43
  }
37
44
  }
38
45
 
@@ -69,7 +76,9 @@ Tileset.prototype.setVisible = function (value, map) {
69
76
  if (map && typeof map.getCesiumScene === "function") {
70
77
  if (value) {
71
78
  if (!map.getCesiumScene().primitives.contains(this.tileset)) {
72
- map.getCesiumScene().primitives.add(this.tileset);
79
+ this.tileset.then(function (tileset) {
80
+ map.getCesiumScene().primitives.add(tileset);
81
+ });
73
82
  }
74
83
  this.tileset.show = true;
75
84
  }
@@ -15,7 +15,7 @@ export function createLayerSource (attrs) {
15
15
 
16
16
  // perform necessary feature operations if renderer is webgl
17
17
  if (attrs.renderer === "webgl") {
18
- webgl.afterLoading(source.getFeatures(), attrs.styleId, attrs.excludeTypesFromParsing);
18
+ webgl.afterLoading(source.getFeatures(), attrs.styleId, attrs.excludeTypesFromParsing, attrs.isPointLayer);
19
19
  }
20
20
 
21
21
  return source;
@@ -30,7 +30,7 @@ export function createLayerSource (attrs) {
30
30
  export function updateSource (layer, features) {
31
31
  // perform necessary feature operations if renderer is webgl
32
32
  if (layer.get("renderer") === "webgl") {
33
- webgl.afterLoading(features, layer.get("styleId"), layer.get("excludeTypesFromParsing"));
33
+ webgl.afterLoading(features, layer.get("styleId"), layer.get("excludeTypesFromParsing"), layer.get("isPointLayer"));
34
34
  }
35
35
 
36
36
  layer.getSource().clear(true);
@@ -3,6 +3,7 @@ import VectorTileLayer from "ol/layer/VectorTile";
3
3
  import VectorTileSource from "ol/source/VectorTile";
4
4
  import OpenLayersTileGrid from "ol/tilegrid/TileGrid";
5
5
  import {extentFromProjection} from "ol/tilegrid";
6
+ import * as webgl from "../renderer/webgl";
6
7
 
7
8
  import {stylefunction, apply} from "ol-mapbox-style";
8
9
 
@@ -108,11 +109,13 @@ function mustCreateTileGrid (options = {}) {
108
109
  *
109
110
  * @param {string} url - url to vector tile service
110
111
  * @param {tileGridProperties} [options] - properties for tileGrid
112
+ * @param {"default" | "webgl" | undefined} [options.renderer] - use default canvas or webgl renderer
113
+ * @param {string} [options.styleId] - the styleId of the layer, only necessary for webgl style pipeline
114
+ * @param {string[]} [options.excludeTypesFromParsing] - types that should not be parsed from strings, only necessary for webgl
111
115
  * @returns {ol.source.VectorTile} Source
112
116
  */
113
117
  export function createLayerSource (url, options = {}) {
114
118
  options.epsg = options.epsg ? options.epsg : defaults.epsg;
115
-
116
119
  const sourceParams = {
117
120
  projection: options.epsg,
118
121
  format: new MVT(),
@@ -126,7 +129,6 @@ export function createLayerSource (url, options = {}) {
126
129
  if (mustCreateTileGrid(options)) {
127
130
  sourceParams.tileGrid = createTileGrid(options);
128
131
  }
129
-
130
132
  return new VectorTileSource(sourceParams);
131
133
  }
132
134
 
@@ -143,13 +145,35 @@ export function createLayer (rawLayer = {}, {layerParams = {}, options = {}} = {
143
145
  console.error(`Cancelled creation of layer "${rawLayer.id}"(${rawLayer.name}) because of missing required parameters`);
144
146
  return undefined;
145
147
  }
146
- const source = createLayerSource(rawLayer.url, rawLayer),
147
- layer = new VectorTileLayer(Object.assign({
148
- id: rawLayer.id, name: rawLayer.name, attribution: rawLayer.olAttribution, extent: source.getTileGrid().getExtent(),
149
- minZoom: rawLayer.minZoom, maxZoom: rawLayer.maxZoom, source: source,
150
- declutter: true}, layerParams));
148
+ let layer, source;
149
+
150
+ // use WebGL render pipeline, if specified
151
+ if (layerParams.renderer === "webgl") {
152
+ source = createLayerSource(rawLayer.url, {
153
+ ...rawLayer,
154
+ renderer: layerParams.renderer,
155
+ styleId: layerParams.styleId,
156
+ excludeTypesFromParsing: layerParams.excludeTypesFromParsing
157
+ });
158
+
159
+ layer = webgl.createLayer({
160
+ extent: source.getTileGrid().getExtent(),
161
+ ...rawLayer,
162
+ ...layerParams,
163
+ source
164
+ });
165
+
166
+ return layer;
167
+ }
168
+
169
+ // use default canvas renderer
170
+ source = createLayerSource(rawLayer.url, rawLayer);
171
+ layer = new VectorTileLayer(Object.assign({
172
+ id: rawLayer.id, name: rawLayer.name, attribution: rawLayer.olAttribution, extent: source.getTileGrid().getExtent(),
173
+ minZoom: rawLayer.minZoom, maxZoom: rawLayer.maxZoom, source: source,
174
+ declutter: true}, layerParams));
151
175
 
152
- if (options.style) {
176
+ if (options.style && rawLayer.renderer !== "webgl") {
153
177
  layer.setStyle(options.style);
154
178
  }
155
179
 
package/src/layer/wfs.js CHANGED
@@ -209,12 +209,12 @@ function createLayerSource (rawLayer, options = {}) {
209
209
  if (rawLayer.renderer === "webgl") {
210
210
  if (options.loadingStrategy === bbox) {
211
211
  source.on("featuresloadend", event => {
212
- webgl.afterLoading(event?.features, rawLayer.styleId, rawLayer.excludeTypesFromParsing);
212
+ webgl.afterLoading(event?.features, rawLayer.styleId, rawLayer.excludeTypesFromParsing, rawLayer.isPointLayer);
213
213
  });
214
214
  }
215
215
  else {
216
216
  source.once("featuresloadend", event => {
217
- webgl.afterLoading(event?.features, rawLayer.styleId, rawLayer.excludeTypesFromParsing);
217
+ webgl.afterLoading(event?.features, rawLayer.styleId, rawLayer.excludeTypesFromParsing, rawLayer.isPointLayer);
218
218
  });
219
219
  }
220
220
  }
@@ -238,7 +238,8 @@ function createLayer (rawLayer = {}, {layerParams = {}, options = {}} = {}) {
238
238
  ...rawLayer,
239
239
  renderer: layerParams.renderer,
240
240
  styleId: layerParams.styleId,
241
- excludeTypesFromParsing: layerParams.excludeTypesFromParsing
241
+ excludeTypesFromParsing: layerParams.excludeTypesFromParsing,
242
+ isPointLayer: layerParams.isPointLayer
242
243
  }, options);
243
244
  layer = webgl.createLayer({
244
245
  ...rawLayer,
package/src/layer/wmts.js CHANGED
@@ -112,8 +112,10 @@ function createLayerSourceByCapabilities (attrs, tileLayer) {
112
112
  const layerIdentifier = attrs.layers,
113
113
  url = attrs.capabilitiesUrl,
114
114
  matrixSet = attrs.tileMatrixSet,
115
+ format = attrs.format,
115
116
  capabilitiesOptions = {
116
- layer: layerIdentifier
117
+ layer: layerIdentifier,
118
+ format
117
119
  };
118
120
 
119
121
  // use the matrixSet (if defined) for optionsFromCapabilities
@@ -201,4 +203,4 @@ export default {
201
203
  getWMTSCapabilities,
202
204
  generateArrays,
203
205
  showErrorMessage
204
- };
206
+ };
@@ -38,6 +38,26 @@ let styleObject = null,
38
38
  styleObjectOuterCircle = null,
39
39
  zIndex = 0;
40
40
 
41
+ /**
42
+ * Converts a value from one unit to another.
43
+ * @param {Number} value The value to convert.
44
+ * @param {String} sourceUnit The source unit.
45
+ * @param {String} targetUnit The target unit.
46
+ * @returns {Number} The converted value.
47
+ */
48
+ function convertUnits (value, sourceUnit, targetUnit) {
49
+ if (sourceUnit === targetUnit) {
50
+ return value;
51
+ }
52
+ else if (sourceUnit === "m" && targetUnit === "km") {
53
+ return value / 1000;
54
+ }
55
+ else if (sourceUnit === "km" && targetUnit === "m") {
56
+ return value * 1000;
57
+ }
58
+ return value;
59
+ }
60
+
41
61
  /**
42
62
  * Transform the radius to map projection unit.
43
63
  * @param {Number} radius The radius.
@@ -70,8 +90,10 @@ function transformMapUnitRadius (radius, mapProjection) {
70
90
  */
71
91
  function drawOuterCircle (feature, mapProjection, source, options = {}) {
72
92
  const innerCircleFeature = feature.clone(),
73
- mapUnitInnerRadius = transformMapUnitRadius(options.innerRadius, mapProjection),
74
- mapUnitOuterRadius = transformMapUnitRadius(options.outerRadius, mapProjection),
93
+ innerRadius = convertUnits(options.innerRadius, options.unit, "m"),
94
+ outerRadius = convertUnits(options.outerRadius, options.unit, "m"),
95
+ mapUnitInnerRadius = transformMapUnitRadius(innerRadius, mapProjection),
96
+ mapUnitOuterRadius = transformMapUnitRadius(outerRadius, mapProjection),
75
97
  innerStyle = createStyle.createStyle(styleObject, innerCircleFeature, false),
76
98
  outerStyle = createStyle.createStyle(styleObjectOuterCircle, feature, false);
77
99
 
@@ -95,7 +117,8 @@ function drawOuterCircle (feature, mapProjection, source, options = {}) {
95
117
  * @returns {void}
96
118
  */
97
119
  function drawInnerCircle (feature, mapProjection, options = {}) {
98
- const mapUnitInnerRadius = transformMapUnitRadius(options.innerRadius, mapProjection);
120
+ const innerRadius = convertUnits(options.innerRadius, options.unit, "m"),
121
+ mapUnitInnerRadius = transformMapUnitRadius(innerRadius, mapProjection);
99
122
 
100
123
  feature.getGeometry().setRadius(mapUnitInnerRadius);
101
124
  }
@@ -205,6 +228,7 @@ function createDrawInteraction (drawType, source) {
205
228
  export {styleObject};
206
229
 
207
230
  export default {
231
+ convertUnits,
208
232
  createDrawInteraction,
209
233
  drawCircle,
210
234
  drawInnerCircle,
@@ -7,7 +7,6 @@ import * as wms from "../../layer/wms";
7
7
  import wmts from "../../layer/wmts";
8
8
  import * as geojson from "../../layer/geojson";
9
9
  import wfs from "../../layer/wfs";
10
- import * as vectorBase from "../../layer/vectorBase";
11
10
  import * as vectortile from "../../layer/vectorTile";
12
11
  import * as oaf from "../../layer/oaf";
13
12
  import {createMapView} from "../../maps/mapView";
@@ -26,7 +25,6 @@ const layerBuilderMap = {
26
25
  "wmts": wmts,
27
26
  wfs,
28
27
  geojson,
29
- vectorBase,
30
28
  vectortile,
31
29
  oaf
32
30
  },