@masterportal/masterportalapi 2.1.1

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 (92) hide show
  1. package/.editorconfig +15 -0
  2. package/.eslintignore +6 -0
  3. package/.eslintrc +184 -0
  4. package/.husky/pre-push +4 -0
  5. package/CHANGELOG.md +217 -0
  6. package/License.txt +21 -0
  7. package/README.md +24 -0
  8. package/babel.config.json +6 -0
  9. package/example/README.md +7 -0
  10. package/example/config/localGeoJSON.js +956 -0
  11. package/example/config/portal.json +35 -0
  12. package/example/config/services.json +79 -0
  13. package/example/index.html +27 -0
  14. package/example/index.js +210 -0
  15. package/example/style.scss +59 -0
  16. package/jest.config.js +18 -0
  17. package/jest.setup.js +5 -0
  18. package/jsdoc.json +15 -0
  19. package/package.json +62 -0
  20. package/public/marker.svg +1 -0
  21. package/public/stringMarker.js +5 -0
  22. package/src/crs.js +122 -0
  23. package/src/defaults.js +38 -0
  24. package/src/index.js +30 -0
  25. package/src/layer/geojson/index.js +109 -0
  26. package/src/layer/geojson/style.js +61 -0
  27. package/src/layer/lib.js +32 -0
  28. package/src/layer/oaf.js +207 -0
  29. package/src/layer/terrain.js +72 -0
  30. package/src/layer/tileset.js +71 -0
  31. package/src/layer/vector.js +48 -0
  32. package/src/layer/vectorBase.js +39 -0
  33. package/src/layer/wfs.js +218 -0
  34. package/src/layer/wms.js +185 -0
  35. package/src/lib/coordsToPairs.js +15 -0
  36. package/src/lib/getInitialLayers.js +22 -0
  37. package/src/lib/load3DScript.js +22 -0
  38. package/src/lib/oafUtil.js +22 -0
  39. package/src/lib/setBackgroundImage.js +23 -0
  40. package/src/lib/wfsUtil.js +75 -0
  41. package/src/lib/zoomTo.js +40 -0
  42. package/src/maps/api.js +5 -0
  43. package/src/maps/map.js +35 -0
  44. package/src/maps/mapView.js +54 -0
  45. package/src/maps/ol/olMap.js +124 -0
  46. package/src/maps/olcs/3dUtils/fixedOverlaySynchronizer.js +39 -0
  47. package/src/maps/olcs/3dUtils/wmsRasterSynchronizer.js +348 -0
  48. package/src/maps/olcs/olcsMap.js +212 -0
  49. package/src/rawLayerList.js +88 -0
  50. package/src/searchAddress/gazetteerUrl.js +22 -0
  51. package/src/searchAddress/index.js +13 -0
  52. package/src/searchAddress/parse.js +196 -0
  53. package/src/searchAddress/search.js +184 -0
  54. package/src/searchAddress/searchGazetteer.js +52 -0
  55. package/src/searchAddress/showGeographicIdentifier.js +20 -0
  56. package/src/searchAddress/types.js +17 -0
  57. package/test/.eslintrc +7 -0
  58. package/test/crs.test.js +109 -0
  59. package/test/layer/geojson/index.test.js +133 -0
  60. package/test/layer/geojson/style.test.js +46 -0
  61. package/test/layer/lib.test.js +83 -0
  62. package/test/layer/oaf.test.js +245 -0
  63. package/test/layer/resources/oafFeatures.js +105 -0
  64. package/test/layer/resources/wfsFeatures.js +26 -0
  65. package/test/layer/resources/wfsFilter.js +17 -0
  66. package/test/layer/terrain.test.js +106 -0
  67. package/test/layer/tileset.test.js +116 -0
  68. package/test/layer/vector.test.js +76 -0
  69. package/test/layer/vectorBase.test.js +48 -0
  70. package/test/layer/wfs.test.js +388 -0
  71. package/test/layer/wms.test.js +256 -0
  72. package/test/lib/coordsToPairs.test.js +9 -0
  73. package/test/lib/getInitialLayers.test.js +28 -0
  74. package/test/lib/oafUtil.test.js +24 -0
  75. package/test/lib/setBackgroundImage.test.js +49 -0
  76. package/test/lib/wfsUtil.test.js +28 -0
  77. package/test/lib/zoomTo.test.js +74 -0
  78. package/test/map.test.js +258 -0
  79. package/test/mapView.test.js +59 -0
  80. package/test/rawLayerList.test.js +48 -0
  81. package/test/searchAddress/gazetteerSearchResults/address.js +175 -0
  82. package/test/searchAddress/gazetteerSearchResults/district.js +71 -0
  83. package/test/searchAddress/gazetteerSearchResults/houseNumber.js +32 -0
  84. package/test/searchAddress/gazetteerSearchResults/index.js +19 -0
  85. package/test/searchAddress/gazetteerSearchResults/parcel.js +44 -0
  86. package/test/searchAddress/gazetteerSearchResults/street.js +46 -0
  87. package/test/searchAddress/gazetteerSearchResults/streetKey.js +51 -0
  88. package/test/searchAddress/gazetteerUrl.test.js +22 -0
  89. package/test/searchAddress/parse.test.js +110 -0
  90. package/test/searchAddress/search.test.js +150 -0
  91. package/test/searchAddress/searchGazetteer.test.js +58 -0
  92. package/test/searchAddress/showGeographicIdentifier.test.js +22 -0
