@masterportal/masterportalapi 2.29.0 → 2.31.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,16 +3,26 @@
3
3
 
4
4
  The [Semantic Versioning](https://semver.org/spec/v2.0.0.html) is used.
5
5
 
6
- ### Unreleased - in development
6
+ ### 2.31.0 - 2023-12-13
7
7
  ## Added
8
+ - Added support for Node LTS version ^20.9.0 and npm Version ^10.1.0.
8
9
 
9
10
  ## Changed
11
+ - WMS-Layer: the attribute extent of rawlayer is set at ol-layer.
10
12
 
11
- ## Deprecated
13
+ ## Fixed
14
+ - OAF-Layer: fix oaf layer in examples
15
+
16
+ ---
12
17
 
13
- ## Removed
18
+ ### 2.30.0 - 2023-11-28
19
+ ## Changed
20
+ - WMS-Layer and WMTS-Layer: create Layer no longer evaluates the minScale and maxScale attributes, but instead minResolution and maxResolution can be transferred.
14
21
 
15
22
  ## Fixed
23
+ - Issue Masterportal #1052 VectorStyle: fixed blinking of initial loaded features on great amount of features with a lot of conditional styles.
24
+ - Issue Masterportal #1088: gfiAttibutes with type=html are not displayed if there is no value in the data.
25
+ - Issue Masterportal #1091: VectorStyle: read geometry type from geoserver featureTypeRequest
16
26
 
17
27
  ---
18
28
 
@@ -105,13 +105,7 @@
105
105
  "url": "https://api.hamburg.de/datasets/v1/schulen",
106
106
  "collection": "staatliche_schulen",
107
107
  "typ": "OAF",
108
- "bbox": "",
109
- "bboxCrs": "",
110
- "datetime": "",
111
- "crs": "EPSG:25832",
112
- "params": {
113
- "anzahl_schueler": ">1000"
114
- }
108
+ "crs": "http://www.opengis.net/def/crs/EPSG/0/25832"
115
109
  },
116
110
  {
117
111
  "id": "8712",
package/package.json CHANGED
@@ -1,73 +1,73 @@
1
- {
2
- "name": "@masterportal/masterportalapi",
3
- "author": "Implementierungspartnerschaft Masterportal <info@masterportal.org> (https://www.masterportal.org)",
4
- "version": "2.29.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.33.1",
23
- "dayjs": "^1.11.10",
24
- "ol": "8.1.0",
25
- "ol-mapbox-style": "12.0.0",
26
- "olcs": "2.16.0",
27
- "proj4": "^2.9.1",
28
- "xml2js": "^0.6.2"
29
- },
30
- "devDependencies": {
31
- "@babel/core": "^7.23.2",
32
- "@babel/plugin-transform-modules-commonjs": "^7.23.0",
33
- "@parcel/transformer-sass": "^2.10.0",
34
- "@swc/jest": "^0.2.29",
35
- "assert": "^2.1.0",
36
- "browserify-zlib": "^0.2.0",
37
- "buffer": "^6.0.3",
38
- "canvas": "^2.11.2",
39
- "eslint": "^8.52.0",
40
- "events": "^3.3.0",
41
- "https-browserify": "^1.0.0",
42
- "husky": "^8.0.3",
43
- "jest": "^29.7.0",
44
- "jest-canvas-mock": "^2.5.2",
45
- "jest-environment-jsdom": "^29.7.0",
46
- "jest-fetch-mock": "^3.0.3",
47
- "jsdoc": "^4.0.2",
48
- "parcel": "^2.10.0",
49
- "process": "^0.11.10",
50
- "sass": "^1.69.4",
51
- "stream-browserify": "^3.0.0",
52
- "stream-http": "^3.2.0",
53
- "timers-browserify": "^2.0.12",
54
- "url": "^0.11.3",
55
- "use-resize-observer": "^9.1.0",
56
- "util": "^0.12.5"
57
- },
58
- "peerDependencies": {
59
- "@cesium/engine": "^2.4.1"
60
- },
61
- "engines": {
62
- "node": "^16.13.2 || ^18.12.0",
63
- "npm": "^8.1.2 || ^9.3.1"
64
- },
65
- "homepage": "https://bitbucket.org/geowerkstatt-hamburg/masterportalapi#readme",
66
- "directories": {
67
- "example": "example",
68
- "test": "test"
69
- },
70
- "bugs": {
71
- "url": "https://bitbucket.org/geowerkstatt-hamburg/masterportalapi/issues"
72
- }
73
- }
1
+ {
2
+ "name": "@masterportal/masterportalapi",
3
+ "author": "Implementierungspartnerschaft Masterportal <info@masterportal.org> (https://www.masterportal.org)",
4
+ "version": "2.31.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.33.1",
23
+ "dayjs": "^1.11.10",
24
+ "ol": "8.1.0",
25
+ "ol-mapbox-style": "12.0.0",
26
+ "olcs": "2.16.0",
27
+ "proj4": "^2.9.1",
28
+ "xml2js": "^0.6.2"
29
+ },
30
+ "devDependencies": {
31
+ "@babel/core": "^7.23.2",
32
+ "@babel/plugin-transform-modules-commonjs": "^7.23.0",
33
+ "@parcel/transformer-sass": "^2.10.0",
34
+ "@swc/jest": "^0.2.29",
35
+ "assert": "^2.1.0",
36
+ "browserify-zlib": "^0.2.0",
37
+ "buffer": "^6.0.3",
38
+ "canvas": "^2.11.2",
39
+ "eslint": "^8.52.0",
40
+ "events": "^3.3.0",
41
+ "https-browserify": "^1.0.0",
42
+ "husky": "^8.0.3",
43
+ "jest": "^29.7.0",
44
+ "jest-canvas-mock": "^2.5.2",
45
+ "jest-environment-jsdom": "^29.7.0",
46
+ "jest-fetch-mock": "^3.0.3",
47
+ "jsdoc": "^4.0.2",
48
+ "parcel": "^2.10.0",
49
+ "process": "^0.11.10",
50
+ "sass": "^1.69.4",
51
+ "stream-browserify": "^3.0.0",
52
+ "stream-http": "^3.2.0",
53
+ "timers-browserify": "^2.0.12",
54
+ "url": "^0.11.3",
55
+ "use-resize-observer": "^9.1.0",
56
+ "util": "^0.12.5"
57
+ },
58
+ "peerDependencies": {
59
+ "@cesium/engine": "^2.4.1"
60
+ },
61
+ "engines": {
62
+ "node": "^16.13.2 || ^18.12.0 || ^20.9.0",
63
+ "npm": "^8.1.2 || ^9.3.1 || ^10.1.0"
64
+ },
65
+ "homepage": "https://bitbucket.org/geowerkstatt-hamburg/masterportalapi#readme",
66
+ "directories": {
67
+ "example": "example",
68
+ "test": "test"
69
+ },
70
+ "bugs": {
71
+ "url": "https://bitbucket.org/geowerkstatt-hamburg/masterportalapi/issues"
72
+ }
73
+ }
@@ -13,8 +13,8 @@ function createTileSet (rawLayer) {
13
13
  if (rawLayer.cesium3DTilesetOptions) {
14
14
  Object.assign(options, rawLayer.cesium3DTilesetOptions);
15
15
  }
16
- options.url = url;
17
- return new Cesium.Cesium3DTileset(options);
16
+
17
+ return Promise.resolve(Cesium.Cesium3DTileset.fromUrl(url, options));
18
18
  }
