@loaders.gl/wms 3.4.13 → 3.4.15
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/dist/dist.min.js +0 -7
- package/dist/es5/bundle.js +1 -1
- package/dist/es5/bundle.js.map +1 -1
- package/dist/es5/csw-capabilities-loader.js +5 -26
- package/dist/es5/csw-capabilities-loader.js.map +1 -1
- package/dist/es5/csw-domain-loader.js +5 -26
- package/dist/es5/csw-domain-loader.js.map +1 -1
- package/dist/es5/csw-records-loader.js +4 -25
- package/dist/es5/csw-records-loader.js.map +1 -1
- package/dist/es5/gml-loader.js +5 -26
- package/dist/es5/gml-loader.js.map +1 -1
- package/dist/es5/index.js +16 -16
- package/dist/es5/lerc-loader.js +10 -47
- package/dist/es5/lerc-loader.js.map +1 -1
- package/dist/es5/lib/create-image-source.js +8 -19
- package/dist/es5/lib/create-image-source.js.map +1 -1
- package/dist/es5/lib/parsers/csw/parse-csw-capabilities.js +7 -9
- package/dist/es5/lib/parsers/csw/parse-csw-capabilities.js.map +1 -1
- package/dist/es5/lib/parsers/csw/parse-csw-domain.js +11 -25
- package/dist/es5/lib/parsers/csw/parse-csw-domain.js.map +1 -1
- package/dist/es5/lib/parsers/csw/parse-csw-records.js +21 -47
- package/dist/es5/lib/parsers/csw/parse-csw-records.js.map +1 -1
- package/dist/es5/lib/parsers/csw/parse-exception-report.js +2 -2
- package/dist/es5/lib/parsers/csw/parse-exception-report.js.map +1 -1
- package/dist/es5/lib/parsers/gml/deep-strict-equal.js +9 -11
- package/dist/es5/lib/parsers/gml/deep-strict-equal.js.map +1 -1
- package/dist/es5/lib/parsers/gml/parse-gml.js +79 -130
- package/dist/es5/lib/parsers/gml/parse-gml.js.map +1 -1
- package/dist/es5/lib/parsers/wms/parse-wms-capabilities.js +69 -126
- package/dist/es5/lib/parsers/wms/parse-wms-capabilities.js.map +1 -1
- package/dist/es5/lib/parsers/wms/parse-wms-error.js +3 -3
- package/dist/es5/lib/parsers/wms/parse-wms-error.js.map +1 -1
- package/dist/es5/lib/parsers/wms/parse-wms-features.js +5 -7
- package/dist/es5/lib/parsers/wms/parse-wms-features.js.map +1 -1
- package/dist/es5/lib/parsers/wms/parse-wms-layer-description.js +1 -1
- package/dist/es5/lib/parsers/wms/parse-wms-layer-description.js.map +1 -1
- package/dist/es5/lib/parsers/xml/parse-xml-helpers.js +6 -10
- package/dist/es5/lib/parsers/xml/parse-xml-helpers.js.map +1 -1
- package/dist/es5/lib/services/arcgis/arcgis-image-service.js +48 -146
- package/dist/es5/lib/services/arcgis/arcgis-image-service.js.map +1 -1
- package/dist/es5/lib/services/arcgis/arcgis-server.js +26 -98
- package/dist/es5/lib/services/arcgis/arcgis-server.js.map +1 -1
- package/dist/es5/lib/services/generic/image-service.js +32 -103
- package/dist/es5/lib/services/generic/image-service.js.map +1 -1
- package/dist/es5/lib/services/ogc/csw-service.js +134 -334
- package/dist/es5/lib/services/ogc/csw-service.js.map +1 -1
- package/dist/es5/lib/services/ogc/wms-service.js +218 -494
- package/dist/es5/lib/services/ogc/wms-service.js.map +1 -1
- package/dist/es5/lib/sources/data-source.js +28 -43
- package/dist/es5/lib/sources/data-source.js.map +1 -1
- package/dist/es5/lib/sources/image-source.js +1 -17
- package/dist/es5/lib/sources/image-source.js.map +1 -1
- package/dist/es5/lib/sources/tile-source.js +1 -17
- package/dist/es5/lib/sources/tile-source.js.map +1 -1
- package/dist/es5/lib/sources/utils/utils.js +11 -19
- package/dist/es5/lib/sources/utils/utils.js.map +1 -1
- package/dist/es5/wip/arcgis-feature-service.js +16 -23
- package/dist/es5/wip/arcgis-feature-service.js.map +1 -1
- package/dist/es5/wip/lib/wcs/parse-wcs-capabilities.js +7 -9
- package/dist/es5/wip/lib/wcs/parse-wcs-capabilities.js.map +1 -1
- package/dist/es5/wip/lib/wfs/parse-wfs-capabilities.js +7 -9
- package/dist/es5/wip/lib/wfs/parse-wfs-capabilities.js.map +1 -1
- package/dist/es5/wip/lib/wmts/parse-wmts-capabilities.js +7 -9
- package/dist/es5/wip/lib/wmts/parse-wmts-capabilities.js.map +1 -1
- package/dist/es5/wip/wcs-capabilities-loader.js +5 -26
- package/dist/es5/wip/wcs-capabilities-loader.js.map +1 -1
- package/dist/es5/wip/wfs-capabilities-loader.js +5 -26
- package/dist/es5/wip/wfs-capabilities-loader.js.map +1 -1
- package/dist/es5/wip/wms-feature-info-loader.js +6 -29
- package/dist/es5/wip/wms-feature-info-loader.js.map +1 -1
- package/dist/es5/wip/wms-layer-description-loader.js +6 -29
- package/dist/es5/wip/wms-layer-description-loader.js.map +1 -1
- package/dist/es5/wip/wmts-capabilities-loader.js +5 -26
- package/dist/es5/wip/wmts-capabilities-loader.js.map +1 -1
- package/dist/es5/wms-capabilities-loader.js +5 -26
- package/dist/es5/wms-capabilities-loader.js.map +1 -1
- package/dist/es5/wms-error-loader.js +13 -36
- package/dist/es5/wms-error-loader.js.map +1 -1
- package/dist/esm/csw-capabilities-loader.js +1 -1
- package/dist/esm/csw-domain-loader.js +1 -1
- package/dist/esm/csw-records-loader.js +1 -1
- package/dist/esm/gml-loader.js +1 -1
- package/dist/esm/lerc-loader.js +1 -1
- package/dist/esm/lib/services/ogc/wms-service.js +0 -1
- package/dist/esm/lib/services/ogc/wms-service.js.map +1 -1
- package/dist/esm/wip/wcs-capabilities-loader.js +1 -1
- package/dist/esm/wip/wfs-capabilities-loader.js +1 -1
- package/dist/esm/wip/wmts-capabilities-loader.js +1 -1
- package/dist/esm/wms-capabilities-loader.js +1 -1
- package/dist/esm/wms-error-loader.js +1 -1
- package/dist/lib/services/ogc/wms-service.d.ts +0 -75
- package/dist/lib/services/ogc/wms-service.d.ts.map +1 -1
- package/package.json +6 -6
- package/src/lib/services/ogc/wms-service.ts +0 -9
|
@@ -17,18 +17,9 @@ exports.parsePos = parsePos;
|
|
|
17
17
|
exports.parsePosList = parsePosList;
|
|
18
18
|
exports.parseRing = parseRing;
|
|
19
19
|
exports.parseSurface = parseSurface;
|
|
20
|
-
var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
|
|
21
|
-
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
22
|
-
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
23
|
-
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
24
20
|
var _xml = require("@loaders.gl/xml");
|
|
25
21
|
var _deepStrictEqual = require("./deep-strict-equal");
|
|
26
22
|
var _rewind = _interopRequireDefault(require("@turf/rewind"));
|
|
27
|
-
function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
|
|
28
|
-
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
29
|
-
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
|
|
30
|
-
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
31
|
-
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
32
23
|
function noTransform() {
|
|
33
24
|
for (var _len = arguments.length, coords = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
34
25
|
coords[_key] = arguments[_key];
|
|
@@ -36,21 +27,19 @@ function noTransform() {
|
|
|
36
27
|
return coords;
|
|
37
28
|
}
|
|
38
29
|
function parseGML(text, options) {
|
|
39
|
-
|
|
40
|
-
options =
|
|
30
|
+
const parsedXML = _xml.XMLLoader.parseTextSync(text, options);
|
|
31
|
+
options = {
|
|
41
32
|
transformCoords: noTransform,
|
|
42
|
-
stride: 2
|
|
43
|
-
|
|
44
|
-
|
|
33
|
+
stride: 2,
|
|
34
|
+
...options
|
|
35
|
+
};
|
|
36
|
+
const context = createChildContext(parsedXML, options, {});
|
|
45
37
|
return parseGMLToGeometry(parsedXML, options, context);
|
|
46
38
|
}
|
|
47
39
|
function parseGMLToGeometry(inputXML, options, context) {
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
_getFirstKeyValue2 = (0, _slicedToArray2.default)(_getFirstKeyValue, 2),
|
|
52
|
-
name = _getFirstKeyValue2[0],
|
|
53
|
-
xml = _getFirstKeyValue2[1];
|
|
40
|
+
const childContext = createChildContext(inputXML, options, context);
|
|
41
|
+
let geometry = null;
|
|
42
|
+
const [name, xml] = getFirstKeyValue(inputXML);
|
|
54
43
|
switch (name) {
|
|
55
44
|
case 'gml:LineString':
|
|
56
45
|
geometry = {
|
|
@@ -85,58 +74,55 @@ function parseGMLToGeometry(inputXML, options, context) {
|
|
|
85
74
|
});
|
|
86
75
|
}
|
|
87
76
|
function parseCoords(s, options, context) {
|
|
88
|
-
|
|
89
|
-
|
|
77
|
+
const stride = context.srsDimension || options.stride || 2;
|
|
78
|
+
const coords = s.replace(/\s+/g, ' ').trim().split(' ');
|
|
90
79
|
if (coords.length === 0 || coords.length % stride !== 0) {
|
|
91
80
|
throw new Error("invalid coordinates list (stride ".concat(stride, ")"));
|
|
92
81
|
}
|
|
93
|
-
|
|
94
|
-
for (
|
|
95
|
-
var _options$transformCoo
|
|
96
|
-
|
|
97
|
-
points.push(((_options$transformCoo = options.transformCoords) === null || _options$transformCoo === void 0 ? void 0 :
|
|
82
|
+
const points = [];
|
|
83
|
+
for (let i = 0; i < coords.length - 1; i += stride) {
|
|
84
|
+
var _options$transformCoo;
|
|
85
|
+
const point = coords.slice(i, i + stride).map(parseFloat);
|
|
86
|
+
points.push(((_options$transformCoo = options.transformCoords) === null || _options$transformCoo === void 0 ? void 0 : _options$transformCoo.call(options, ...point)) || point);
|
|
98
87
|
}
|
|
99
88
|
return points;
|
|
100
89
|
}
|
|
101
90
|
function parsePosList(xml, options, context) {
|
|
102
|
-
|
|
103
|
-
|
|
91
|
+
const childContext = createChildContext(xml, options, context);
|
|
92
|
+
const coords = textOf(xml);
|
|
104
93
|
if (!coords) {
|
|
105
94
|
throw new Error('invalid gml:posList element');
|
|
106
95
|
}
|
|
107
96
|
return parseCoords(coords, options, childContext);
|
|
108
97
|
}
|
|
109
98
|
function parsePos(xml, options, context) {
|
|
110
|
-
|
|
111
|
-
|
|
99
|
+
const childContext = createChildContext(xml, options, context);
|
|
100
|
+
const coords = textOf(xml);
|
|
112
101
|
if (!coords) {
|
|
113
102
|
throw new Error('invalid gml:pos element');
|
|
114
103
|
}
|
|
115
|
-
|
|
104
|
+
const points = parseCoords(coords, options, childContext);
|
|
116
105
|
if (points.length !== 1) {
|
|
117
106
|
throw new Error('gml:pos must have 1 point');
|
|
118
107
|
}
|
|
119
108
|
return points[0];
|
|
120
109
|
}
|
|
121
110
|
function parsePoint(xml, options, context) {
|
|
122
|
-
|
|
123
|
-
|
|
111
|
+
const childContext = createChildContext(xml, options, context);
|
|
112
|
+
const pos = findIn(xml, 'gml:pos');
|
|
124
113
|
if (!pos) {
|
|
125
114
|
throw new Error('invalid gml:Point element, expected a gml:pos subelement');
|
|
126
115
|
}
|
|
127
116
|
return parsePos(pos, options, childContext);
|
|
128
117
|
}
|
|
129
118
|
function parseLinearRingOrLineString(xml, options, context) {
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
119
|
+
const childContext = createChildContext(xml, options, context);
|
|
120
|
+
let points = [];
|
|
121
|
+
const posList = findIn(xml, 'gml:posList');
|
|
133
122
|
if (posList) {
|
|
134
123
|
points = parsePosList(posList, options, childContext);
|
|
135
124
|
} else {
|
|
136
|
-
for (
|
|
137
|
-
var _Object$entries$_i = (0, _slicedToArray2.default)(_Object$entries[_i], 2),
|
|
138
|
-
childName = _Object$entries$_i[0],
|
|
139
|
-
childXML = _Object$entries$_i[1];
|
|
125
|
+
for (const [childName, childXML] of Object.entries(xml)) {
|
|
140
126
|
switch (childName) {
|
|
141
127
|
case 'gml:Point':
|
|
142
128
|
points.push(parsePoint(childXML, options, childContext));
|
|
@@ -155,20 +141,17 @@ function parseLinearRingOrLineString(xml, options, context) {
|
|
|
155
141
|
return points;
|
|
156
142
|
}
|
|
157
143
|
function parseCurveSegments(xml, options, context) {
|
|
158
|
-
|
|
159
|
-
for (
|
|
160
|
-
var _Object$entries2$_i = (0, _slicedToArray2.default)(_Object$entries2[_i2], 2),
|
|
161
|
-
childName = _Object$entries2$_i[0],
|
|
162
|
-
childXML = _Object$entries2$_i[1];
|
|
144
|
+
const points = [];
|
|
145
|
+
for (const [childName, childXML] of Object.entries(xml)) {
|
|
163
146
|
switch (childName) {
|
|
164
147
|
case 'gml:LineStringSegment':
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
148
|
+
const points2 = parseLinearRingOrLineString(childXML, options, context);
|
|
149
|
+
const end = points[points.length - 1];
|
|
150
|
+
const start = points2[0];
|
|
168
151
|
if (end && start && (0, _deepStrictEqual.deepStrictEqual)(end, start)) {
|
|
169
152
|
points2.shift();
|
|
170
153
|
}
|
|
171
|
-
points.push
|
|
154
|
+
points.push(...points2);
|
|
172
155
|
break;
|
|
173
156
|
default:
|
|
174
157
|
continue;
|
|
@@ -180,31 +163,28 @@ function parseCurveSegments(xml, options, context) {
|
|
|
180
163
|
return points;
|
|
181
164
|
}
|
|
182
165
|
function parseRing(xml, options, context) {
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
for (
|
|
186
|
-
var _Object$entries3$_i = (0, _slicedToArray2.default)(_Object$entries3[_i3], 2),
|
|
187
|
-
childName = _Object$entries3$_i[0],
|
|
188
|
-
childXML = _Object$entries3$_i[1];
|
|
166
|
+
const childContext = createChildContext(xml, options, context);
|
|
167
|
+
const points = [];
|
|
168
|
+
for (const [childName, childXML] of Object.entries(xml)) {
|
|
189
169
|
switch (childName) {
|
|
190
170
|
case 'gml:curveMember':
|
|
191
|
-
|
|
192
|
-
|
|
171
|
+
let points2;
|
|
172
|
+
const lineString = findIn(childXML, 'gml:LineString');
|
|
193
173
|
if (lineString) {
|
|
194
174
|
points2 = parseLinearRingOrLineString(lineString, options, childContext);
|
|
195
175
|
} else {
|
|
196
|
-
|
|
176
|
+
const segments = findIn(childXML, 'gml:Curve', 'gml:segments');
|
|
197
177
|
if (!segments) {
|
|
198
178
|
throw new Error("invalid ".concat(childName, " element"));
|
|
199
179
|
}
|
|
200
180
|
points2 = parseCurveSegments(segments, options, childContext);
|
|
201
181
|
}
|
|
202
|
-
|
|
203
|
-
|
|
182
|
+
const end = points[points.length - 1];
|
|
183
|
+
const start = points2[0];
|
|
204
184
|
if (end && start && (0, _deepStrictEqual.deepStrictEqual)(end, start)) {
|
|
205
185
|
points2.shift();
|
|
206
186
|
}
|
|
207
|
-
points.push
|
|
187
|
+
points.push(...points2);
|
|
208
188
|
break;
|
|
209
189
|
}
|
|
210
190
|
}
|
|
@@ -214,27 +194,24 @@ function parseRing(xml, options, context) {
|
|
|
214
194
|
return points;
|
|
215
195
|
}
|
|
216
196
|
function parseExteriorOrInterior(xml, options, context) {
|
|
217
|
-
|
|
197
|
+
const linearRing = findIn(xml, 'gml:LinearRing');
|
|
218
198
|
if (linearRing) {
|
|
219
199
|
return parseLinearRingOrLineString(linearRing, options, context);
|
|
220
200
|
}
|
|
221
|
-
|
|
201
|
+
const ring = findIn(xml, 'gml:Ring');
|
|
222
202
|
if (!ring) {
|
|
223
203
|
throw new Error("invalid ".concat(xml.name, " element"));
|
|
224
204
|
}
|
|
225
205
|
return parseRing(ring, options, context);
|
|
226
206
|
}
|
|
227
207
|
function parsePolygonOrRectangle(xml, options, context) {
|
|
228
|
-
|
|
229
|
-
|
|
208
|
+
const childContext = createChildContext(xml, options, context);
|
|
209
|
+
const exterior = findIn(xml, 'gml:exterior');
|
|
230
210
|
if (!exterior) {
|
|
231
211
|
throw new Error("invalid ".concat(xml.name, " element"));
|
|
232
212
|
}
|
|
233
|
-
|
|
234
|
-
for (
|
|
235
|
-
var _Object$entries4$_i = (0, _slicedToArray2.default)(_Object$entries4[_i4], 2),
|
|
236
|
-
childName = _Object$entries4$_i[0],
|
|
237
|
-
childXML = _Object$entries4$_i[1];
|
|
213
|
+
const pointLists = [parseExteriorOrInterior(exterior, options, childContext)];
|
|
214
|
+
for (const [childName, childXML] of Object.entries(xml)) {
|
|
238
215
|
switch (childName) {
|
|
239
216
|
case 'gml:interior':
|
|
240
217
|
pointLists.push(parseExteriorOrInterior(childXML, options, childContext));
|
|
@@ -244,16 +221,13 @@ function parsePolygonOrRectangle(xml, options, context) {
|
|
|
244
221
|
return pointLists;
|
|
245
222
|
}
|
|
246
223
|
function parseSurface(xml, options, context) {
|
|
247
|
-
|
|
248
|
-
|
|
224
|
+
const childContext = createChildContext(xml, options, context);
|
|
225
|
+
const patches = findIn(xml, 'gml:patches');
|
|
249
226
|
if (!patches) {
|
|
250
227
|
throw new Error("invalid ".concat(xml.name, " element"));
|
|
251
228
|
}
|
|
252
|
-
|
|
253
|
-
for (
|
|
254
|
-
var _Object$entries5$_i = (0, _slicedToArray2.default)(_Object$entries5[_i5], 2),
|
|
255
|
-
childName = _Object$entries5$_i[0],
|
|
256
|
-
childXML = _Object$entries5$_i[1];
|
|
229
|
+
const polygons = [];
|
|
230
|
+
for (const [childName, childXML] of Object.entries(xml)) {
|
|
257
231
|
switch (childName) {
|
|
258
232
|
case 'gml:PolygonPatch':
|
|
259
233
|
case 'gml:Rectangle':
|
|
@@ -269,22 +243,16 @@ function parseSurface(xml, options, context) {
|
|
|
269
243
|
return polygons;
|
|
270
244
|
}
|
|
271
245
|
function parseCompositeSurface(xml, options, context) {
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
for (
|
|
275
|
-
var _Object$entries6$_i = (0, _slicedToArray2.default)(_Object$entries6[_i6], 2),
|
|
276
|
-
childName = _Object$entries6$_i[0],
|
|
277
|
-
childXML = _Object$entries6$_i[1];
|
|
246
|
+
const childContext = createChildContext(xml, options, context);
|
|
247
|
+
const polygons = [];
|
|
248
|
+
for (const [childName, childXML] of Object.entries(xml)) {
|
|
278
249
|
switch (childName) {
|
|
279
250
|
case 'gml:surfaceMember':
|
|
280
251
|
case 'gml:surfaceMembers':
|
|
281
|
-
|
|
282
|
-
_getFirstKeyValue4 = (0, _slicedToArray2.default)(_getFirstKeyValue3, 2),
|
|
283
|
-
c2Name = _getFirstKeyValue4[0],
|
|
284
|
-
c2Xml = _getFirstKeyValue4[1];
|
|
252
|
+
const [c2Name, c2Xml] = getFirstKeyValue(childXML);
|
|
285
253
|
switch (c2Name) {
|
|
286
254
|
case 'gml:Surface':
|
|
287
|
-
polygons.push
|
|
255
|
+
polygons.push(...parseSurface(c2Xml, options, childContext));
|
|
288
256
|
break;
|
|
289
257
|
case 'gml:Polygon':
|
|
290
258
|
polygons.push(parsePolygonOrRectangle(c2Xml, options, childContext));
|
|
@@ -299,39 +267,27 @@ function parseCompositeSurface(xml, options, context) {
|
|
|
299
267
|
return polygons;
|
|
300
268
|
}
|
|
301
269
|
function parseMultiSurface(xml, options, context) {
|
|
302
|
-
|
|
303
|
-
|
|
270
|
+
let el = xml;
|
|
271
|
+
const surfaceMembers = findIn(xml, 'gml:LinearRing');
|
|
304
272
|
if (surfaceMembers) {
|
|
305
273
|
el = surfaceMembers;
|
|
306
274
|
}
|
|
307
|
-
|
|
308
|
-
for (
|
|
309
|
-
var _Object$entries7$_i = (0, _slicedToArray2.default)(_Object$entries7[_i7], 2),
|
|
310
|
-
childName = _Object$entries7$_i[0],
|
|
311
|
-
childXML = _Object$entries7$_i[1];
|
|
275
|
+
const polygons = [];
|
|
276
|
+
for (const [childName, childXML] of Object.entries(el)) {
|
|
312
277
|
switch (childName) {
|
|
313
278
|
case 'gml:Surface':
|
|
314
|
-
|
|
315
|
-
polygons.push
|
|
279
|
+
const polygons2 = parseSurface(childXML, options, context);
|
|
280
|
+
polygons.push(...polygons2);
|
|
316
281
|
break;
|
|
317
282
|
case 'gml:surfaceMember':
|
|
318
|
-
|
|
319
|
-
polygons.push
|
|
283
|
+
const polygons3 = parseSurfaceMember(childXML, options, context);
|
|
284
|
+
polygons.push(...polygons3);
|
|
320
285
|
break;
|
|
321
286
|
case 'gml:surfaceMembers':
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
327
|
-
var surfaceMemberXML = _step.value;
|
|
328
|
-
var _polygons = parseSurfaceMember(surfaceMemberXML, options, context);
|
|
329
|
-
polygons.push.apply(polygons, _polygons);
|
|
330
|
-
}
|
|
331
|
-
} catch (err) {
|
|
332
|
-
_iterator.e(err);
|
|
333
|
-
} finally {
|
|
334
|
-
_iterator.f();
|
|
287
|
+
const polygonXML = findIn(childXML, 'gml:Polygon');
|
|
288
|
+
for (const surfaceMemberXML of polygonXML) {
|
|
289
|
+
const polygons3 = parseSurfaceMember(surfaceMemberXML, options, context);
|
|
290
|
+
polygons.push(...polygons3);
|
|
335
291
|
}
|
|
336
292
|
break;
|
|
337
293
|
}
|
|
@@ -342,10 +298,7 @@ function parseMultiSurface(xml, options, context) {
|
|
|
342
298
|
return polygons;
|
|
343
299
|
}
|
|
344
300
|
function parseSurfaceMember(xml, options, context) {
|
|
345
|
-
|
|
346
|
-
_getFirstKeyValue6 = (0, _slicedToArray2.default)(_getFirstKeyValue5, 2),
|
|
347
|
-
childName = _getFirstKeyValue6[0],
|
|
348
|
-
childXml = _getFirstKeyValue6[1];
|
|
301
|
+
const [childName, childXml] = getFirstKeyValue(xml);
|
|
349
302
|
switch (childName) {
|
|
350
303
|
case 'gml:CompositeSurface':
|
|
351
304
|
return parseCompositeSurface(childXml, options, context);
|
|
@@ -363,13 +316,12 @@ function textOf(el) {
|
|
|
363
316
|
return el;
|
|
364
317
|
}
|
|
365
318
|
function findIn(root) {
|
|
366
|
-
|
|
319
|
+
let el = root;
|
|
367
320
|
for (var _len2 = arguments.length, tags = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {
|
|
368
321
|
tags[_key2 - 1] = arguments[_key2];
|
|
369
322
|
}
|
|
370
|
-
for (
|
|
371
|
-
|
|
372
|
-
var child = el[tag];
|
|
323
|
+
for (const tag of tags) {
|
|
324
|
+
const child = el[tag];
|
|
373
325
|
if (!child) {
|
|
374
326
|
return null;
|
|
375
327
|
}
|
|
@@ -378,24 +330,21 @@ function findIn(root) {
|
|
|
378
330
|
return el;
|
|
379
331
|
}
|
|
380
332
|
function getFirstKeyValue(object) {
|
|
381
|
-
if (object &&
|
|
382
|
-
for (
|
|
383
|
-
|
|
384
|
-
_key3 = _Object$entries8$_i[0],
|
|
385
|
-
value = _Object$entries8$_i[1];
|
|
386
|
-
return [_key3, value];
|
|
333
|
+
if (object && typeof object === 'object') {
|
|
334
|
+
for (const [key, value] of Object.entries(object)) {
|
|
335
|
+
return [key, value];
|
|
387
336
|
}
|
|
388
337
|
}
|
|
389
338
|
return ['', null];
|
|
390
339
|
}
|
|
391
340
|
function createChildContext(xml, options, context) {
|
|
392
|
-
|
|
341
|
+
const srsDimensionAttribute = xml.attributes && xml.attributes.srsDimension;
|
|
393
342
|
if (srsDimensionAttribute) {
|
|
394
|
-
|
|
343
|
+
const srsDimension = parseInt(srsDimensionAttribute);
|
|
395
344
|
if (Number.isNaN(srsDimension) || srsDimension <= 0) {
|
|
396
345
|
throw new Error("invalid srsDimension attribute value \"".concat(srsDimensionAttribute, "\", expected a positive integer"));
|
|
397
346
|
}
|
|
398
|
-
|
|
347
|
+
const childContext = Object.create(context);
|
|
399
348
|
childContext.srsDimension = srsDimension;
|
|
400
349
|
return childContext;
|
|
401
350
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parse-gml.js","names":["_xml","require","_deepStrictEqual","_rewind","_interopRequireDefault","_createForOfIteratorHelper","o","allowArrayLike","it","Symbol","iterator","Array","isArray","_unsupportedIterableToArray","length","i","F","s","n","done","value","e","_e","f","TypeError","normalCompletion","didErr","err","call","step","next","_e2","return","minLen","_arrayLikeToArray","Object","prototype","toString","slice","constructor","name","from","test","arr","len","arr2","ownKeys","object","enumerableOnly","keys","getOwnPropertySymbols","symbols","filter","sym","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","target","arguments","source","forEach","key","_defineProperty2","default","getOwnPropertyDescriptors","defineProperties","defineProperty","noTransform","_len","coords","_key","parseGML","text","options","parsedXML","XMLLoader","parseTextSync","transformCoords","stride","context","createChildContext","parseGMLToGeometry","inputXML","childContext","geometry","_getFirstKeyValue","getFirstKeyValue","_getFirstKeyValue2","_slicedToArray2","xml","type","coordinates","parseLinearRingOrLineString","parsePolygonOrRectangle","parseSurface","parseMultiSurface","rewind","mutate","parseCoords","srsDimension","replace","trim","split","Error","concat","points","_options$transformCoo","_options$transformCoo2","point","map","parseFloat","_toConsumableArray2","parsePosList","textOf","parsePos","parsePoint","pos","findIn","posList","_i","_Object$entries","entries","_Object$entries$_i","childName","childXML","parseCurveSegments","_i2","_Object$entries2","_Object$entries2$_i","points2","end","start","deepStrictEqual","shift","parseRing","_i3","_Object$entries3","_Object$entries3$_i","lineString","segments","parseExteriorOrInterior","linearRing","ring","exterior","pointLists","_i4","_Object$entries4","_Object$entries4$_i","patches","polygons","_i5","_Object$entries5","_Object$entries5$_i","parseCompositeSurface","_i6","_Object$entries6","_Object$entries6$_i","_getFirstKeyValue3","_getFirstKeyValue4","c2Name","c2Xml","el","surfaceMembers","_i7","_Object$entries7","_Object$entries7$_i","polygons2","polygons3","parseSurfaceMember","polygonXML","_iterator","_step","surfaceMemberXML","_getFirstKeyValue5","_getFirstKeyValue6","childXml","root","_len2","tags","_key2","_i8","_tags","tag","child","_typeof2","_i9","_Object$entries8","_Object$entries8$_i","srsDimensionAttribute","attributes","parseInt","Number","isNaN","create"],"sources":["../../../../../src/lib/parsers/gml/parse-gml.ts"],"sourcesContent":["// loaders.gl, MIT license\n\n// Forked from https://github.com/derhuerst/parse-gml-polygon/blob/master/index.js\n// under ISC license\n\n/* eslint-disable no-continue, default-case */\n\nimport type {\n // GeoJSON,\n // Feature,\n // FeatureCollection,\n Geometry,\n Position\n // GeoJsonProperties,\n // Point,\n // MultiPoint,\n // LineString,\n // MultiLineString,\n // Polygon,\n // MultiPolygon,\n // GeometryCollection\n} from '@loaders.gl/schema';\n\nimport {XMLLoader} from '@loaders.gl/xml';\nimport {deepStrictEqual} from './deep-strict-equal';\nimport rewind from '@turf/rewind';\n\nfunction noTransform(...coords) {\n return coords;\n}\n\nexport type ParseGMLOptions = {\n transformCoords?: Function;\n stride?: 2 | 3 | 4;\n};\n\nexport type ParseGMLContext = {\n srsDimension?: number;\n [key: string]: any;\n};\n\n/**\n * Parses a typed data structure from raw XML for GML features\n * @note Error handlings is fairly weak\n */\nexport function parseGML(text: string, options) {\n // GeoJSON | null {\n const parsedXML = XMLLoader.parseTextSync(text, options);\n\n options = {transformCoords: noTransform, stride: 2, ...options};\n const context = createChildContext(parsedXML, options, {});\n\n return parseGMLToGeometry(parsedXML, options, context);\n}\n\n/** Parse a GeoJSON geometry from GML XML */\nexport function parseGMLToGeometry(\n inputXML: any,\n options: ParseGMLOptions,\n context: ParseGMLContext\n): Geometry | null {\n const childContext = createChildContext(inputXML, options, context);\n\n let geometry: Geometry | null = null;\n\n const [name, xml] = getFirstKeyValue(inputXML);\n\n switch (name) {\n // case 'gml:MultiPoint':\n // geometry = {\n // type: 'MultiPoint',\n // coordinates: parseMultiPoint(xml, options, childContext)\n // };\n // break;\n\n case 'gml:LineString':\n geometry = {\n type: 'LineString',\n coordinates: parseLinearRingOrLineString(xml, options, childContext)\n };\n break;\n\n // case 'gml:MultiLineString':\n // geometry = {\n // type: 'MultiLineString',\n // coordinates: parseMultiLineString(xml, options, childContext)\n // };\n // break;\n\n case 'gml:Polygon':\n case 'gml:Rectangle':\n geometry = {\n type: 'Polygon',\n coordinates: parsePolygonOrRectangle(xml, options, childContext)\n };\n break;\n case 'gml:Surface':\n geometry = {\n type: 'MultiPolygon',\n coordinates: parseSurface(xml, options, childContext)\n };\n break;\n case 'gml:MultiSurface':\n geometry = {\n type: 'MultiPolygon',\n coordinates: parseMultiSurface(xml, options, childContext)\n };\n break;\n\n default:\n return null;\n }\n\n // todo\n return rewind(geometry, {mutate: true});\n}\n\n/** Parse a list of coordinates from a string */\nfunction parseCoords(s: string, options: ParseGMLOptions, context: ParseGMLContext): Position[] {\n const stride = context.srsDimension || options.stride || 2;\n\n // Handle white space\n const coords = s.replace(/\\s+/g, ' ').trim().split(' ');\n\n if (coords.length === 0 || coords.length % stride !== 0) {\n throw new Error(`invalid coordinates list (stride ${stride})`);\n }\n\n const points: Position[] = [];\n for (let i = 0; i < coords.length - 1; i += stride) {\n const point = coords.slice(i, i + stride).map(parseFloat);\n points.push(options.transformCoords?.(...point) || point);\n }\n\n return points;\n}\n\nexport function parsePosList(xml: any, options: ParseGMLOptions, context: ParseGMLContext) {\n const childContext = createChildContext(xml, options, context);\n\n const coords = textOf(xml);\n if (!coords) {\n throw new Error('invalid gml:posList element');\n }\n\n return parseCoords(coords, options, childContext);\n}\n\nexport function parsePos(xml: any, options: ParseGMLOptions, context: ParseGMLContext): Position {\n const childContext = createChildContext(xml, options, context);\n\n const coords = textOf(xml);\n if (!coords) {\n throw new Error('invalid gml:pos element');\n }\n\n const points = parseCoords(coords, options, childContext);\n if (points.length !== 1) {\n throw new Error('gml:pos must have 1 point');\n }\n return points[0];\n}\n\nexport function parsePoint(xml: any, options: ParseGMLOptions, context: ParseGMLContext): number[] {\n const childContext = createChildContext(xml, options, context);\n\n // TODO AV: Parse other gml:Point options\n const pos = findIn(xml, 'gml:pos');\n if (!pos) {\n throw new Error('invalid gml:Point element, expected a gml:pos subelement');\n }\n return parsePos(pos, options, childContext);\n}\n\nexport function parseLinearRingOrLineString(\n xml: any,\n options: ParseGMLOptions,\n context: ParseGMLContext\n): Position[] {\n // or a LineStringSegment\n const childContext = createChildContext(xml, options, context);\n\n let points: Position[] = [];\n\n const posList = findIn(xml, 'gml:posList');\n if (posList) {\n points = parsePosList(posList, options, childContext);\n } else {\n for (const [childName, childXML] of Object.entries(xml)) {\n switch (childName) {\n case 'gml:Point':\n points.push(parsePoint(childXML, options, childContext));\n break;\n case 'gml:pos':\n points.push(parsePos(childXML, options, childContext));\n break;\n default:\n continue;\n }\n }\n }\n\n if (points.length === 0) {\n throw new Error(`${xml.name} must have > 0 points`);\n }\n return points;\n}\n\nexport function parseCurveSegments(\n xml: any,\n options: ParseGMLOptions,\n context: ParseGMLContext\n): Position[] {\n const points: Position[] = [];\n\n for (const [childName, childXML] of Object.entries(xml)) {\n switch (childName) {\n case 'gml:LineStringSegment':\n const points2 = parseLinearRingOrLineString(childXML, options, context);\n\n // remove overlapping\n const end = points[points.length - 1];\n const start = points2[0];\n if (end && start && deepStrictEqual(end, start)) {\n points2.shift();\n }\n\n points.push(...points2);\n break;\n default:\n continue;\n }\n }\n\n if (points.length === 0) {\n throw new Error('gml:Curve > gml:segments must have > 0 points');\n }\n return points;\n}\n\nexport function parseRing(\n xml: any,\n options: ParseGMLOptions,\n context: ParseGMLContext\n): Position[] {\n const childContext = createChildContext(xml, options, context);\n\n const points: Position[] = [];\n\n for (const [childName, childXML] of Object.entries(xml)) {\n switch (childName) {\n case 'gml:curveMember':\n let points2;\n\n const lineString = findIn(childXML, 'gml:LineString');\n if (lineString) {\n points2 = parseLinearRingOrLineString(lineString, options, childContext);\n } else {\n const segments = findIn(childXML, 'gml:Curve', 'gml:segments');\n if (!segments) {\n throw new Error(`invalid ${childName} element`);\n }\n\n points2 = parseCurveSegments(segments, options, childContext);\n }\n\n // remove overlapping\n const end = points[points.length - 1];\n const start = points2[0];\n if (end && start && deepStrictEqual(end, start)) {\n points2.shift();\n }\n\n points.push(...points2);\n\n break;\n }\n }\n\n if (points.length < 4) {\n throw new Error(`${xml.name} must have >= 4 points`);\n }\n return points;\n}\n\nexport function parseExteriorOrInterior(\n xml: any,\n options: ParseGMLOptions,\n context: ParseGMLContext\n): Position[] {\n const linearRing = findIn(xml, 'gml:LinearRing');\n if (linearRing) {\n return parseLinearRingOrLineString(linearRing, options, context);\n }\n\n const ring = findIn(xml, 'gml:Ring');\n if (!ring) {\n throw new Error(`invalid ${xml.name} element`);\n }\n\n return parseRing(ring, options, context);\n}\n\nexport function parsePolygonOrRectangle(\n xml: any,\n options: ParseGMLOptions,\n context: ParseGMLContext\n): Position[][] {\n // or PolygonPatch\n const childContext = createChildContext(xml, options, context);\n\n const exterior = findIn(xml, 'gml:exterior');\n if (!exterior) {\n throw new Error(`invalid ${xml.name} element`);\n }\n\n const pointLists: Position[][] = [parseExteriorOrInterior(exterior, options, childContext)];\n\n for (const [childName, childXML] of Object.entries(xml)) {\n switch (childName) {\n case 'gml:interior':\n pointLists.push(parseExteriorOrInterior(childXML, options, childContext));\n break;\n }\n }\n\n return pointLists;\n}\n\nexport function parseSurface(\n xml: any,\n options: ParseGMLOptions,\n context: ParseGMLContext\n): Position[][][] {\n const childContext = createChildContext(xml, options, context);\n\n const patches = findIn(xml, 'gml:patches');\n if (!patches) {\n throw new Error(`invalid ${xml.name} element`);\n }\n\n const polygons: Position[][][] = [];\n for (const [childName, childXML] of Object.entries(xml)) {\n switch (childName) {\n case 'gml:PolygonPatch':\n case 'gml:Rectangle':\n polygons.push(parsePolygonOrRectangle(childXML, options, childContext));\n break;\n\n default:\n continue;\n }\n }\n\n if (polygons.length === 0) {\n throw new Error(`${xml.name} must have > 0 polygons`);\n }\n\n return polygons;\n}\n\nexport function parseCompositeSurface(\n xml: any,\n options: ParseGMLOptions,\n context: ParseGMLContext\n): Position[][][] {\n const childContext = createChildContext(xml, options, context);\n\n const polygons: Position[][][] = [];\n for (const [childName, childXML] of Object.entries(xml)) {\n switch (childName) {\n case 'gml:surfaceMember':\n case 'gml:surfaceMembers':\n const [c2Name, c2Xml] = getFirstKeyValue(childXML);\n switch (c2Name) {\n case 'gml:Surface':\n polygons.push(...parseSurface(c2Xml, options, childContext));\n break;\n case 'gml:Polygon':\n polygons.push(parsePolygonOrRectangle(c2Xml, options, childContext));\n break;\n }\n break;\n }\n }\n\n if (polygons.length === 0) {\n throw new Error(`${xml.name} must have > 0 polygons`);\n }\n return polygons;\n}\n\nexport function parseMultiSurface(\n xml: any,\n options: ParseGMLOptions,\n context: ParseGMLContext\n): Position[][][] {\n let el = xml;\n\n const surfaceMembers = findIn(xml, 'gml:LinearRing');\n if (surfaceMembers) {\n el = surfaceMembers;\n }\n\n const polygons: Position[][][] = [];\n for (const [childName, childXML] of Object.entries(el)) {\n switch (childName) {\n case 'gml:Surface':\n const polygons2 = parseSurface(childXML, options, context);\n polygons.push(...polygons2);\n break;\n case 'gml:surfaceMember':\n const polygons3 = parseSurfaceMember(childXML, options, context);\n polygons.push(...polygons3);\n break;\n\n case 'gml:surfaceMembers':\n const polygonXML = findIn(childXML, 'gml:Polygon');\n for (const surfaceMemberXML of polygonXML as []) {\n const polygons3 = parseSurfaceMember(surfaceMemberXML, options, context);\n polygons.push(...polygons3);\n }\n break;\n }\n }\n\n if (polygons.length === 0) {\n throw new Error(`${xml.name} must have > 0 polygons`);\n }\n\n return polygons;\n}\n\nfunction parseSurfaceMember(\n xml: any,\n options: ParseGMLOptions,\n context: ParseGMLContext\n): Position[][][] {\n const [childName, childXml] = getFirstKeyValue(xml);\n switch (childName) {\n case 'gml:CompositeSurface':\n return parseCompositeSurface(childXml, options, context);\n case 'gml:Surface':\n return parseSurface(childXml, options, context);\n case 'gml:Polygon':\n return [parsePolygonOrRectangle(childXml, options, context)];\n }\n throw new Error(`${childName} must have polygons`);\n}\n\n// Helpers\n\nfunction textOf(el: any): string {\n if (typeof el !== 'string') {\n throw new Error('expected string');\n }\n return el;\n}\n\nfunction findIn(root: any, ...tags: string[]): any {\n let el = root;\n for (const tag of tags) {\n const child = el[tag];\n if (!child) {\n return null;\n }\n el = child;\n }\n return el;\n}\n\n/** @returns the first [key, value] pair in an object, or ['', null] if empty object */\nfunction getFirstKeyValue(object: any): [string, any] {\n if (object && typeof object === 'object') {\n for (const [key, value] of Object.entries(object)) {\n return [key, value];\n }\n }\n return ['', null];\n}\n\n/** A bit heavyweight for just tracking dimension? */\nfunction createChildContext(xml, options, context): ParseGMLContext {\n const srsDimensionAttribute = xml.attributes && xml.attributes.srsDimension;\n\n if (srsDimensionAttribute) {\n const srsDimension = parseInt(srsDimensionAttribute);\n if (Number.isNaN(srsDimension) || srsDimension <= 0) {\n throw new Error(\n `invalid srsDimension attribute value \"${srsDimensionAttribute}\", expected a positive integer`\n );\n }\n\n const childContext = Object.create(context);\n childContext.srsDimension = srsDimension;\n return childContext;\n }\n\n return context;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"parse-gml.js","names":["_xml","require","_deepStrictEqual","_rewind","_interopRequireDefault","noTransform","_len","arguments","length","coords","Array","_key","parseGML","text","options","parsedXML","XMLLoader","parseTextSync","transformCoords","stride","context","createChildContext","parseGMLToGeometry","inputXML","childContext","geometry","name","xml","getFirstKeyValue","type","coordinates","parseLinearRingOrLineString","parsePolygonOrRectangle","parseSurface","parseMultiSurface","rewind","mutate","parseCoords","s","srsDimension","replace","trim","split","Error","concat","points","i","_options$transformCoo","point","slice","map","parseFloat","push","call","parsePosList","textOf","parsePos","parsePoint","pos","findIn","posList","childName","childXML","Object","entries","parseCurveSegments","points2","end","start","deepStrictEqual","shift","parseRing","lineString","segments","parseExteriorOrInterior","linearRing","ring","exterior","pointLists","patches","polygons","parseCompositeSurface","c2Name","c2Xml","el","surfaceMembers","polygons2","polygons3","parseSurfaceMember","polygonXML","surfaceMemberXML","childXml","root","_len2","tags","_key2","tag","child","object","key","value","srsDimensionAttribute","attributes","parseInt","Number","isNaN","create"],"sources":["../../../../../src/lib/parsers/gml/parse-gml.ts"],"sourcesContent":["// loaders.gl, MIT license\n\n// Forked from https://github.com/derhuerst/parse-gml-polygon/blob/master/index.js\n// under ISC license\n\n/* eslint-disable no-continue, default-case */\n\nimport type {\n // GeoJSON,\n // Feature,\n // FeatureCollection,\n Geometry,\n Position\n // GeoJsonProperties,\n // Point,\n // MultiPoint,\n // LineString,\n // MultiLineString,\n // Polygon,\n // MultiPolygon,\n // GeometryCollection\n} from '@loaders.gl/schema';\n\nimport {XMLLoader} from '@loaders.gl/xml';\nimport {deepStrictEqual} from './deep-strict-equal';\nimport rewind from '@turf/rewind';\n\nfunction noTransform(...coords) {\n return coords;\n}\n\nexport type ParseGMLOptions = {\n transformCoords?: Function;\n stride?: 2 | 3 | 4;\n};\n\nexport type ParseGMLContext = {\n srsDimension?: number;\n [key: string]: any;\n};\n\n/**\n * Parses a typed data structure from raw XML for GML features\n * @note Error handlings is fairly weak\n */\nexport function parseGML(text: string, options) {\n // GeoJSON | null {\n const parsedXML = XMLLoader.parseTextSync(text, options);\n\n options = {transformCoords: noTransform, stride: 2, ...options};\n const context = createChildContext(parsedXML, options, {});\n\n return parseGMLToGeometry(parsedXML, options, context);\n}\n\n/** Parse a GeoJSON geometry from GML XML */\nexport function parseGMLToGeometry(\n inputXML: any,\n options: ParseGMLOptions,\n context: ParseGMLContext\n): Geometry | null {\n const childContext = createChildContext(inputXML, options, context);\n\n let geometry: Geometry | null = null;\n\n const [name, xml] = getFirstKeyValue(inputXML);\n\n switch (name) {\n // case 'gml:MultiPoint':\n // geometry = {\n // type: 'MultiPoint',\n // coordinates: parseMultiPoint(xml, options, childContext)\n // };\n // break;\n\n case 'gml:LineString':\n geometry = {\n type: 'LineString',\n coordinates: parseLinearRingOrLineString(xml, options, childContext)\n };\n break;\n\n // case 'gml:MultiLineString':\n // geometry = {\n // type: 'MultiLineString',\n // coordinates: parseMultiLineString(xml, options, childContext)\n // };\n // break;\n\n case 'gml:Polygon':\n case 'gml:Rectangle':\n geometry = {\n type: 'Polygon',\n coordinates: parsePolygonOrRectangle(xml, options, childContext)\n };\n break;\n case 'gml:Surface':\n geometry = {\n type: 'MultiPolygon',\n coordinates: parseSurface(xml, options, childContext)\n };\n break;\n case 'gml:MultiSurface':\n geometry = {\n type: 'MultiPolygon',\n coordinates: parseMultiSurface(xml, options, childContext)\n };\n break;\n\n default:\n return null;\n }\n\n // todo\n return rewind(geometry, {mutate: true});\n}\n\n/** Parse a list of coordinates from a string */\nfunction parseCoords(s: string, options: ParseGMLOptions, context: ParseGMLContext): Position[] {\n const stride = context.srsDimension || options.stride || 2;\n\n // Handle white space\n const coords = s.replace(/\\s+/g, ' ').trim().split(' ');\n\n if (coords.length === 0 || coords.length % stride !== 0) {\n throw new Error(`invalid coordinates list (stride ${stride})`);\n }\n\n const points: Position[] = [];\n for (let i = 0; i < coords.length - 1; i += stride) {\n const point = coords.slice(i, i + stride).map(parseFloat);\n points.push(options.transformCoords?.(...point) || point);\n }\n\n return points;\n}\n\nexport function parsePosList(xml: any, options: ParseGMLOptions, context: ParseGMLContext) {\n const childContext = createChildContext(xml, options, context);\n\n const coords = textOf(xml);\n if (!coords) {\n throw new Error('invalid gml:posList element');\n }\n\n return parseCoords(coords, options, childContext);\n}\n\nexport function parsePos(xml: any, options: ParseGMLOptions, context: ParseGMLContext): Position {\n const childContext = createChildContext(xml, options, context);\n\n const coords = textOf(xml);\n if (!coords) {\n throw new Error('invalid gml:pos element');\n }\n\n const points = parseCoords(coords, options, childContext);\n if (points.length !== 1) {\n throw new Error('gml:pos must have 1 point');\n }\n return points[0];\n}\n\nexport function parsePoint(xml: any, options: ParseGMLOptions, context: ParseGMLContext): number[] {\n const childContext = createChildContext(xml, options, context);\n\n // TODO AV: Parse other gml:Point options\n const pos = findIn(xml, 'gml:pos');\n if (!pos) {\n throw new Error('invalid gml:Point element, expected a gml:pos subelement');\n }\n return parsePos(pos, options, childContext);\n}\n\nexport function parseLinearRingOrLineString(\n xml: any,\n options: ParseGMLOptions,\n context: ParseGMLContext\n): Position[] {\n // or a LineStringSegment\n const childContext = createChildContext(xml, options, context);\n\n let points: Position[] = [];\n\n const posList = findIn(xml, 'gml:posList');\n if (posList) {\n points = parsePosList(posList, options, childContext);\n } else {\n for (const [childName, childXML] of Object.entries(xml)) {\n switch (childName) {\n case 'gml:Point':\n points.push(parsePoint(childXML, options, childContext));\n break;\n case 'gml:pos':\n points.push(parsePos(childXML, options, childContext));\n break;\n default:\n continue;\n }\n }\n }\n\n if (points.length === 0) {\n throw new Error(`${xml.name} must have > 0 points`);\n }\n return points;\n}\n\nexport function parseCurveSegments(\n xml: any,\n options: ParseGMLOptions,\n context: ParseGMLContext\n): Position[] {\n const points: Position[] = [];\n\n for (const [childName, childXML] of Object.entries(xml)) {\n switch (childName) {\n case 'gml:LineStringSegment':\n const points2 = parseLinearRingOrLineString(childXML, options, context);\n\n // remove overlapping\n const end = points[points.length - 1];\n const start = points2[0];\n if (end && start && deepStrictEqual(end, start)) {\n points2.shift();\n }\n\n points.push(...points2);\n break;\n default:\n continue;\n }\n }\n\n if (points.length === 0) {\n throw new Error('gml:Curve > gml:segments must have > 0 points');\n }\n return points;\n}\n\nexport function parseRing(\n xml: any,\n options: ParseGMLOptions,\n context: ParseGMLContext\n): Position[] {\n const childContext = createChildContext(xml, options, context);\n\n const points: Position[] = [];\n\n for (const [childName, childXML] of Object.entries(xml)) {\n switch (childName) {\n case 'gml:curveMember':\n let points2;\n\n const lineString = findIn(childXML, 'gml:LineString');\n if (lineString) {\n points2 = parseLinearRingOrLineString(lineString, options, childContext);\n } else {\n const segments = findIn(childXML, 'gml:Curve', 'gml:segments');\n if (!segments) {\n throw new Error(`invalid ${childName} element`);\n }\n\n points2 = parseCurveSegments(segments, options, childContext);\n }\n\n // remove overlapping\n const end = points[points.length - 1];\n const start = points2[0];\n if (end && start && deepStrictEqual(end, start)) {\n points2.shift();\n }\n\n points.push(...points2);\n\n break;\n }\n }\n\n if (points.length < 4) {\n throw new Error(`${xml.name} must have >= 4 points`);\n }\n return points;\n}\n\nexport function parseExteriorOrInterior(\n xml: any,\n options: ParseGMLOptions,\n context: ParseGMLContext\n): Position[] {\n const linearRing = findIn(xml, 'gml:LinearRing');\n if (linearRing) {\n return parseLinearRingOrLineString(linearRing, options, context);\n }\n\n const ring = findIn(xml, 'gml:Ring');\n if (!ring) {\n throw new Error(`invalid ${xml.name} element`);\n }\n\n return parseRing(ring, options, context);\n}\n\nexport function parsePolygonOrRectangle(\n xml: any,\n options: ParseGMLOptions,\n context: ParseGMLContext\n): Position[][] {\n // or PolygonPatch\n const childContext = createChildContext(xml, options, context);\n\n const exterior = findIn(xml, 'gml:exterior');\n if (!exterior) {\n throw new Error(`invalid ${xml.name} element`);\n }\n\n const pointLists: Position[][] = [parseExteriorOrInterior(exterior, options, childContext)];\n\n for (const [childName, childXML] of Object.entries(xml)) {\n switch (childName) {\n case 'gml:interior':\n pointLists.push(parseExteriorOrInterior(childXML, options, childContext));\n break;\n }\n }\n\n return pointLists;\n}\n\nexport function parseSurface(\n xml: any,\n options: ParseGMLOptions,\n context: ParseGMLContext\n): Position[][][] {\n const childContext = createChildContext(xml, options, context);\n\n const patches = findIn(xml, 'gml:patches');\n if (!patches) {\n throw new Error(`invalid ${xml.name} element`);\n }\n\n const polygons: Position[][][] = [];\n for (const [childName, childXML] of Object.entries(xml)) {\n switch (childName) {\n case 'gml:PolygonPatch':\n case 'gml:Rectangle':\n polygons.push(parsePolygonOrRectangle(childXML, options, childContext));\n break;\n\n default:\n continue;\n }\n }\n\n if (polygons.length === 0) {\n throw new Error(`${xml.name} must have > 0 polygons`);\n }\n\n return polygons;\n}\n\nexport function parseCompositeSurface(\n xml: any,\n options: ParseGMLOptions,\n context: ParseGMLContext\n): Position[][][] {\n const childContext = createChildContext(xml, options, context);\n\n const polygons: Position[][][] = [];\n for (const [childName, childXML] of Object.entries(xml)) {\n switch (childName) {\n case 'gml:surfaceMember':\n case 'gml:surfaceMembers':\n const [c2Name, c2Xml] = getFirstKeyValue(childXML);\n switch (c2Name) {\n case 'gml:Surface':\n polygons.push(...parseSurface(c2Xml, options, childContext));\n break;\n case 'gml:Polygon':\n polygons.push(parsePolygonOrRectangle(c2Xml, options, childContext));\n break;\n }\n break;\n }\n }\n\n if (polygons.length === 0) {\n throw new Error(`${xml.name} must have > 0 polygons`);\n }\n return polygons;\n}\n\nexport function parseMultiSurface(\n xml: any,\n options: ParseGMLOptions,\n context: ParseGMLContext\n): Position[][][] {\n let el = xml;\n\n const surfaceMembers = findIn(xml, 'gml:LinearRing');\n if (surfaceMembers) {\n el = surfaceMembers;\n }\n\n const polygons: Position[][][] = [];\n for (const [childName, childXML] of Object.entries(el)) {\n switch (childName) {\n case 'gml:Surface':\n const polygons2 = parseSurface(childXML, options, context);\n polygons.push(...polygons2);\n break;\n case 'gml:surfaceMember':\n const polygons3 = parseSurfaceMember(childXML, options, context);\n polygons.push(...polygons3);\n break;\n\n case 'gml:surfaceMembers':\n const polygonXML = findIn(childXML, 'gml:Polygon');\n for (const surfaceMemberXML of polygonXML as []) {\n const polygons3 = parseSurfaceMember(surfaceMemberXML, options, context);\n polygons.push(...polygons3);\n }\n break;\n }\n }\n\n if (polygons.length === 0) {\n throw new Error(`${xml.name} must have > 0 polygons`);\n }\n\n return polygons;\n}\n\nfunction parseSurfaceMember(\n xml: any,\n options: ParseGMLOptions,\n context: ParseGMLContext\n): Position[][][] {\n const [childName, childXml] = getFirstKeyValue(xml);\n switch (childName) {\n case 'gml:CompositeSurface':\n return parseCompositeSurface(childXml, options, context);\n case 'gml:Surface':\n return parseSurface(childXml, options, context);\n case 'gml:Polygon':\n return [parsePolygonOrRectangle(childXml, options, context)];\n }\n throw new Error(`${childName} must have polygons`);\n}\n\n// Helpers\n\nfunction textOf(el: any): string {\n if (typeof el !== 'string') {\n throw new Error('expected string');\n }\n return el;\n}\n\nfunction findIn(root: any, ...tags: string[]): any {\n let el = root;\n for (const tag of tags) {\n const child = el[tag];\n if (!child) {\n return null;\n }\n el = child;\n }\n return el;\n}\n\n/** @returns the first [key, value] pair in an object, or ['', null] if empty object */\nfunction getFirstKeyValue(object: any): [string, any] {\n if (object && typeof object === 'object') {\n for (const [key, value] of Object.entries(object)) {\n return [key, value];\n }\n }\n return ['', null];\n}\n\n/** A bit heavyweight for just tracking dimension? */\nfunction createChildContext(xml, options, context): ParseGMLContext {\n const srsDimensionAttribute = xml.attributes && xml.attributes.srsDimension;\n\n if (srsDimensionAttribute) {\n const srsDimension = parseInt(srsDimensionAttribute);\n if (Number.isNaN(srsDimension) || srsDimension <= 0) {\n throw new Error(\n `invalid srsDimension attribute value \"${srsDimensionAttribute}\", expected a positive integer`\n );\n }\n\n const childContext = Object.create(context);\n childContext.srsDimension = srsDimension;\n return childContext;\n }\n\n return context;\n}\n"],"mappings":"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"}
|