@@ -0,0 +1,258 @@
1
+ import {PluggableMap, Map} from "ol";
2
+ import TileLayer from "ol/layer/Tile";
3
+ import map from "../src/maps/map.js";
4
+ import {createMap as create3DMap} from "../src/maps/olcs/olcsMap.js";
5
+ import {initializeLayerList} from "../src/rawLayerList.js";
6
+ import {registerProjections} from "../src/crs.js";
7
+ import setBackgroundImage from "../src/lib/setBackgroundImage.js";
8
+ import {createMapView} from "../src/maps/mapView";
9
+ import defaults from "../src/defaults";
10
+ import {load3DScript} from "../src/lib/load3DScript";
11
+
12
+ /*
13
+ * This test is mocking a lot to check what functions are called with.
14
+ * createMap logic is mostly calling other functions.
15
+ */
16
+ jest.mock("ol");
17
+ jest.mock("../src/rawLayerList.js", () => {
18
+ const original = jest.requireActual("../src/rawLayerList.js");
19
+
20
+ original.getLayerWhere = ({id}) => ({
21
+ exists: {
22
+ typ: "doesntExist"
23
+ },
24
+ works: {
25
+ typ: "WMS"
26
+ }
27
+ })[id];
28
+ original.initializeLayerList = jest.fn();
29
+ return original;
30
+ });
31
+ jest.mock("../src/crs.js");
32
+ jest.mock("../src/lib/setBackgroundImage.js");
33
+ jest.mock("../src/maps/mapView.js");
34
+
35
+ describe("map.js", function () {
36
+ describe("createMap", function () {
37
+ it("calls all initialization functions", function () {
38
+ const callback = jest.fn();
39
+
40
+ map.createMap(defaults, "2D", {mapParams: {}, callback: callback});
41
+ expect(initializeLayerList).toHaveBeenCalledWith(defaults.layerConf, expect.any(Function));
42
+ expect(registerProjections).toHaveBeenCalledWith(defaults.namedProjections);
43
+ expect(setBackgroundImage).toHaveBeenCalledWith(defaults);
44
+ });
45
+
46
+ it("creates a 2D MapView", function () {
47
+ map.createMap(defaults);
48
+ expect(createMapView).toHaveBeenCalledWith(defaults);
49
+ });
50
+ it("creates a MapView", function () {
51
+ map.createMap(defaults, "2D");
52
+ expect(createMapView).toHaveBeenCalledWith(defaults);
53
+ });
54
+ it("creates a 3D Map", function () {
55
+ const config = {
56
+ map2D: {
57
+ getView: () => {
58
+ return {
59
+ getProjection: () => {
60
+ return {getCode: () => "code"};
61
+ }
62
+ };
63
+ },
64
+ getViewport: () => {
65
+ return {
66
+ appendChild: jest.fn()
67
+ };
68
+ }
69
+ },
70
+ cesiumLib: "https://lib.virtualcitymap.de/v3.6.x/lib/Cesium/Cesium.js"
71
+ };
72
+
73
+ load3DScript(config.cesiumLib, function Loaded3DCallback () {
74
+ const map3D = map.createMap(config, "3D");
75
+
76
+ expect(create3DMap).toHaveBeenCalledWith(defaults);
77
+ expect(map3D.mapMode).toBe("3D");
78
+ });
79
+ });
80
+
81
+ it("creates and returns a Map object from openlayers with optional additional params", function () {
82
+ const ret = map.createMap(defaults, "2D", {mapParams: {test: 1}});
83
+
84
+ expect(Map.mock.calls[Map.mock.calls.length - 1][0].test).toBe(1);
85
+ expect(ret).toBeInstanceOf(Map);
86
+ });
87
+ });
88
+
89
+ // NOTE: loading map.js monkey patches PluggableMap.prototype.addLayer - testing result here
90
+ describe("addLayer", function () {
91
+ it("logs an error for unknown ids", function () {
92
+ console.error = jest.fn();
93
+ const consoleError = console.error,
94
+ result = PluggableMap.prototype.addLayer("999999999999999");
95
+
96
+ expect(console.error).toHaveBeenCalled();
97
+ expect(result).toBeNull();
98
+ console.error = consoleError;
99
+ });
100
+
101
+ it("logs an error for unknown types", function () {
102
+ console.error = jest.fn();
103
+ const consoleError = console.error,
104
+ result = PluggableMap.prototype.addLayer("exists");
105
+
106
+ expect(result).toBeNull();
107
+ expect(console.error).toHaveBeenCalledWith("Layer with id 'exists' has unknown type 'doesntExist'. No layer added to map.");
108
+ console.error = consoleError;
109
+ });
110
+
111
+ it("creates existing layers that have a known builder", function () {
112
+ const result = PluggableMap.prototype.addLayer("works");
113
+
114
+ expect(result).toBeInstanceOf(TileLayer);
115
+ });
116
+
117
+ it("sets visibility and transparency", function () {
118
+ const result1 = PluggableMap.prototype.addLayer("works"),
119
+ result2 = PluggableMap.prototype.addLayer("works", {}),
120
+ result3 = PluggableMap.prototype.addLayer("works", {visibility: false}),
121
+ result4 = PluggableMap.prototype.addLayer("works", {transparency: 50}),
122
+ result5 = PluggableMap.prototype.addLayer("works", {visibility: false, transparency: 20});
123
+
124
+ expect(result1.getOpacity()).toBe(1);
125
+ expect(result1.getVisible()).toBe(true);
126
+
127
+ expect(result2.getOpacity()).toBe(1);
128
+ expect(result2.getVisible()).toBe(true);
129
+
130
+ expect(result3.getOpacity()).toBe(1);
131
+ expect(result3.getVisible()).toBe(false);
132
+
133
+ expect(result4.getOpacity()).toBe(0.5);
134
+ expect(result4.getVisible()).toBe(true);
135
+
136
+ expect(result5.getOpacity()).toBe(0.8);
137
+ expect(result5.getVisible()).toBe(false);
138
+ });
139
+ });
140
+
141
+ describe("setCameraParameter", function () {
142
+ it("set the camera parameter from config", function () {
143
+ const config = {
144
+ map2D: {
145
+ getView: () => {
146
+ return {
147
+ getProjection: () => {
148
+ return {getCode: () => "code"};
149
+ }
150
+ };
151
+ },
152
+ getViewport: () => {
153
+ return {
154
+ appendChild: jest.fn()
155
+ };
156
+ }
157
+ },
158
+ cameraParameter: {
159
+ altitude: 272.3469798217454,
160
+ heading: -0.30858728378862876,
161
+ tilt: 0.9321791580603296
162
+ },
163
+ cesiumLib: "https://lib.virtualcitymap.de/v3.6.x/lib/Cesium/Cesium.js"
164
+ };
165
+
166
+ load3DScript(config.cesiumLib, function Loaded3DCallback () {
167
+ const map3D = map.createMap(config, "3D");
168
+
169
+ expect(map3D.mapMode).toBe("3D");
170
+ map.setCameraParameter(config.cameraParameter, map3D, config.cesiumLib);
171
+
172
+ expect(map3D.getCesiumScene().camera.getAltitude()).toBe(config.cameraParameter.altitude);
173
+ expect(map3D.getCesiumScene().camera.getHeading()).toBe(config.cameraParameter.heading);
174
+ expect(map3D.getCesiumScene().camera.getTilt()).toBe(config.cameraParameter.tilt);
175
+ });
176
+ });
177
+ it("set the camera from viewpoint parameter", function () {
178
+ const config = {
179
+ map2D: {
180
+ getView: () => {
181
+ return {
182
+ getProjection: () => {
183
+ return {getCode: () => "code"};
184
+ }
185
+ };
186
+ },
187
+ getViewport: () => {
188
+ return {
189
+ appendChild: jest.fn()
190
+ };
191
+ }
192
+ },
193
+ viewpoint: [{"distance": 1660.0290142521517,
194
+ "cameraPosition": [
195
+ 9.982163927085617,
196
+ 53.532817572762475,
197
+ 1180.9805498821436
198
+ ],
199
+ "groundPosition": [
200
+ 9.983171185370468,
201
+ 53.54328139366739,
202
+ -0.00449886760542777
203
+ ],
204
+ "heading": 3.281512334248587,
205
+ "pitch": -45.35612834848329,
206
+ "roll": 0.015054499334397243,
207
+ "animate": false,
208
+ "duration": 6.006336273348537
209
+ }],
210
+ cesiumLib: "https://lib.virtualcitymap.de/v3.6.x/lib/Cesium/Cesium.js"
211
+ };
212
+
213
+ load3DScript(config.cesiumLib, function Loaded3DCallback () {
214
+ const map3D = map.createMap(config, "3D");
215
+
216
+ expect(map3D.mapMode).toBe("3D");
217
+ map.setCameraParameter(config.viewpoint, map3D, config.cesiumLib);
218
+
219
+ // missing test, if the passed parameters are also in the 3D map
220
+ });
221
+ });
222
+ });
223
+
224
+ describe("prepareCamera", function () {
225
+ it("test if prepareCamera returns the Cesium camera", function () {
226
+ const config = {
227
+ map2D: {
228
+ getView: () => {
229
+ return {
230
+ getProjection: () => {
231
+ return {getCode: () => "code"};
232
+ }
233
+ };
234
+ },
235
+ getViewport: () => {
236
+ return {
237
+ appendChild: jest.fn()
238
+ };
239
+ }
240
+ },
241
+ cameraParameter: {
242
+ altitude: 272.3469798217454,
243
+ heading: -0.30858728378862876,
244
+ tilt: 0.9321791580603296
245
+ },
246
+ cesiumLib: "https://lib.virtualcitymap.de/v3.6.x/lib/Cesium/Cesium.js"
247
+ };
248
+
249
+ load3DScript(config.cesiumLib, function Loaded3DCallback () {
250
+ const map3D = map.createMap(config, "3D");
251
+
252
+ expect(map3D.mapMode).toBe("3D");
253
+ expect(map.prepareCamera(map3D.getCesiumScene(), {}, map3D, config, config.cesiumLib).toBeInstanceOf(map3D.getCesiumScene().camera));
254
+ });
255
+ });
256
+ });
257
+
258
+ });
@@ -0,0 +1,59 @@
1
+ import {View} from "ol";
2
+ import defaults from "../src/defaults";
3
+ import {createMapView, chooseZoomOrResolution} from "../src/maps/mapView";
4
+
5
+ jest.mock("ol");
6
+
7
+ describe("chooseZommOrResolution", function () {
8
+ it("returns object that contains startZoomLevel by startZommLevel as input", function () {
9
+ expect(chooseZoomOrResolution({startZoomLevel: 5}, {startZoomLevel: 5})).toMatchObject({
10
+ startZoomLevel: 5,
11
+ startResolution: undefined
12
+ });
13
+ });
14
+ it("returns object that contains startResolution by startResolution as input", function () {
15
+ expect(chooseZoomOrResolution({startResolution: 10.5}, {startResolution: 10.5})).toMatchObject({
16
+ startZoomLevel: undefined,
17
+ startResolution: 10.5
18
+ });
19
+ });
20
+ it("returns object that contains resolution with default value by empty input", function () {
21
+ expect(chooseZoomOrResolution()).toMatchObject({
22
+ startZoomLevel: undefined,
23
+ startResolution: defaults.startResolution
24
+ });
25
+ });
26
+ it("returns object that contains startResolution by startResolution and startZoomLevel as input", function () {
27
+ expect(chooseZoomOrResolution({startResolution: 10.5, startZoomLevel: 5}, {startResolution: 10.5, startZoomLevel: 5})).toMatchObject({
28
+ startZoomLevel: undefined,
29
+ startResolution: 10.5
30
+ });
31
+ });
32
+ });
33
+ describe("map.js", function () {
34
+ describe("createMapView", function () {
35
+ it("returns an instance of MapView", function () {
36
+ expect(createMapView()).toBeInstanceOf(View);
37
+ });
38
+
39
+ it("uses defaults where nothing was specified", function () {
40
+ const testData = {
41
+ extent: [5.0, 7.0, 7.4, 8.0],
42
+ options: [
43
+ {resolution: 66.14579761460263, scale: 250000, zoomLevel: 0},
44
+ {resolution: 26.458319045841044, scale: 100000, zoomLevel: 1}
45
+ ]
46
+ };
47
+
48
+ createMapView(testData);
49
+ const callParam = View.mock.calls[View.mock.calls.length - 1][0]; /* eslint-disable-line */
50
+
51
+ expect(callParam.extent).toBe(testData.extent);
52
+ expect(callParam.resolutions).toEqual(testData.options.map(x => x.resolution));
53
+ expect(callParam.resolution).toBe(defaults.startResolution);
54
+ expect(callParam.center).toBe(defaults.startCenter);
55
+ expect(callParam.projection).toBe(defaults.epsg);
56
+ });
57
+ });
58
+
59
+ });
@@ -0,0 +1,48 @@
1
+ import * as rll from "../src/rawLayerList";
2
+
3
+ const symbol = Symbol(),
4
+ services = [
5
+ {id: "1001", same: "same", name: "WebAtlasDe", gfiAttributes: symbol},
6
+ {id: "2001", same: "same", name: "Landesgrenze Hamburg", gfiAttributes: {fi9449gqgijg9hdg: "Breitengrad"}}
7
+ ];
8
+
9
+ describe("rawLayerList.js", function () {
10
+ describe("initializeLayerList", function () {
11
+ it("registers the layers if given directly", function () {
12
+ rll.initializeLayerList(services);
13
+ expect(rll.getLayerList()).toBe(services);
14
+ });
15
+
16
+ // did not test async path where URL string is given instead of services object; doesn't seem worth the mock effort
17
+ });
18
+
19
+ describe("getDisplayNamesOfFeatureAttributes", function () {
20
+ it("returns the gfi entry of a service description", function () {
21
+ expect(rll.getDisplayNamesOfFeatureAttributes("1001")).toBe(symbol);
22
+ expect(rll.getDisplayNamesOfFeatureAttributes("2001").fi9449gqgijg9hdg).toEqual("Breitengrad");
23
+ });
24
+
25
+ it("resolves a single displayName if featureAttribute is given", function () {
26
+ expect(rll.getDisplayNamesOfFeatureAttributes("2001", "fi9449gqgijg9hdg")).toEqual("Breitengrad");
27
+ });
28
+
29
+ it("returns null if either layer or featureAttribute not found", function () {
30
+ expect(rll.getDisplayNamesOfFeatureAttributes("9999")).toBeNull();
31
+ expect(rll.getDisplayNamesOfFeatureAttributes("2001", "doesntExist")).toBeNull();
32
+ });
33
+ });
34
+
35
+ describe("getLayerWhere", function () {
36
+ it("returns the element by any parameter", function () {
37
+ expect(rll.getLayerWhere({gfiAttributes: symbol})).toBe(services[0]);
38
+ });
39
+
40
+ it("returns only the first found layer that matches the parameters", function () {
41
+ expect(rll.getLayerWhere({same: "same"})).toBe(services[0]);
42
+ });
43
+
44
+ it("only returns if all criteria match", function () {
45
+ expect(rll.getLayerWhere({id: "2001", same: "not"})).toBeNull();
46
+ });
47
+ });
48
+ });
@@ -0,0 +1,175 @@
1
+ // https://geodienste.hamburg.de/HH_WFS_GAGES?service=WFS&request=GetFeature&version=2.0.0&StoredQuery_ID=AdresseMitZusatz&strassenname=pflugacker&hausnummer=13&zusatz=b
2
+ export const adresseMitZusatz = `<?xml version='1.0' encoding='UTF-8'?>
3
+ <wfs:FeatureCollection xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/wfs/2.0 http://schemas.opengis.net/wfs/2.0/wfs.xsd http://www.opengis.net/gml/3.2 http://schemas.opengis.net/gml/3.2.1/gml.xsd http://www.hamburg.de/namespaces/gages https://geodienste.hamburg.de/HH_WFS_GAGES?SERVICE=WFS&amp;VERSION=2.0.0&amp;REQUEST=DescribeFeatureType&amp;OUTPUTFORMAT=application%2Fgml%2Bxml%3B+version%3D3.2&amp;TYPENAME=gages:Hauskoordinaten&amp;NAMESPACES=xmlns(gages,http%3A%2F%2Fwww.hamburg.de%2Fnamespaces%2Fgages)" xmlns:wfs="http://www.opengis.net/wfs/2.0" timeStamp="2018-12-17T12:57:18Z" xmlns:gml="http://www.opengis.net/gml/3.2" numberMatched="unknown" numberReturned="0">
4
+ <!--NOTE: numberReturned attribute should be 'unknown' as well, but this would not validate against the current version of the WFS 2.0 schema (change upcoming). See change request (CR 144): https://portal.opengeospatial.org/files?artifact_id=43925.-->
5
+ <wfs:member>
6
+ <gages:Hauskoordinaten xmlns:gages="http://www.hamburg.de/namespaces/gages" gml:id="HH_H_256179889">
7
+ <iso19112:geographicIdentifier xmlns:iso19112="http://www.opengis.net/iso19112">Pflugacker 13b, 22523 Hamburg(OT Eidelstedt)</iso19112:geographicIdentifier>
8
+ <iso19112:geographicExtent xmlns:iso19112="http://www.opengis.net/iso19112">
9
+ <gmd:EX_BoundingPolygon xmlns:gmd="http://www.isotc211.org/2005/gmd">
10
+ <gmd:polygon>
11
+ <gml:Polygon gml:id="HH_H_256179889_ISO19112_GEOGRAPHICEXTENT" srsName="urn:ogc:def:crs:EPSG::25832">
12
+ <gml:exterior>
13
+ <gml:LinearRing>
14
+ <gml:posList>559553.353 5941019.732 559553.353 5941069.732 559603.353 5941069.732 559603.353 5941019.732 559553.353 5941019.732</gml:posList>
15
+ </gml:LinearRing>
16
+ </gml:exterior>
17
+ </gml:Polygon>
18
+ </gmd:polygon>
19
+ </gmd:EX_BoundingPolygon>
20
+ </iso19112:geographicExtent>
21
+ <iso19112:position xmlns:iso19112="http://www.opengis.net/iso19112">
22
+ <!--Inlined geometry 'HH_H_256179889_ISO19112_POSITION'-->
23
+ <gml:Point gml:id="HH_H_256179889_ISO19112_POSITION" srsName="urn:ogc:def:crs:EPSG::25832">
24
+ <gml:pos>559578.353 5941044.732</gml:pos>
25
+ </gml:Point>
26
+ </iso19112:position>
27
+ <iso19112:gazetteer xmlns:iso19112="http://www.opengis.net/iso19112" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://geodienste.hamburg.de/HH_WFS_GAGES?SERVICE=WFS&amp;VERSION=2.0.0&amp;REQUEST=GetFeature&amp;OUTPUTFORMAT=application%2Fgml%2Bxml%3B+version%3D3.2&amp;STOREDQUERY_ID=urn:ogc:def:query:OGC-WFS::GetFeatureById&amp;ID=HH_SIGA_2#HH_SIGA_2"/>
28
+ <iso19112:locationType xmlns:iso19112="http://www.opengis.net/iso19112" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://geodienste.hamburg.de/HH_WFS_GAGES?SERVICE=WFS&amp;VERSION=2.0.0&amp;REQUEST=GetFeature&amp;OUTPUTFORMAT=application%2Fgml%2Bxml%3B+version%3D3.2&amp;STOREDQUERY_ID=urn:ogc:def:query:OGC-WFS::GetFeatureById&amp;ID=HH_SILC_1#HH_SILC_1"/>
29
+ <iso19112:parent xmlns:iso19112="http://www.opengis.net/iso19112">Pflugacker (OT Eidelstedt) , Hamburg (22523)</iso19112:parent>
30
+ <dog:qualitaet xmlns:dog="http://www.adv-online.de/namespaces/adv/dog">A</dog:qualitaet>
31
+ <dog:datensatznummer xmlns:dog="http://www.adv-online.de/namespaces/adv/dog">75348</dog:datensatznummer>
32
+ <dog:land xmlns:dog="http://www.adv-online.de/namespaces/adv/dog">02</dog:land>
33
+ <dog:regierungsbezirk xmlns:dog="http://www.adv-online.de/namespaces/adv/dog">3</dog:regierungsbezirk>
34
+ <dog:kreis xmlns:dog="http://www.adv-online.de/namespaces/adv/dog">08</dog:kreis>
35
+ <dog:gemeinde xmlns:dog="http://www.adv-online.de/namespaces/adv/dog">320</dog:gemeinde>
36
+ <dog:ortsteil xmlns:dog="http://www.adv-online.de/namespaces/adv/dog">0320</dog:ortsteil>
37
+ <dog:ortsteil_kurz xmlns:dog="http://www.adv-online.de/namespaces/adv/dog">320</dog:ortsteil_kurz>
38
+ <dog:strasse xmlns:dog="http://www.adv-online.de/namespaces/adv/dog">P1080</dog:strasse>
39
+ <dog:strasse_kurz xmlns:dog="http://www.adv-online.de/namespaces/adv/dog">P108</dog:strasse_kurz>
40
+ <dog:hausnummer xmlns:dog="http://www.adv-online.de/namespaces/adv/dog">13</dog:hausnummer>
41
+ <dog:hausnummernzusatz xmlns:dog="http://www.adv-online.de/namespaces/adv/dog">b</dog:hausnummernzusatz>
42
+ <dog:hausschluessel xmlns:dog="http://www.adv-online.de/namespaces/adv/dog">02;3;08;320;0320;P1080;13;b</dog:hausschluessel>
43
+ <dog:strassenname xmlns:dog="http://www.adv-online.de/namespaces/adv/dog">Pflugacker</dog:strassenname>
44
+ <dog:strassenname_normalisiert xmlns:dog="http://www.adv-online.de/namespaces/adv/dog">PFLUGACKER</dog:strassenname_normalisiert>
45
+ <dog:strassenname_soundex xmlns:dog="http://www.adv-online.de/namespaces/adv/dog">P142</dog:strassenname_soundex>
46
+ <dog:ortsteilname xmlns:dog="http://www.adv-online.de/namespaces/adv/dog">Eidelstedt,OT 0320</dog:ortsteilname>
47
+ <dog:ortsteilname_normalisiert xmlns:dog="http://www.adv-online.de/namespaces/adv/dog">OT0320</dog:ortsteilname_normalisiert>
48
+ <dog:postleitzahl xmlns:dog="http://www.adv-online.de/namespaces/adv/dog">22523</dog:postleitzahl>
49
+ <dog:postOrtsteil xmlns:dog="http://www.adv-online.de/namespaces/adv/dog">Eidelstedt</dog:postOrtsteil>
50
+ <dog:postOrtsteil_normalisiert xmlns:dog="http://www.adv-online.de/namespaces/adv/dog">EIDELSTEDT</dog:postOrtsteil_normalisiert>
51
+ <dog:ortsnamePost xmlns:dog="http://www.adv-online.de/namespaces/adv/dog">Hamburg</dog:ortsnamePost>
52
+ <dog:ortsnamePost_normalisiert xmlns:dog="http://www.adv-online.de/namespaces/adv/dog">HAMBURG</dog:ortsnamePost_normalisiert>
53
+ <gages:amtsgericht>G2</gages:amtsgericht>
54
+ <gages:baubloecke>320053</gages:baubloecke>
55
+ <gages:statistischesgebiet>42003</gages:statistischesgebiet>
56
+ <gages:bezirke>Eimsbüttel</gages:bezirke>
57
+ <gages:bezirkenr>3</gages:bezirkenr>
58
+ <gages:finanzamt>Hamburg-Eimsbüttel</gages:finanzamt>
59
+ <gages:finanzamtnr>2245</gages:finanzamtnr>
60
+ <gages:grundbuchbezirk>305</gages:grundbuchbezirk>
61
+ <gages:polizeikommissariat>27</gages:polizeikommissariat>
62
+ <gages:wahlbezirk>32013</gages:wahlbezirk>
63
+ <gages:wahl_datum>24.09.2017</gages:wahl_datum>
64
+ <gages:wahlkreisbt>20</gages:wahlkreisbt>
65
+ <gages:wahl_datum_bt>24.09.2017</gages:wahl_datum_bt>
66
+ <gages:wahlkreisbu>6</gages:wahlkreisbu>
67
+ <gages:wahl_datum_bu>15.02.2015</gages:wahl_datum_bu>
68
+ <gages:wahlkreis_bv>7</gages:wahlkreis_bv>
69
+ <gages:wahl_datum_bv>26.05.2019</gages:wahl_datum_bv>
70
+ <gages:bplan_festgestellt>Eidelstedt2</gages:bplan_festgestellt>
71
+ <gages:status>B</gages:status>
72
+ <gages:satzzustand3>3</gages:satzzustand3>
73
+ <gages:vonDatum3>24.04.1987</gages:vonDatum3>
74
+ <gages:bisDatum3>31.12.2999</gages:bisDatum3>
75
+ <gages:wsg_layername>geplante Schutzzone III</gages:wsg_layername>
76
+ <gages:wsg_gebietsname>Eidelstedt/Stellingen (geplant)</gages:wsg_gebietsname>
77
+ <gages:alkis_flurstuecksnummer>6791</gages:alkis_flurstuecksnummer>
78
+ <gages:alkis_gemarkung>0305</gages:alkis_gemarkung>
79
+ <gages:hpaokz>320</gages:hpaokz>
80
+ <gages:grundschulnr>5271</gages:grundschulnr>
81
+ <gages:grundschule>Max-Traeger-Schule</gages:grundschule>
82
+ <gages:statischer_index>mittel</gages:statischer_index>
83
+ <gages:dynamischer_index>0</gages:dynamischer_index>
84
+ <gages:jobcenter>Eidelstedt</gages:jobcenter>
85
+ <gages:jobcenter_algii_uexxv>Eidelstedt</gages:jobcenter_algii_uexxv>
86
+ <gages:amtsgericht_name>Amtsgericht Hamburg-Altona</gages:amtsgericht_name>
87
+ </gages:Hauskoordinaten>
88
+ </wfs:member>
89
+ </wfs:FeatureCollection>`,
90
+ // https://geodienste.hamburg.de/HH_WFS_GAGES?service=WFS&request=GetFeature&version=2.0.0&StoredQuery_ID=AdresseOhneZusatz&strassenname=bargkoppelweg&hausnummer=1
91
+ adresseOhneZusatz = `<?xml version='1.0' encoding='UTF-8'?>
92
+ <wfs:FeatureCollection xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/wfs/2.0 http://schemas.opengis.net/wfs/2.0/wfs.xsd http://www.opengis.net/gml/3.2 http://schemas.opengis.net/gml/3.2.1/gml.xsd http://www.hamburg.de/namespaces/gages https://geodienste.hamburg.de/HH_WFS_GAGES?SERVICE=WFS&amp;VERSION=2.0.0&amp;REQUEST=DescribeFeatureType&amp;OUTPUTFORMAT=application%2Fgml%2Bxml%3B+version%3D3.2&amp;TYPENAME=gages:Hauskoordinaten&amp;NAMESPACES=xmlns(gages,http%3A%2F%2Fwww.hamburg.de%2Fnamespaces%2Fgages)" xmlns:wfs="http://www.opengis.net/wfs/2.0" timeStamp="2018-12-17T12:55:32Z" xmlns:gml="http://www.opengis.net/gml/3.2" numberMatched="unknown" numberReturned="0">
93
+ <!--NOTE: numberReturned attribute should be 'unknown' as well, but this would not validate against the current version of the WFS 2.0 schema (change upcoming). See change request (CR 144): https://portal.opengeospatial.org/files?artifact_id=43925.-->
94
+ <wfs:member>
95
+ <gages:Hauskoordinaten xmlns:gages="http://www.hamburg.de/namespaces/gages" gml:id="HH_H_256027156">
96
+ <iso19112:geographicIdentifier xmlns:iso19112="http://www.opengis.net/iso19112">Bargkoppelweg 1, 22145 Hamburg(OT Rahlstedt)</iso19112:geographicIdentifier>
97
+ <iso19112:geographicExtent xmlns:iso19112="http://www.opengis.net/iso19112">
98
+ <gmd:EX_BoundingPolygon xmlns:gmd="http://www.isotc211.org/2005/gmd">
99
+ <gmd:polygon>
100
+ <gml:Polygon gml:id="HH_H_256027156_ISO19112_GEOGRAPHICEXTENT" srsName="urn:ogc:def:crs:EPSG::25832">
101
+ <gml:exterior>
102
+ <gml:LinearRing>
103
+ <gml:posList>576046.966 5941895.455 576046.966 5941945.455 576096.966 5941945.455 576096.966 5941895.455 576046.966 5941895.455</gml:posList>
104
+ </gml:LinearRing>
105
+ </gml:exterior>
106
+ </gml:Polygon>
107
+ </gmd:polygon>
108
+ </gmd:EX_BoundingPolygon>
109
+ </iso19112:geographicExtent>
110
+ <iso19112:position xmlns:iso19112="http://www.opengis.net/iso19112">
111
+ <!--Inlined geometry 'HH_H_256027156_ISO19112_POSITION'-->
112
+ <gml:Point gml:id="HH_H_256027156_ISO19112_POSITION" srsName="urn:ogc:def:crs:EPSG::25832">
113
+ <gml:pos>576071.966 5941920.455</gml:pos>
114
+ </gml:Point>
115
+ </iso19112:position>
116
+ <iso19112:gazetteer xmlns:iso19112="http://www.opengis.net/iso19112" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://geodienste.hamburg.de/HH_WFS_GAGES?SERVICE=WFS&amp;VERSION=2.0.0&amp;REQUEST=GetFeature&amp;OUTPUTFORMAT=application%2Fgml%2Bxml%3B+version%3D3.2&amp;STOREDQUERY_ID=urn:ogc:def:query:OGC-WFS::GetFeatureById&amp;ID=HH_SIGA_2#HH_SIGA_2"/>
117
+ <iso19112:locationType xmlns:iso19112="http://www.opengis.net/iso19112" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://geodienste.hamburg.de/HH_WFS_GAGES?SERVICE=WFS&amp;VERSION=2.0.0&amp;REQUEST=GetFeature&amp;OUTPUTFORMAT=application%2Fgml%2Bxml%3B+version%3D3.2&amp;STOREDQUERY_ID=urn:ogc:def:query:OGC-WFS::GetFeatureById&amp;ID=HH_SILC_1#HH_SILC_1"/>
118
+ <iso19112:parent xmlns:iso19112="http://www.opengis.net/iso19112">Bargkoppelweg (OT Rahlstedt) , Hamburg (22145)</iso19112:parent>
119
+ <dog:qualitaet xmlns:dog="http://www.adv-online.de/namespaces/adv/dog">A</dog:qualitaet>
120
+ <dog:datensatznummer xmlns:dog="http://www.adv-online.de/namespaces/adv/dog">147135</dog:datensatznummer>
121
+ <dog:land xmlns:dog="http://www.adv-online.de/namespaces/adv/dog">02</dog:land>
122
+ <dog:regierungsbezirk xmlns:dog="http://www.adv-online.de/namespaces/adv/dog">5</dog:regierungsbezirk>
123
+ <dog:kreis xmlns:dog="http://www.adv-online.de/namespaces/adv/dog">18</dog:kreis>
124
+ <dog:gemeinde xmlns:dog="http://www.adv-online.de/namespaces/adv/dog">526</dog:gemeinde>
125
+ <dog:ortsteil xmlns:dog="http://www.adv-online.de/namespaces/adv/dog">0526</dog:ortsteil>
126
+ <dog:ortsteil_kurz xmlns:dog="http://www.adv-online.de/namespaces/adv/dog">526</dog:ortsteil_kurz>
127
+ <dog:strasse xmlns:dog="http://www.adv-online.de/namespaces/adv/dog">B0610</dog:strasse>
128
+ <dog:strasse_kurz xmlns:dog="http://www.adv-online.de/namespaces/adv/dog">B061</dog:strasse_kurz>
129
+ <dog:hausnummer xmlns:dog="http://www.adv-online.de/namespaces/adv/dog">1</dog:hausnummer>
130
+ <dog:hausschluessel xmlns:dog="http://www.adv-online.de/namespaces/adv/dog">02;5;18;526;0526;B0610;1</dog:hausschluessel>
131
+ <dog:strassenname xmlns:dog="http://www.adv-online.de/namespaces/adv/dog">Bargkoppelweg</dog:strassenname>
132
+ <dog:strassenname_normalisiert xmlns:dog="http://www.adv-online.de/namespaces/adv/dog">BARGKOPELWEG</dog:strassenname_normalisiert>
133
+ <dog:strassenname_soundex xmlns:dog="http://www.adv-online.de/namespaces/adv/dog">B622</dog:strassenname_soundex>
134
+ <dog:ortsteilname xmlns:dog="http://www.adv-online.de/namespaces/adv/dog">Rahlstedt,OT 0526</dog:ortsteilname>
135
+ <dog:ortsteilname_normalisiert xmlns:dog="http://www.adv-online.de/namespaces/adv/dog">OT0526</dog:ortsteilname_normalisiert>
136
+ <dog:postleitzahl xmlns:dog="http://www.adv-online.de/namespaces/adv/dog">22145</dog:postleitzahl>
137
+ <dog:postOrtsteil xmlns:dog="http://www.adv-online.de/namespaces/adv/dog">Rahlstedt</dog:postOrtsteil>
138
+ <dog:postOrtsteil_normalisiert xmlns:dog="http://www.adv-online.de/namespaces/adv/dog">RAHLSTEDT</dog:postOrtsteil_normalisiert>
139
+ <dog:ortsnamePost xmlns:dog="http://www.adv-online.de/namespaces/adv/dog">Hamburg</dog:ortsnamePost>
140
+ <dog:ortsnamePost_normalisiert xmlns:dog="http://www.adv-online.de/namespaces/adv/dog">HAMBURG</dog:ortsnamePost_normalisiert>
141
+ <gages:amtsgericht>G4</gages:amtsgericht>
142
+ <gages:baubloecke>526069</gages:baubloecke>
143
+ <gages:statistischesgebiet>74012</gages:statistischesgebiet>
144
+ <gages:bezirke>Wandsbek</gages:bezirke>
145
+ <gages:bezirkenr>5</gages:bezirkenr>
146
+ <gages:finanzamt>Hamburg-Ost</gages:finanzamt>
147
+ <gages:finanzamtnr>2244</gages:finanzamtnr>
148
+ <gages:grundbuchbezirk>542</gages:grundbuchbezirk>
149
+ <gages:polizeikommissariat>38</gages:polizeikommissariat>
150
+ <gages:wahlbezirk>52623</gages:wahlbezirk>
151
+ <gages:wahl_datum>24.09.2017</gages:wahl_datum>
152
+ <gages:wahlkreisbt>22</gages:wahlkreisbt>
153
+ <gages:wahl_datum_bt>24.09.2017</gages:wahl_datum_bt>
154
+ <gages:wahlkreisbu>14</gages:wahlkreisbu>
155
+ <gages:wahl_datum_bu>15.02.2015</gages:wahl_datum_bu>
156
+ <gages:wahlkreis_bv>8</gages:wahlkreis_bv>
157
+ <gages:wahl_datum_bv>26.05.2019</gages:wahl_datum_bv>
158
+ <gages:bplan_festgestellt>Rahlstedt112</gages:bplan_festgestellt>
159
+ <gages:status>B</gages:status>
160
+ <gages:satzzustand3>3</gages:satzzustand3>
161
+ <gages:vonDatum3>27.03.1987</gages:vonDatum3>
162
+ <gages:bisDatum3>31.12.2999</gages:bisDatum3>
163
+ <gages:alkis_flurstuecksnummer>743</gages:alkis_flurstuecksnummer>
164
+ <gages:alkis_gemarkung>0542</gages:alkis_gemarkung>
165
+ <gages:hpaokz>526</gages:hpaokz>
166
+ <gages:grundschulnr>5252</gages:grundschulnr>
167
+ <gages:grundschule>Grundschule Nydamer Weg</gages:grundschule>
168
+ <gages:statischer_index>mittel</gages:statischer_index>
169
+ <gages:dynamischer_index>0</gages:dynamischer_index>
170
+ <gages:jobcenter>Alstertal-Rahlstedt</gages:jobcenter>
171
+ <gages:jobcenter_algii_uexxv>Alstertal-Rahlstedt</gages:jobcenter_algii_uexxv>
172
+ <gages:amtsgericht_name>Amtsgericht Hamburg-Wandsbek</gages:amtsgericht_name>
173
+ </gages:Hauskoordinaten>
174
+ </wfs:member>
175
+ </wfs:FeatureCollection>`;
@@ -0,0 +1,71 @@
1
+ // https://geodienste.hamburg.de/HH_WFS_GAGES?service=WFS&request=GetFeature&version=2.0.0&StoredQuery_ID=findeStadtteil&stadtteilname=bar
2
+ export default `<?xml version='1.0' encoding='UTF-8'?>
3
+ <wfs:FeatureCollection xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/wfs/2.0 http://schemas.opengis.net/wfs/2.0/wfs.xsd http://www.opengis.net/gml/3.2 http://schemas.opengis.net/gml/3.2.1/gml.xsd http://www.adv-online.de/namespaces/adv/dog https://geodienste.hamburg.de/HH_WFS_GAGES?SERVICE=WFS&amp;VERSION=2.0.0&amp;REQUEST=DescribeFeatureType&amp;OUTPUTFORMAT=application%2Fgml%2Bxml%3B+version%3D3.2&amp;TYPENAME=dog:Kreise&amp;NAMESPACES=xmlns(dog,http%3A%2F%2Fwww.adv-online.de%2Fnamespaces%2Fadv%2Fdog)" xmlns:wfs="http://www.opengis.net/wfs/2.0" timeStamp="2018-12-17T12:45:55Z" xmlns:gml="http://www.opengis.net/gml/3.2" numberMatched="unknown" numberReturned="0">
4
+ <!--NOTE: numberReturned attribute should be 'unknown' as well, but this would not validate against the current version of the WFS 2.0 schema (change upcoming). See change request (CR 144): https://portal.opengeospatial.org/files?artifact_id=43925.-->
5
+ <wfs:member>
6
+ <dog:Kreise xmlns:dog="http://www.adv-online.de/namespaces/adv/dog" gml:id="HH_KRS_91435">
7
+ <iso19112:geographicIdentifier xmlns:iso19112="http://www.opengis.net/iso19112">Barmbek-Nord</iso19112:geographicIdentifier>
8
+ <iso19112:geographicExtent xmlns:iso19112="http://www.opengis.net/iso19112">
9
+ <gmd:EX_BoundingPolygon xmlns:gmd="http://www.isotc211.org/2005/gmd">
10
+ <gmd:polygon>
11
+ <gml:Polygon gml:id="HH_KRS_91435_ISO19112_GEOGRAPHICEXTENT" srsName="urn:ogc:def:crs:EPSG::25832">
12
+ <gml:exterior>
13
+ <gml:LinearRing>
14
+ <gml:posList>568356.869 5937678.721 570782.596 5937678.721 570782.596 5940414.428 568356.869 5940414.428 568356.869 5937678.721</gml:posList>
15
+ </gml:LinearRing>
16
+ </gml:exterior>
17
+ </gml:Polygon>
18
+ </gmd:polygon>
19
+ </gmd:EX_BoundingPolygon>
20
+ </iso19112:geographicExtent>
21
+ <iso19112:position xmlns:iso19112="http://www.opengis.net/iso19112">
22
+ <!--Inlined geometry 'HH_KRS_91435_ISO19112_POSITION'-->
23
+ <gml:Point gml:id="HH_KRS_91435_ISO19112_POSITION" srsName="urn:ogc:def:crs:EPSG::25832">
24
+ <gml:pos>569569.732 5939046.574</gml:pos>
25
+ </gml:Point>
26
+ </iso19112:position>
27
+ <iso19112:locationType xmlns:iso19112="http://www.opengis.net/iso19112" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://geodienste.hamburg.de/HH_WFS_GAGES?SERVICE=WFS&amp;VERSION=2.0.0&amp;REQUEST=GetFeature&amp;OUTPUTFORMAT=application%2Fgml%2Bxml%3B+version%3D3.2&amp;STOREDQUERY_ID=urn:ogc:def:query:OGC-WFS::GetFeatureById&amp;ID=HH_SILC_6#HH_SILC_6"/>
28
+ <dog:land>02</dog:land>
29
+ <dog:regierungsbezirk>4</dog:regierungsbezirk>
30
+ <dog:kreis>10</dog:kreis>
31
+ <dog:kreisschluessel>02;4;10</dog:kreisschluessel>
32
+ <dog:kreisname_normalisiert>BARMBEKNORD</dog:kreisname_normalisiert>
33
+ <dog:regierungsbezirksname_normalisiert>HAMBURGNORD</dog:regierungsbezirksname_normalisiert>
34
+ <dog:bundeslandname>Hamburg</dog:bundeslandname>
35
+ <dog:bundeslandname_normalisiert>HAMBURG</dog:bundeslandname_normalisiert>
36
+ </dog:Kreise>
37
+ </wfs:member>
38
+ <wfs:member>
39
+ <dog:Kreise xmlns:dog="http://www.adv-online.de/namespaces/adv/dog" gml:id="HH_KRS_91450">
40
+ <iso19112:geographicIdentifier xmlns:iso19112="http://www.opengis.net/iso19112">Barmbek-Süd</iso19112:geographicIdentifier>
41
+ <iso19112:geographicExtent xmlns:iso19112="http://www.opengis.net/iso19112">
42
+ <gmd:EX_BoundingPolygon xmlns:gmd="http://www.isotc211.org/2005/gmd">
43
+ <gmd:polygon>
44
+ <gml:Polygon gml:id="HH_KRS_91450_ISO19112_GEOGRAPHICEXTENT" srsName="urn:ogc:def:crs:EPSG::25832">
45
+ <gml:exterior>
46
+ <gml:LinearRing>
47
+ <gml:posList>567482.682 5936181.467 569976.333 5936181.467 569976.333 5937853.832 567482.682 5937853.832 567482.682 5936181.467</gml:posList>
48
+ </gml:LinearRing>
49
+ </gml:exterior>
50
+ </gml:Polygon>
51
+ </gmd:polygon>
52
+ </gmd:EX_BoundingPolygon>
53
+ </iso19112:geographicExtent>
54
+ <iso19112:position xmlns:iso19112="http://www.opengis.net/iso19112">
55
+ <!--Inlined geometry 'HH_KRS_91450_ISO19112_POSITION'-->
56
+ <gml:Point gml:id="HH_KRS_91450_ISO19112_POSITION" srsName="urn:ogc:def:crs:EPSG::25832">
57
+ <gml:pos>568729.508 5937017.649</gml:pos>
58
+ </gml:Point>
59
+ </iso19112:position>
60
+ <iso19112:locationType xmlns:iso19112="http://www.opengis.net/iso19112" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://geodienste.hamburg.de/HH_WFS_GAGES?SERVICE=WFS&amp;VERSION=2.0.0&amp;REQUEST=GetFeature&amp;OUTPUTFORMAT=application%2Fgml%2Bxml%3B+version%3D3.2&amp;STOREDQUERY_ID=urn:ogc:def:query:OGC-WFS::GetFeatureById&amp;ID=HH_SILC_6#HH_SILC_6"/>
61
+ <dog:land>02</dog:land>
62
+ <dog:regierungsbezirk>4</dog:regierungsbezirk>
63
+ <dog:kreis>08</dog:kreis>
64
+ <dog:kreisschluessel>02;4;08</dog:kreisschluessel>
65
+ <dog:kreisname_normalisiert>BARMBEKSUD</dog:kreisname_normalisiert>
66
+ <dog:regierungsbezirksname_normalisiert>HAMBURGNORD</dog:regierungsbezirksname_normalisiert>
67
+ <dog:bundeslandname>Hamburg</dog:bundeslandname>
68
+ <dog:bundeslandname_normalisiert>HAMBURG</dog:bundeslandname_normalisiert>
69
+ </dog:Kreise>
70
+ </wfs:member>
71
+ </wfs:FeatureCollection>`;