19
19
 
20
20
  /**
@@ -33,8 +33,12 @@ export default function Tileset (rawLayer) {
33
33
  typ: rawLayer.typ
34
34
  };
35
35
  if (Cesium) {
36
- this.tileset = createTileSet(rawLayer);
37
- 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
+ });
38
42
  }
39
43
  }
40
44
 
@@ -58,7 +62,11 @@ Tileset.prototype.setOpacity = function (opacity) {
58
62
  color = splitValues.toString();
59
63
  }
60
64
 
61
- this.tileset.style = new Cesium.Cesium3DTileStyle({color});
65
+ this.tileset.then(function (tileset) {
66
+ if (tileset) {
67
+ tileset.style = new Cesium.Cesium3DTileStyle({color});
68
+ }
69
+ });
62
70
  };
63
71
 
64
72
  /**
@@ -71,10 +79,16 @@ Tileset.prototype.setVisible = function (value, map) {
71
79
  if (map && typeof map.getCesiumScene === "function") {
72
80
  if (value) {
73
81
  if (!map.getCesiumScene().primitives.contains(this.tileset)) {
74
- map.getCesiumScene().primitives.add(this.tileset);
82
+ this.tileset.then(function (tileset) {
83
+ map.getCesiumScene().primitives.add(tileset);
84
+ });
75
85
  }
76
86
  }
77
- this.tileset.show = value;
87
+ this.tileset.then(function (tileset) {
88
+ if (tileset) {
89
+ tileset.show = value;
90
+ }
91
+ });
78
92
  }
79
93
  };
80
94
 
package/src/layer/wms.js CHANGED
@@ -74,6 +74,13 @@ export function makeParams (rawLayer) {
74
74
  return params;
75
75
  }
76
76
 
77
+ async function defaultTileLoadFunction (imageTile, src) {
78
+ const response = await fetch(src),
79
+ data = await response.blob();
80
+
81
+ imageTile.getImage().src = URL.createObjectURL(data);
82
+ }
83
+
77
84
  /**
78
85
  * Creates an ol/source element for the rawLayer.
79
86
  * @param {object} rawLayer - layer specification as in services.json
@@ -118,7 +125,8 @@ export function createLayerSource (rawLayer, options) {
118
125
  tileGrid: tileGrid,
119
126
  projection: projection,
120
127
  attributions: rawLayer.olAttribution,
121
- crossOrigin: rawLayer.crossOrigin
128
+ crossOrigin: rawLayer.crossOrigin,
129
+ tileLoadFunction: defaultTileLoadFunction
122
130
  });
123
131
  }
124
132
 
@@ -127,8 +135,8 @@ export function createLayerSource (rawLayer, options) {
127
135
  * @param {object} rawLayer - layer specification as in services.json
128
136
  * @param {string} [rawLayer.id] - optional id of the layer, passed to help identification in services.json
129
137
  * @param {string} [rawLayer.url] - WMS service URL
130
- * @param {string} [rawLayer.minScale] - optional the minimal resolution
131
- * @param {string} [rawLayer.maxScale] - optional the maximal resolution
138
+ * @param {string} [rawLayer.minResolution] - optional the minimal resolution
139
+ * @param {string} [rawLayer.maxResolution] - optional the maximal resolution
132
140
  * @param {string} [rawLayer.serverType] - optional servertype definition: "geoserver" or "mapserver" or "qgis"
133
141
  * @param {string} [rawLayer.gutter] - optional the size in pixels of the gutter around image tiles to ignore
134
142
  * @param {function} [rawLayer.olAttribution] - optional function that takes a module:ol/Map~FrameState and returns a string or an array of strings representing source attributions
@@ -148,9 +156,10 @@ export function createLayer (rawLayer, layerParams = {}, options) {
148
156
 
149
157
  return new Layer(Object.assign({
150
158
  source,
151
- minResolution: rawLayer.minScale,
152
- maxResolution: rawLayer.maxScale,
153
- id: rawLayer.id
159
+ minResolution: typeof rawLayer.minResolution === "string" ? parseFloat(rawLayer.minResolution) : rawLayer.minResolution,
160
+ maxResolution: typeof rawLayer.maxResolution === "string" ? parseFloat(rawLayer.maxResolution) : rawLayer.maxResolution,
161
+ id: rawLayer.id,
162
+ extent: rawLayer.extent
154
163
  }, layerParams));
155
164
  }
156
165
 
package/src/layer/wmts.js CHANGED
@@ -176,8 +176,8 @@ function createLayer (rawLayer, layerParams = {}) {
176
176
  id: rawLayer.id,
177
177
  source: new WMTS({}),
178
178
  name: rawLayer.name,
179
- minResolution: rawLayer.minScale,
180
- maxResolution: rawLayer.maxScale,
179
+ minResolution: typeof rawLayer.minResolution === "string" ? parseFloat(rawLayer.minResolution) : rawLayer.minResolution,
180
+ maxResolution: typeof rawLayer.maxResolution === "string" ? parseFloat(rawLayer.maxResolution) : rawLayer.maxResolution,
181
181
  supported: ["2D", "3D"],
182
182
  showSettings: true,
183
183
  extent: null,
@@ -198,29 +198,27 @@ function prepareValueFromObject (key, mappingObj, properties) {
198
198
  break;
199
199
  }
200
200
  case "html": {
201
- // create tag
202
- if (mappingObj?.html?.tag) {
203
- htmltag = document.createElement(mappingObj?.html?.tag);
204
- }
205
- // create innerHTML
206
- if (mappingObj?.html?.innerHTML === "%value%") {
207
- htmltag.innerHTML = preparedValue;
208
- }
209
- else if (mappingObj?.html?.innerHTML) {
210
- htmltag.innerHTML = mappingObj?.html?.innerHTML;
211
- }
212
-
213
-
214
- if (htmltag) {
215
- if (mappingObj?.html?.properties) {
216
- htmltag = addPropertiesToHtmlTag(htmltag, mappingObj?.html?.properties, preparedValue);
201
+ if (preparedValue !== undefined) {
202
+ // create tag
203
+ if (mappingObj?.html?.tag) {
204
+ htmltag = document.createElement(mappingObj?.html?.tag);
205
+ }
206
+ // create innerHTML
207
+ if (mappingObj?.html?.innerHTML === "%value%") {
208
+ htmltag.innerHTML = preparedValue;
209
+ }
210
+ else if (mappingObj?.html?.innerHTML) {
211
+ htmltag.innerHTML = mappingObj?.html?.innerHTML;
212
+ }
213
+ if (htmltag) {
214
+ if (mappingObj?.html?.properties) {
215
+ htmltag = addPropertiesToHtmlTag(htmltag, mappingObj?.html?.properties, preparedValue);
216
+ }
217
+ preparedValue = serializer.serializeToString(htmltag);
218
+ // remove xmlns
219
+ preparedValue = preparedValue.replace(/ xmlns="(.*?)"/g, "");
217
220
  }
218
- preparedValue = serializer.serializeToString(htmltag);
219
- // remove xmlns
220
- preparedValue = preparedValue.replace(/ xmlns="(.*?)"/g, "");
221
-
222
221
  }
223
-
224
222
  break;
225
223
  }
226
224
  // default equals to mappingObj.type === "string"
@@ -216,7 +216,7 @@ function captureLegendFromFeature (styleId, legendInformation) {
216
216
  }
217
217
 
218
218
  /**
219
- * Function is called from layer models for each feature.
219
+ * Creates the style for the feature regarding the styleObject and sets style at feature.
220
220
  * @param {String} styleObject id of the style
221
221
  * @param {ol/feature} feature the feature to style
222
222
  * @param {Boolean} isClustered is feature clustered
@@ -261,6 +261,7 @@ function createStyle (styleObject, feature, isClustered, wfsImgPathFromConfig) {
261
261
  styleObjectGeometry.setText(getLabelStyle(feature, style, isClustered));
262
262
  }
263
263
  }
264
+ feature.setStyle(styleObjectGeometry);
264
265
  return styleObjectGeometry;
265
266
  }
266
267
 
@@ -1,5 +1,15 @@
1
1
  import {createLegendInfo} from "./createLegendInfo";
2
2
 
3
+ /**
4
+ * Returns true, if sibling element's tag name end with 'complexType' and its name contains the featureType.
5
+ * @param {String} sibling XML-Element to inspect
6
+ * @param {String } featureType wfs feature type from layer without namespace
7
+ * @returns {boolean} true, if sibling element's tag name end with 'complexType' and its name contains the featureType
8
+ */
9
+ function siblingContainsFeatureType (sibling, featureType) {
10
+ return sibling && sibling.tagName.endsWith("complexType") && sibling.hasAttribute("name") && sibling.getAttribute("name").includes(featureType);
11
+ }
12
+
3
13
  /**
4
14
  * Parses the xml with another structure to get the subelements from the layer
5
15
  * @param {string} xml response xml
@@ -12,11 +22,18 @@ function getSubelementsFromXMLOtherStructure (xml, featureType) {
12
22
 
13
23
  elements.forEach(element => {
14
24
  if (element.getAttribute("name") === featureType) {
15
- const sibling = element.nextElementSibling;
25
+ let sibling = element.nextElementSibling;
16
26
 
17
- if (sibling && sibling.tagName.endsWith("complexType") && sibling.hasAttribute("name")) {
27
+ if (siblingContainsFeatureType(sibling, featureType)) {
18
28
  subElements = Array.from(sibling.getElementsByTagNameNS("*", "element"));
19
29
  }
30
+ else if (element.previousElementSibling) {
31
+ sibling = element.previousElementSibling;
32
+
33
+ if (siblingContainsFeatureType(sibling, featureType)) {
34
+ subElements = Array.from(sibling.getElementsByTagNameNS("*", "element"));
35
+ }
36
+ }
20
37
  }
21
38
  });
22
39
  return subElements;
@@ -160,5 +177,7 @@ function getGeometryTypeFromOAF (rules, oafURL, collection, wfsImgPath, callback
160
177
 
161
178
  export default {
162
179
  getGeometryTypeFromWFS,
163
- getGeometryTypeFromOAF
180
+ getGeometryTypeFromOAF,
181
+ getSubelementsFromXML,
182
+ getTypeAttributesFromSubelements
164
183
  };
@@ -6,11 +6,12 @@ describe("tileset.js", function () {
6
6
 
7
7
  beforeEach(() => {
8
8
  global.Cesium = {};
9
- global.Cesium.Cesium3DTileset = jest.fn();
9
+ global.Cesium.Cesium3DTileset = {};
10
+ global.Cesium.Cesium3DTileset.fromUrl = jest.fn();
10
11
  global.Cesium.Cesium3DTileStyle = jest.fn(color => color);
11
12
  attr = {
12
13
  id: "4002",
13
- name: "Gebäude LoD2",
14
+ name: "Gebäude LoD2",
14
15
  url: "https://geoportal-hamburg.de/gdi3d/datasource-data/LoD2",
15
16
  typ: "TileSet3D",
16
17
  cesium3DTilesetOptions: {
@@ -28,7 +29,9 @@ describe("tileset.js", function () {
28
29
  };
29
30
  }
30
31
  };
31
- cesium3DTilesetSpy = jest.spyOn(global.Cesium, "Cesium3DTileset");
32
+ cesium3DTilesetSpy = jest.spyOn(global.Cesium.Cesium3DTileset, "fromUrl").mockImplementation(() => {
33
+ return Promise.resolve({});
34
+ });
32
35
  console.warn = jest.fn();
33
36
  });
34
37
 
@@ -38,21 +41,23 @@ describe("tileset.js", function () {
38
41
  console.warn = consoleWarn;
39
42
  });
40
43
 
41
- function checkAttributes (layer, attrs) {
44
+ async function checkAttributes (layer, attrs) {
45
+ const tileset = await layer.tileset;
46
+
42
47
  expect(layer.get("name")).toEqual(attrs.name);
43
48
  expect(layer.get("typ")).toEqual(attrs.typ);
44
49
  expect(layer.get("id")).toEqual(attrs.id);
45
- expect(layer.tileset.layerReferenceId).toEqual(attrs.id);
50
+ expect(tileset.layerReferenceId).toEqual(attrs.id);
46
51
  }
47
52
 
48
53
  describe("createLayer", function () {
49
54
  it("creates tileset layer without map", function () {
50
55
  const layer = new Tileset(attr);
51
56
 
52
- checkAttributes(layer, attr);
53
57
  expect(layer.tileSet).toEqual(undefined);
54
58
  expect(layer.tileset.show).toEqual(undefined);
55
59
  expect(cesium3DTilesetSpy).toHaveBeenCalledTimes(1);
60
+ checkAttributes(layer, attr);
56
61
  });
57
62
  it("creates 2 tileset layers with map and checks attributes", function () {
58
63
  const attr2 = {
@@ -70,40 +75,62 @@ describe("tileset.js", function () {
70
75
  });
71
76
  });
72
77
  describe("setOpacity", function () {
73
- it("calls setOpacity sets opacity to terrain style", function () {
78
+ it("calls setOpacity sets opacity to terrain style", function (done) {
74
79
  const layer = new Tileset(attr, map);
75
80
 
76
81
  layer.setOpacity(0.5);
77
82
 
78
- expect(layer.tileset.style).toEqual({color: "rgba(255, 255, 255, 0.5)"});
83
+ layer.tileset.then(function (tileset) {
84
+ if (tileset) {
85
+ expect(tileset.style).toEqual({color: "rgba(255, 255, 255, 0.5)"});
86
+ done();
87
+ }
88
+ });
79
89
  });
80
90
  });
81
91
  describe("setVisible", function () {
82
- it("calls setVisible without map shall not fail", function () {
92
+ it("calls setVisible without map shall not fail", function (done) {
83
93
  const layer = new Tileset(attr, map);
84
94
 
85
95
  expect(layer.tileset.show).toEqual(undefined);
86
96
  layer.setVisible(true);
87
97
 
88
- checkAttributes(layer, attr);
89
- expect(layer.tileset.show).toEqual(undefined);
90
- expect(cesium3DTilesetSpy).toHaveBeenCalledTimes(1);
98
+ layer.tileset.then(function (tileset) {
99
+ if (tileset) {
100
+ checkAttributes(layer, attr);
101
+ expect(layer.tileset.show).toEqual(undefined);
102
+ expect(cesium3DTilesetSpy).toHaveBeenCalledTimes(1);
103
+ done();
104
+ }
105
+ });
91
106
  });
92
- it("sets the tileset layer visible", function () {
107
+ it("sets the tileset layer visible", function (done) {
93
108
  const layer = new Tileset(attr, map);
94
109
 
95
110
  layer.setVisible(true, map);
96
- checkAttributes(layer, attr);
97
- expect(layer.tileset.show).toEqual(true);
98
- expect(cesium3DTilesetSpy).toHaveBeenCalledTimes(1);
111
+
112
+ layer.tileset.then(function (tileset) {
113
+ if (tileset) {
114
+ checkAttributes(layer, attr);
115
+ expect(tileset.show).toEqual(true);
116
+ expect(cesium3DTilesetSpy).toHaveBeenCalledTimes(1);
117
+ done();
118
+ }
119
+ });
99
120
  });
100
- it("sets the tileset layer not visible", function () {
121
+ it("sets the tileset layer not visible", function (done) {
101
122
  const layer = new Tileset(attr, map);
102
123
 
103
124
  layer.setVisible(false, map);
104
- checkAttributes(layer, attr);
105
- expect(layer.tileset.show).toEqual(false);
106
- expect(cesium3DTilesetSpy).toHaveBeenCalledTimes(1);
125
+
126
+ layer.tileset.then(function (tileset) {
127
+ if (tileset) {
128
+ checkAttributes(layer, attr);
129
+ expect(tileset.show).toEqual(false);
130
+ expect(cesium3DTilesetSpy).toHaveBeenCalledTimes(1);
131
+ done();
132
+ }
133
+ });
107
134
  });
108
135
  });
109
136
  describe("get", function () {
@@ -213,11 +213,12 @@ describe("wms.js", function () {
213
213
  name: "name",
214
214
  layers: "layer1, layer2"
215
215
  },
216
- layer = wms.createLayer({singleTile: false, tilesize: "10"}, layerParams, options);
216
+ layer = wms.createLayer({singleTile: false, tilesize: "10", extent: [10, 20, 11, 22]}, layerParams, options);
217
217
 
218
218
  expect(layer).toBeInstanceOf(TileLayer);
219
219
  expect(layer.get("name")).toEqual("name");
220
220
  expect(layer.get("layers")).toEqual("layer1, layer2");
221
+ expect(layer.get("extent")).toEqual([10, 20, 11, 22]);
221
222
  expect(layer.getSource().getTileGrid()).toBeInstanceOf(TileGrid);
222
223
  expect(layer.getSource().getTileGrid().getOrigin()).toEqual(options.origin);
223
224
  expect(layer.getSource().getTileGrid().getResolutions()).toEqual(options.resolutions);
@@ -303,14 +303,13 @@ describe("src/utils/attributeMapper.js", () => {
303
303
  url: "<a href=\"http://random.url.de\"></a>"
304
304
  });
305
305
  });
306
- it("should map object with mapping object and type:html and tag a", () => {
306
+ it("should NOT map object with mapping object and type:html and tag a - value not defined", () => {
307
307
  const mappingObj = {
308
308
  random_url: {
309
309
  name: "url",
310
310
  type: "html",
311
311
  html: {
312
312
  tag: "a",
313
- innerHTML: "%value%",
314
313
  properties: {
315
314
  href: "%value%"
316
315
  }
@@ -319,9 +318,28 @@ describe("src/utils/attributeMapper.js", () => {
319
318
  };
320
319
 
321
320
  expect(mapAttributes(props, mappingObj)).toEqual({
322
- url: "<a href=\"http://random.url.de\">http://random.url.de</a>"
321
+ url: "<a href=\"http://random.url.de\"></a>"
323
322
  });
324
323
  });
324
+ it("should map object with mapping object and type:html and tag a", () => {
325
+ const mappingObj = {
326
+ random_url: {
327
+ name: "url",
328
+ type: "html",
329
+ html: {
330
+ tag: "a",
331
+ innerHTML: "%value%",
332
+ properties: {
333
+ href: "%value%"
334
+ }
335
+ }
336
+ }
337
+ },
338
+ properties = Object.assign({}, props);
339
+
340
+ properties.random_url = undefined;
341
+ expect(mapAttributes(properties, mappingObj)).toEqual({});
342
+ });
325
343
  it("should map object with mapping object and type:html and tag a without innerHTML and properties", () => {
326
344
  const mappingObj = {
327
345
  random_url: {
@@ -238,6 +238,7 @@ describe("createStyle", () => {
238
238
  style = createStyle.createStyle(styleObject, jsonObjects[0], isClustered, wfsImgPathFromConfig);
239
239
 
240
240
  expect(style).toBeInstanceOf(Style);
241
+ expect(jsonObjects[0].getStyle()).toEqual(style);
241
242
  });
242
243
 
243
244
  it("should return the correct style for a feature with geometry of type MultiLineString ", () => {
@@ -262,6 +263,7 @@ describe("createStyle", () => {
262
263
  style.forEach(aStyle => {
263
264
  expect(aStyle).toBeInstanceOf(Style);
264
265
  });
266
+ expect(multiLineStringFeature.getStyle()).toEqual(style);
265
267
  });
266
268
 
267
269
  it("should return the correct style for a feature with geometry of type MultiPolygon ", () => {
@@ -295,6 +297,7 @@ describe("createStyle", () => {
295
297
  style.forEach(aStyle => {
296
298
  expect(aStyle).toBeInstanceOf(Style);
297
299
  });
300
+ expect(multiPolygonFeature.getStyle()).toEqual(style);
298
301
  });
299
302
 
300
303
  it("should return the correct style for a feature with geometry of type GeometryCollection ", () => {
@@ -328,6 +331,7 @@ describe("createStyle", () => {
328
331
  style.forEach(aStyle => {
329
332
  expect(aStyle).toBeInstanceOf(Style);
330
333
  });
334
+ expect(geometryCollectionFeature.getStyle()).toEqual(style);
331
335
  });
332
336
 
333
337
  it("should return the correct style for a feature with geometry of type MultiPoint ", () => {
@@ -361,6 +365,7 @@ describe("createStyle", () => {
361
365
  style.forEach(aStyle => {
362
366
  expect(aStyle).toBeInstanceOf(Style);
363
367
  });
368
+ expect(multiPointFeature.getStyle()).toEqual(style);
364
369
  });
365
370
  });
366
371
 
@@ -0,0 +1,141 @@
1
+ import getGeometryTypeFromService from "../../../src/vectorStyle/lib/getGeometryTypeFromService";
2
+ const fs = require("fs");
3
+ /* eslint-disable no-sync */
4
+
5
+ describe("getGeometryTypeFromService", function () {
6
+ describe("getSubelementsFromXML and getTypeAttributesFromSubelements", function () {
7
+ it("desribeFeatureType response opengis schema contains Point", function () {
8
+ let attributes = null;
9
+ const data = fs.readFileSync("test/vectorStyle/lib/resources/describeFeatureType_opengis_point.xml", "utf8"),
10
+ featureType = "bike_und_ride",
11
+ xml = new window.DOMParser().parseFromString(data, "text/xml"),
12
+ subElements = getGeometryTypeFromService.getSubelementsFromXML(xml, featureType);
13
+
14
+ expect(subElements.length).toEqual(11);
15
+
16
+ attributes = getGeometryTypeFromService.getTypeAttributesFromSubelements(subElements);
17
+ expect(attributes.length).toEqual(1);
18
+ expect(attributes[0]).toEqual("Point");
19
+ });
20
+
21
+ it("desribeFeatureType response opengis schema contains 'Geometry'", function () {
22
+ let attributes = null;
23
+ const data = fs.readFileSync("test/vectorStyle/lib/resources/describeFeatureType_opengis_geometry.xml", "utf8"),
24
+ featureType = "hamburgconvention",
25
+ xml = new window.DOMParser().parseFromString(data, "text/xml"),
26
+ subElements = getGeometryTypeFromService.getSubelementsFromXML(xml, featureType);
27
+
28
+ expect(subElements.length).toEqual(56);
29
+
30
+ attributes = getGeometryTypeFromService.getTypeAttributesFromSubelements(subElements);
31
+ expect(attributes.length).toEqual(3);
32
+ expect(attributes[0]).toEqual("Point");
33
+ expect(attributes[1]).toEqual("Polygon");
34
+ expect(attributes[2]).toEqual("LineString");
35
+ });
36
+
37
+ it("desribeFeatureType response opengis schema with namespace contains 'Geometry'", function () {
38
+ let attributes = null;
39
+ const data = fs.readFileSync("test/vectorStyle/lib/resources/describeFeatureType_xsd_opengis_geometry.xml", "utf8"),
40
+ featureType = "s_parkraumbewirt",
41
+ xml = new window.DOMParser().parseFromString(data, "text/xml"),
42
+ subElements = getGeometryTypeFromService.getSubelementsFromXML(xml, featureType);
43
+
44
+ expect(subElements.length).toEqual(6);
45
+
46
+ attributes = getGeometryTypeFromService.getTypeAttributesFromSubelements(subElements);
47
+ expect(attributes.length).toEqual(3);
48
+ expect(attributes[0]).toEqual("Point");
49
+ expect(attributes[1]).toEqual("Polygon");
50
+ expect(attributes[2]).toEqual("LineString");
51
+ });
52
+
53
+ it("desribeFeatureType response opengis schema with namespace contains 'Geometry' use styleGeometryType", function () {
54
+ let attributes = null;
55
+ const data = fs.readFileSync("test/vectorStyle/lib/resources/describeFeatureType_xsd_opengis_geometry.xml", "utf8"),
56
+ featureType = "s_parkraumbewirt",
57
+ styleGeometryType = "Point",
58
+ xml = new window.DOMParser().parseFromString(data, "text/xml"),
59
+ subElements = getGeometryTypeFromService.getSubelementsFromXML(xml, featureType);
60
+
61
+ expect(subElements.length).toEqual(6);
62
+
63
+ attributes = getGeometryTypeFromService.getTypeAttributesFromSubelements(subElements, styleGeometryType);
64
+ expect(attributes.length).toEqual(1);
65
+ expect(attributes[0]).toEqual("Point");
66
+ });
67
+
68
+ it("desribeFeatureType response opengis schema contains 'MultiPolygon'", function () {
69
+ let attributes = null;
70
+ const data = fs.readFileSync("test/vectorStyle/lib/resources/describeFeatureType_opengis_multi.xml", "utf8"),
71
+ featureType = "umring",
72
+ xml = new window.DOMParser().parseFromString(data, "text/xml"),
73
+ subElements = getGeometryTypeFromService.getSubelementsFromXML(xml, featureType);
74
+
75
+ expect(subElements.length).toEqual(1);
76
+
77
+ attributes = getGeometryTypeFromService.getTypeAttributesFromSubelements(subElements);
78
+ expect(attributes.length).toEqual(1);
79
+ expect(attributes[0]).toEqual("MultiPolygon");
80
+ });
81
+
82
+ it("desribeFeatureType response opengis schema contains 'MultiLineString'", function () {
83
+ let attributes = null;
84
+ const data = fs.readFileSync("test/vectorStyle/lib/resources/describeFeatureType_opengis_multi.xml", "utf8"),
85
+ featureType = "strecken",
86
+ xml = new window.DOMParser().parseFromString(data, "text/xml"),
87
+ subElements = getGeometryTypeFromService.getSubelementsFromXML(xml, featureType);
88
+
89
+ expect(subElements.length).toEqual(3);
90
+
91
+ attributes = getGeometryTypeFromService.getTypeAttributesFromSubelements(subElements);
92
+ expect(attributes.length).toEqual(1);
93
+ expect(attributes[0]).toEqual("MultiLineString");
94
+ });
95
+
96
+ it("desribeFeatureType response opengis schema contains 'Polygon'", function () {
97
+ let attributes = null;
98
+ const data = fs.readFileSync("test/vectorStyle/lib/resources/describeFeatureType_opengis_polygon.xml", "utf8"),
99
+ featureType = "nr_f_biosphaerenreservat",
100
+ xml = new window.DOMParser().parseFromString(data, "text/xml"),
101
+ subElements = getGeometryTypeFromService.getSubelementsFromXML(xml, featureType);
102
+
103
+ expect(subElements.length).toEqual(9);
104
+
105
+ attributes = getGeometryTypeFromService.getTypeAttributesFromSubelements(subElements);
106
+ expect(attributes.length).toEqual(1);
107
+ expect(attributes[0]).toEqual("Polygon");
108
+ });
109
+
110
+ it("desribeFeatureType response geoserver schema contains 'Point'", function () {
111
+ let attributes = null;
112
+ const data = fs.readFileSync("test/vectorStyle/lib/resources/describeFeatureType_geoserver.xml", "utf8"),
113
+ featureType = "nextbike_floating_berlin",
114
+ xml = new window.DOMParser().parseFromString(data, "text/xml"),
115
+ subElements = getGeometryTypeFromService.getSubelementsFromXML(xml, featureType);
116
+
117
+ expect(subElements.length).toEqual(4);
118
+
119
+ attributes = getGeometryTypeFromService.getTypeAttributesFromSubelements(subElements);
120
+ expect(attributes.length).toEqual(1);
121
+ expect(attributes[0]).toEqual("Point");
122
+ });
123
+
124
+ it("desribeFeatureType response geoserver schema contains 'Point', nextbike_stations_berlin", function () {
125
+ let attributes = null;
126
+ const data = fs.readFileSync("test/vectorStyle/lib/resources/describeFeatureType_geoserver.xml", "utf8"),
127
+ featureType = "nextbike_stations_berlin",
128
+ xml = new window.DOMParser().parseFromString(data, "text/xml"),
129
+ subElements = getGeometryTypeFromService.getSubelementsFromXML(xml, featureType);
130
+
131
+ expect(subElements.length).toEqual(8);
132
+
133
+ attributes = getGeometryTypeFromService.getTypeAttributesFromSubelements(subElements);
134
+ expect(attributes.length).toEqual(1);
135
+ expect(attributes[0]).toEqual("Point");
136
+ });
137
+ });
138
+
139
+ });
140
+
141
+
@@ -0,0 +1,102 @@
1
+ <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:gml="http://www.opengis.net/gml" xmlns:mdhwfs="mdhwfs" elementFormDefault="qualified" targetNamespace="mdhwfs">
2
+ <xsd:import namespace="http://www.opengis.net/gml" schemaLocation="http://api.viz.berlin.de/geoserver/schemas/gml/3.1.1/base/gml.xsd"/>
3
+ <xsd:complexType name="baustellen_sperrungenType">
4
+ <xsd:complexContent>
5
+ <xsd:extension base="gml:AbstractFeatureType">
6
+ <xsd:sequence>
7
+ <xsd:element maxOccurs="1" minOccurs="0" name="id" nillable="true" type="xsd:string"/>
8
+ <xsd:element maxOccurs="1" minOccurs="0" name="tstore" nillable="true" type="xsd:dateTime"/>
9
+ <xsd:element maxOccurs="1" minOccurs="0" name="objectstate" nillable="true" type="xsd:string"/>
10
+ <xsd:element maxOccurs="1" minOccurs="0" name="subtype" nillable="true" type="xsd:string"/>
11
+ <xsd:element maxOccurs="1" minOccurs="0" name="severity" nillable="true" type="xsd:string"/>
12
+ <xsd:element maxOccurs="1" minOccurs="0" name="validity" nillable="true" type="xsd:string"/>
13
+ <xsd:element maxOccurs="1" minOccurs="0" name="direction" nillable="true" type="xsd:string"/>
14
+ <xsd:element maxOccurs="1" minOccurs="0" name="icon" nillable="true" type="xsd:string"/>
15
+ <xsd:element maxOccurs="1" minOccurs="0" name="is_future" nillable="true" type="xsd:boolean"/>
16
+ <xsd:element maxOccurs="1" minOccurs="0" name="street" nillable="true" type="xsd:string"/>
17
+ <xsd:element maxOccurs="1" minOccurs="0" name="section" nillable="true" type="xsd:string"/>
18
+ <xsd:element maxOccurs="1" minOccurs="0" name="content" nillable="true" type="xsd:string"/>
19
+ <xsd:element maxOccurs="1" minOccurs="0" name="wkb_geometry" nillable="true" type="gml:MultiGeometryPropertyType"/>
20
+ </xsd:sequence>
21
+ </xsd:extension>
22
+ </xsd:complexContent>
23
+ </xsd:complexType>
24
+ <xsd:element name="baustellen_sperrungen" substitutionGroup="gml:_Feature" type="mdhwfs:baustellen_sperrungenType"/>
25
+ <xsd:complexType name="nextbike_floating_berlinType">
26
+ <xsd:complexContent>
27
+ <xsd:extension base="gml:AbstractFeatureType">
28
+ <xsd:sequence>
29
+ <xsd:element maxOccurs="1" minOccurs="0" name="bike_id" nillable="true" type="xsd:string"/>
30
+ <xsd:element maxOccurs="1" minOccurs="0" name="lat" nillable="true" type="xsd:decimal"/>
31
+ <xsd:element maxOccurs="1" minOccurs="0" name="lon" nillable="true" type="xsd:decimal"/>
32
+ <xsd:element maxOccurs="1" minOccurs="0" name="geom" nillable="true" type="gml:PointPropertyType"/>
33
+ </xsd:sequence>
34
+ </xsd:extension>
35
+ </xsd:complexContent>
36
+ </xsd:complexType>
37
+ <xsd:element name="nextbike_floating_berlin" substitutionGroup="gml:_Feature" type="mdhwfs:nextbike_floating_berlinType"/>
38
+ <xsd:complexType name="nextbike_stations_berlinType">
39
+ <xsd:complexContent>
40
+ <xsd:extension base="gml:AbstractFeatureType">
41
+ <xsd:sequence>
42
+ <xsd:element maxOccurs="1" minOccurs="0" name="station_name" nillable="true" type="xsd:string"/>
43
+ <xsd:element maxOccurs="1" minOccurs="0" name="station_id" nillable="true" type="xsd:int"/>
44
+ <xsd:element maxOccurs="1" minOccurs="0" name="short_name" nillable="true" type="xsd:int"/>
45
+ <xsd:element maxOccurs="1" minOccurs="0" name="lat" nillable="true" type="xsd:decimal"/>
46
+ <xsd:element maxOccurs="1" minOccurs="0" name="lon" nillable="true" type="xsd:decimal"/>
47
+ <xsd:element maxOccurs="1" minOccurs="0" name="capacity" nillable="true" type="xsd:int"/>
48
+ <xsd:element maxOccurs="1" minOccurs="0" name="bikes_avaílable" nillable="true" type="xsd:int"/>
49
+ <xsd:element maxOccurs="1" minOccurs="0" name="geom" nillable="true" type="gml:PointPropertyType"/>
50
+ </xsd:sequence>
51
+ </xsd:extension>
52
+ </xsd:complexContent>
53
+ </xsd:complexType>
54
+ <xsd:element name="nextbike_stations_berlin" substitutionGroup="gml:_Feature" type="mdhwfs:nextbike_stations_berlinType"/>
55
+ <xsd:complexType name="parkdatenType">
56
+ <xsd:complexContent>
57
+ <xsd:extension base="gml:AbstractFeatureType">
58
+ <xsd:sequence>
59
+ <xsd:element maxOccurs="1" minOccurs="0" name="markierung_parkraum" nillable="true" type="xsd:string"/>
60
+ <xsd:element maxOccurs="1" minOccurs="0" name="beschraenkungen_variieren_ueber_wochentage" nillable="true" type="xsd:string"/>
61
+ <xsd:element maxOccurs="1" minOccurs="0" name="errechnete_anzahl_parkplaetze" nillable="true" type="xsd:int"/>
62
+ <xsd:element maxOccurs="1" minOccurs="0" name="polygon_id" nillable="true" type="xsd:string"/>
63
+ <xsd:element maxOccurs="1" minOccurs="0" name="ausrichtung" nillable="true" type="xsd:string"/>
64
+ <xsd:element maxOccurs="1" minOccurs="0" name="parkort" nillable="true" type="xsd:string"/>
65
+ <xsd:element maxOccurs="1" minOccurs="0" name="parkgebuehr" nillable="true" type="xsd:string"/>
66
+ <xsd:element maxOccurs="1" minOccurs="0" name="geltungszeit_der_beschraenkung" nillable="true" type="xsd:string"/>
67
+ <xsd:element maxOccurs="1" minOccurs="0" name="geltungszeit_der_hoechstparkdauer" nillable="true" type="xsd:string"/>
68
+ <xsd:element maxOccurs="1" minOccurs="0" name="strassenname" nillable="true" type="xsd:string"/>
69
+ <xsd:element maxOccurs="1" minOccurs="0" name="ladesaeule" nillable="true" type="xsd:string"/>
70
+ <xsd:element maxOccurs="1" minOccurs="0" name="hoechstparkdauer" nillable="true" type="xsd:string"/>
71
+ <xsd:element maxOccurs="1" minOccurs="0" name="carsharing" nillable="true" type="xsd:string"/>
72
+ <xsd:element maxOccurs="1" minOccurs="0" name="beschraenkung" nillable="true" type="xsd:string"/>
73
+ <xsd:element maxOccurs="1" minOccurs="0" name="grund_fuer_beschraenkung" nillable="true" type="xsd:string"/>
74
+ <xsd:element maxOccurs="1" minOccurs="0" name="nur_schwerbehinderte" nillable="true" type="xsd:string"/>
75
+ <xsd:element maxOccurs="1" minOccurs="0" name="bewirtschaftungszeit" nillable="true" type="xsd:string"/>
76
+ <xsd:element maxOccurs="1" minOccurs="0" name="zone" nillable="true" type="xsd:string"/>
77
+ <xsd:element maxOccurs="1" minOccurs="0" name="strassen_id" nillable="true" type="xsd:string"/>
78
+ <xsd:element maxOccurs="1" minOccurs="0" name="geom" nillable="true" type="gml:SurfacePropertyType"/>
79
+ </xsd:sequence>
80
+ </xsd:extension>
81
+ </xsd:complexContent>
82
+ </xsd:complexType>
83
+ <xsd:element name="parkdaten" substitutionGroup="gml:_Feature" type="mdhwfs:parkdatenType"/>
84
+ <xsd:complexType name="sharenow_berlinType">
85
+ <xsd:complexContent>
86
+ <xsd:extension base="gml:AbstractFeatureType">
87
+ <xsd:sequence>
88
+ <xsd:element maxOccurs="1" minOccurs="0" name="v_id" nillable="true" type="xsd:string"/>
89
+ <xsd:element maxOccurs="1" minOccurs="0" name="address" nillable="true" type="xsd:string"/>
90
+ <xsd:element maxOccurs="1" minOccurs="0" name="buildseries" nillable="true" type="xsd:string"/>
91
+ <xsd:element maxOccurs="1" minOccurs="0" name="fueltype" nillable="true" type="xsd:string"/>
92
+ <xsd:element maxOccurs="1" minOccurs="0" name="fuellevel" nillable="true" type="xsd:int"/>
93
+ <xsd:element maxOccurs="1" minOccurs="0" name="plate" nillable="true" type="xsd:string"/>
94
+ <xsd:element maxOccurs="1" minOccurs="0" name="lat" nillable="true" type="xsd:decimal"/>
95
+ <xsd:element maxOccurs="1" minOccurs="0" name="lon" nillable="true" type="xsd:decimal"/>
96
+ <xsd:element maxOccurs="1" minOccurs="0" name="geom" nillable="true" type="gml:PointPropertyType"/>
97
+ </xsd:sequence>
98
+ </xsd:extension>
99
+ </xsd:complexContent>
100
+ </xsd:complexType>
101
+ <xsd:element name="sharenow_berlin" substitutionGroup="gml:_Feature" type="mdhwfs:sharenow_berlinType"/>
102
+ </xsd:schema>
@@ -0,0 +1,69 @@
1
+ <schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:gml="http://www.opengis.net/gml" xmlns:app="http://www.deegree.org/app" xmlns:xlink="http://www.w3.org/1999/xlink" targetNamespace="http://www.deegree.org/app" elementFormDefault="qualified" attributeFormDefault="unqualified">
2
+ <import namespace="http://www.opengis.net/gml" schemaLocation="http://schemas.opengis.net/gml/3.1.1/base/gml.xsd"/>
3
+ <element name="hamburgconvention" substitutionGroup="gml:_Feature">
4
+ <complexType>
5
+ <complexContent>
6
+ <extension base="gml:AbstractFeatureType">
7
+ <sequence>
8
+ <element name="flaechenname" minOccurs="0" type="string"/>
9
+ <element name="flaechenid" minOccurs="0" type="decimal"/>
10
+ <element name="bezirk" minOccurs="0" type="string"/>
11
+ <element name="stadtteil" minOccurs="0" type="string"/>
12
+ <element name="flaeche_gesamt_m" minOccurs="0" type="decimal"/>
13
+ <element name="flaeche_eventlotse_m" minOccurs="0" type="decimal"/>
14
+ <element name="dist_flghf_km" minOccurs="0" type="decimal"/>
15
+ <element name="dist_hbf_km" minOccurs="0" type="decimal"/>
16
+ <element name="dist_ubahn_m" minOccurs="0" type="decimal"/>
17
+ <element name="dist_sbahn_m" minOccurs="0" type="decimal"/>
18
+ <element name="dist_bus_m" minOccurs="0" type="decimal"/>
19
+ <element name="dist_faehre_m" minOccurs="0" type="decimal"/>
20
+ <element name="ubahn" minOccurs="0" type="string"/>
21
+ <element name="sbahn" minOccurs="0" type="string"/>
22
+ <element name="bus" minOccurs="0" type="string"/>
23
+ <element name="faehre" minOccurs="0" type="string"/>
24
+ <element name="plz" minOccurs="0" type="decimal"/>
25
+ <element name="anschluss" minOccurs="0" type="string"/>
26
+ <element name="anschluss_en" minOccurs="0" type="string"/>
27
+ <element name="hinweisstempel" minOccurs="0" type="string"/>
28
+ <element name="hinweisstempel_en" minOccurs="0" type="string"/>
29
+ <element name="bild" minOccurs="0" type="string"/>
30
+ <element name="video" minOccurs="0" type="string"/>
31
+ <element name="dokument" minOccurs="0" type="string"/>
32
+ <element name="flaechengeber" minOccurs="0" type="string"/>
33
+ <element name="flaechengeber_en" minOccurs="0" type="string"/>
34
+ <element name="premiumflaeche" minOccurs="0" type="boolean"/>
35
+ <element name="kontaktname" minOccurs="0" type="string"/>
36
+ <element name="kontakttel" minOccurs="0" type="string"/>
37
+ <element name="kontaktmail" minOccurs="0" type="string"/>
38
+ <element name="flaechengeber2" minOccurs="0" type="string"/>
39
+ <element name="flaechengeber2_en" minOccurs="0" type="string"/>
40
+ <element name="kontaktname2" minOccurs="0" type="string"/>
41
+ <element name="kontakttel2" minOccurs="0" type="string"/>
42
+ <element name="kontaktmail2" minOccurs="0" type="string"/>
43
+ <element name="beschreibung" minOccurs="0" type="string"/>
44
+ <element name="beschreibung_en" minOccurs="0" type="string"/>
45
+ <element name="nichtverfuegbarvon" minOccurs="0" type="string"/>
46
+ <element name="nichtverfuegbarbis" minOccurs="0" type="string"/>
47
+ <element name="strasse" minOccurs="0" type="string"/>
48
+ <element name="hausnr" minOccurs="0" type="string"/>
49
+ <element name="boden" minOccurs="0" type="string"/>
50
+ <element name="boden_en" minOccurs="0" type="string"/>
51
+ <element name="emission" minOccurs="0" type="string"/>
52
+ <element name="url" minOccurs="0" type="string"/>
53
+ <element name="url_en" minOccurs="0" type="string"/>
54
+ <element name="x_min" minOccurs="0" type="decimal"/>
55
+ <element name="x_max" minOccurs="0" type="decimal"/>
56
+ <element name="y_min" minOccurs="0" type="decimal"/>
57
+ <element name="y_max" minOccurs="0" type="decimal"/>
58
+ <element name="x_min_klein" minOccurs="0" type="decimal"/>
59
+ <element name="x_max_klein" minOccurs="0" type="decimal"/>
60
+ <element name="y_min_klein" minOccurs="0" type="decimal"/>
61
+ <element name="y_max_klein" minOccurs="0" type="decimal"/>
62
+ <element name="active" minOccurs="0" type="boolean"/>
63
+ <element name="the_geom" minOccurs="0" type="gml:GeometryPropertyType"/>
64
+ </sequence>
65
+ </extension>
66
+ </complexContent>
67
+ </complexType>
68
+ </element>
69
+ </schema>
@@ -0,0 +1,45 @@
1
+ <schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:gml="http://www.opengis.net/gml" xmlns:app="http://www.deegree.org/app" xmlns:xlink="http://www.w3.org/1999/xlink" targetNamespace="http://www.deegree.org/app" elementFormDefault="qualified" attributeFormDefault="unqualified">
2
+ <import namespace="http://www.opengis.net/gml" schemaLocation="http://schemas.opengis.net/gml/3.1.1/base/gml.xsd"/>
3
+ <element name="umring" substitutionGroup="gml:_Feature">
4
+ <complexType>
5
+ <complexContent>
6
+ <extension base="gml:AbstractFeatureType">
7
+ <sequence>
8
+ <element name="geom" minOccurs="0" type="gml:MultiPolygonPropertyType"/>
9
+ </sequence>
10
+ </extension>
11
+ </complexContent>
12
+ </complexType>
13
+ </element>
14
+ <element name="strecken" substitutionGroup="gml:_Feature">
15
+ <complexType>
16
+ <complexContent>
17
+ <extension base="gml:AbstractFeatureType">
18
+ <sequence>
19
+ <element name="Name" minOccurs="0" type="string"/>
20
+ <element name="visual" minOccurs="0" type="string"/>
21
+ <element name="geom" minOccurs="0" type="gml:MultiLineStringPropertyType"/>
22
+ </sequence>
23
+ </extension>
24
+ </complexContent>
25
+ </complexType>
26
+ </element>
27
+ <element name="poi" substitutionGroup="gml:_Feature">
28
+ <complexType>
29
+ <complexContent>
30
+ <extension base="gml:AbstractFeatureType">
31
+ <sequence>
32
+ <element name="titel" minOccurs="0" type="string"/>
33
+ <element name="kurztext" minOccurs="0" type="string"/>
34
+ <element name="internet" minOccurs="0" type="string"/>
35
+ <element name="bild" minOccurs="0" type="string"/>
36
+ <element name="copyright" minOccurs="0" type="string"/>
37
+ <element name="kategorie" minOccurs="0" type="string"/>
38
+ <element name="icon_vi" minOccurs="0" type="string"/>
39
+ <element name="geom" minOccurs="0" type="gml:PointPropertyType"/>
40
+ </sequence>
41
+ </extension>
42
+ </complexContent>
43
+ </complexType>
44
+ </element>
45
+ </schema>
@@ -0,0 +1,24 @@
1
+ <schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:gml="http://www.opengis.net/gml" xmlns:de.hh.up="https://registry.gdi-de.org/id/de.hh.up" xmlns:xlink="http://www.w3.org/1999/xlink" targetNamespace="https://registry.gdi-de.org/id/de.hh.up" elementFormDefault="qualified" attributeFormDefault="unqualified">
2
+ <import namespace="http://www.opengis.net/gml" schemaLocation="http://schemas.opengis.net/gml/3.1.1/base/gml.xsd"/>
3
+ <element name="bike_und_ride" substitutionGroup="gml:_Feature">
4
+ <complexType>
5
+ <complexContent>
6
+ <extension base="gml:AbstractFeatureType">
7
+ <sequence>
8
+ <element name="haltestelle" minOccurs="0" type="string"/>
9
+ <element name="symbol" minOccurs="0" type="string"/>
10
+ <element name="adresse" minOccurs="0" type="string"/>
11
+ <element name="davon_nicht_ueberdachte_stellplaetze" minOccurs="0" type="integer"/>
12
+ <element name="davon_ueberdachte_stellplaetze" minOccurs="0" type="integer"/>
13
+ <element name="davon_gesicherte_mietstellplaetze" minOccurs="0" type="integer"/>
14
+ <element name="schliessfaecher" minOccurs="0" type="integer"/>
15
+ <element name="internet" minOccurs="0" type="string"/>
16
+ <element name="email" minOccurs="0" type="string"/>
17
+ <element name="stand" minOccurs="0" type="string"/>
18
+ <element name="geom" minOccurs="0" type="gml:PointPropertyType"/>
19
+ </sequence>
20
+ </extension>
21
+ </complexContent>
22
+ </complexType>
23
+ </element>
24
+ </schema>
@@ -0,0 +1,22 @@
1
+ <schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:gml="http://www.opengis.net/gml" xmlns:de.hh.up="https://registry.gdi-de.org/id/de.hh.up" xmlns:xlink="http://www.w3.org/1999/xlink" targetNamespace="https://registry.gdi-de.org/id/de.hh.up" elementFormDefault="qualified" attributeFormDefault="unqualified">
2
+ <import namespace="http://www.opengis.net/gml" schemaLocation="http://schemas.opengis.net/gml/3.1.1/base/gml.xsd"/>
3
+ <element name="nr_f_biosphaerenreservat" substitutionGroup="gml:_Feature">
4
+ <complexType>
5
+ <complexContent>
6
+ <extension base="gml:AbstractFeatureType">
7
+ <sequence>
8
+ <element name="gebietsname" minOccurs="0" type="string"/>
9
+ <element name="gebietsnummer" minOccurs="0" type="string"/>
10
+ <element name="rechtsgrundlage" minOccurs="0" type="string"/>
11
+ <element name="schutzzone" minOccurs="0" type="integer"/>
12
+ <element name="erfassungsgrundlage" minOccurs="0" type="string"/>
13
+ <element name="info_kontakt" minOccurs="0" type="string"/>
14
+ <element name="iucn_kategorie" minOccurs="0" type="string"/>
15
+ <element name="stand_bearbeitung" minOccurs="0" type="string"/>
16
+ <element name="geom" minOccurs="0" type="gml:PolygonPropertyType"/>
17
+ </sequence>
18
+ </extension>
19
+ </complexContent>
20
+ </complexType>
21
+ </element>
22
+ </schema>
@@ -0,0 +1,18 @@
1
+ <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:gml="http://www.opengis.net/gml/3.2" xmlns:fis="http://www.berlin.de/broker" attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="http://www.berlin.de/broker">
2
+ <xsd:import namespace="http://www.opengis.net/gml/3.2" schemaLocation="http://schemas.opengis.net/gml/3.2.1/gml.xsd"/>
3
+ <xsd:element name="s_parkraumbewirt" substitutionGroup="gml:AbstractFeature" type="fis:s_parkraumbewirtType"/>
4
+ <xsd:complexType name="s_parkraumbewirtType">
5
+ <xsd:complexContent>
6
+ <xsd:extension base="gml:AbstractFeatureType">
7
+ <xsd:sequence>
8
+ <xsd:element minOccurs="0" name="parkzone" nillable="true" type="xsd:string"/>
9
+ <xsd:element minOccurs="0" name="bezirk" nillable="true" type="xsd:string"/>
10
+ <xsd:element minOccurs="0" name="zeiten" nillable="true" type="xsd:string"/>
11
+ <xsd:element minOccurs="0" name="gebuehr" nillable="true" type="xsd:string"/>
12
+ <xsd:element minOccurs="0" name="bemerkung" nillable="true" type="xsd:string"/>
13
+ <xsd:element minOccurs="0" name="geom" nillable="true" type="gml:GeometryPropertyType"/>
14
+ </xsd:sequence>
15
+ </xsd:extension>
16
+ </xsd:complexContent>
17
+ </xsd:complexType>
18
+ </xsd:schema>