@loaders.gl/wkt 3.1.0-alpha.4 → 3.1.0-beta.3
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/bundle.d.ts +2 -0
- package/dist/bundle.d.ts.map +1 -0
- package/dist/bundle.js +596 -0
- package/dist/es5/bundle.js +1 -1
- package/dist/es5/bundle.js.map +1 -1
- package/dist/es5/index.js +5 -5
- package/dist/es5/lib/encode-wkt.js +2 -2
- package/dist/es5/lib/encode-wkt.js.map +1 -1
- package/dist/es5/lib/parse-wkb.js +78 -113
- package/dist/es5/lib/parse-wkb.js.map +1 -1
- package/dist/es5/lib/parse-wkt.js +24 -24
- package/dist/es5/lib/parse-wkt.js.map +1 -1
- package/dist/es5/lib/utils/version.js +1 -1
- package/dist/es5/lib/utils/version.js.map +1 -1
- package/dist/es5/wkb-loader.js +6 -39
- package/dist/es5/wkb-loader.js.map +1 -1
- package/dist/es5/wkt-loader.js +4 -37
- package/dist/es5/wkt-loader.js.map +1 -1
- package/dist/es5/wkt-writer.js +1 -1
- package/dist/es5/wkt-writer.js.map +1 -1
- package/dist/esm/lib/encode-wkt.js +8 -8
- package/dist/esm/lib/encode-wkt.js.map +1 -1
- package/dist/esm/lib/parse-wkb.js +5 -4
- package/dist/esm/lib/parse-wkb.js.map +1 -1
- package/dist/esm/lib/utils/version.js +1 -1
- package/dist/esm/lib/utils/version.js.map +1 -1
- package/dist/esm/wkb-loader.js.map +1 -1
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +11 -0
- package/dist/lib/encode-wkt.d.ts +8 -0
- package/dist/lib/encode-wkt.d.ts.map +1 -0
- package/dist/lib/encode-wkt.js +48 -0
- package/dist/lib/parse-wkb.d.ts +3 -0
- package/dist/lib/parse-wkb.d.ts.map +1 -0
- package/dist/lib/parse-wkb.js +236 -0
- package/dist/lib/parse-wkt.d.ts +8 -0
- package/dist/lib/parse-wkt.d.ts.map +1 -0
- package/dist/lib/parse-wkt.js +227 -0
- package/dist/lib/utils/version.d.ts +2 -0
- package/dist/lib/utils/version.d.ts.map +1 -0
- package/dist/lib/utils/version.js +7 -0
- package/dist/wkb-loader.d.ts +39 -0
- package/dist/wkb-loader.d.ts.map +1 -0
- package/dist/wkb-loader.js +34 -0
- package/dist/wkt-loader.d.ts +10 -0
- package/dist/wkt-loader.d.ts.map +1 -0
- package/dist/wkt-loader.js +33 -0
- package/dist/wkt-worker.js +380 -2
- package/dist/wkt-writer.d.ts +6 -0
- package/dist/wkt-writer.d.ts.map +1 -0
- package/dist/wkt-writer.js +23 -0
- package/dist/workers/wkb-worker.d.ts +2 -0
- package/dist/workers/wkb-worker.d.ts.map +1 -0
- package/dist/workers/wkb-worker.js +5 -0
- package/dist/workers/wkt-worker.d.ts +2 -0
- package/dist/workers/wkt-worker.d.ts.map +1 -0
- package/dist/workers/wkt-worker.js +5 -0
- package/package.json +7 -7
- package/src/lib/parse-wkb.ts +35 -19
- package/src/wkb-loader.ts +1 -1
- package/dist/dist.min.js +0 -2
- package/dist/dist.min.js.map +0 -1
- package/dist/wkt-worker.js.map +0 -1
|
@@ -1,62 +1,52 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
|
|
5
3
|
Object.defineProperty(exports, "__esModule", {
|
|
6
4
|
value: true
|
|
7
5
|
});
|
|
8
6
|
exports.default = parseWKB;
|
|
9
|
-
|
|
10
|
-
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
11
|
-
|
|
12
|
-
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; } } }; }
|
|
13
|
-
|
|
14
|
-
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); }
|
|
15
|
-
|
|
16
|
-
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; }
|
|
17
|
-
|
|
18
|
-
var NUM_DIMENSIONS = {
|
|
7
|
+
const NUM_DIMENSIONS = {
|
|
19
8
|
0: 2,
|
|
20
9
|
1: 3,
|
|
21
10
|
2: 3,
|
|
22
11
|
3: 4
|
|
23
12
|
};
|
|
24
13
|
|
|
25
|
-
function parseWKB(
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
14
|
+
function parseWKB(arrayBuffer) {
|
|
15
|
+
const view = new DataView(arrayBuffer);
|
|
16
|
+
let offset = 0;
|
|
17
|
+
const littleEndian = view.getUint8(offset) === 1;
|
|
29
18
|
offset++;
|
|
30
|
-
|
|
19
|
+
const geometryCode = view.getUint32(offset, littleEndian);
|
|
31
20
|
offset += 4;
|
|
32
|
-
|
|
33
|
-
|
|
21
|
+
const geometryType = geometryCode % 1000;
|
|
22
|
+
const type = (geometryCode - geometryType) / 1000;
|
|
23
|
+
const dimension = NUM_DIMENSIONS[type];
|
|
34
24
|
|
|
35
25
|
switch (geometryType) {
|
|
36
26
|
case 1:
|
|
37
|
-
|
|
27
|
+
const point = parsePoint(view, offset, dimension, littleEndian);
|
|
38
28
|
return point.geometry;
|
|
39
29
|
|
|
40
30
|
case 2:
|
|
41
|
-
|
|
31
|
+
const line = parseLineString(view, offset, dimension, littleEndian);
|
|
42
32
|
return line.geometry;
|
|
43
33
|
|
|
44
34
|
case 3:
|
|
45
|
-
|
|
35
|
+
const polygon = parsePolygon(view, offset, dimension, littleEndian);
|
|
46
36
|
return polygon.geometry;
|
|
47
37
|
|
|
48
38
|
case 4:
|
|
49
|
-
|
|
39
|
+
const multiPoint = parseMultiPoint(view, offset, dimension, littleEndian);
|
|
50
40
|
multiPoint.type = 'Point';
|
|
51
41
|
return multiPoint;
|
|
52
42
|
|
|
53
43
|
case 5:
|
|
54
|
-
|
|
44
|
+
const multiLine = parseMultiLineString(view, offset, dimension, littleEndian);
|
|
55
45
|
multiLine.type = 'LineString';
|
|
56
46
|
return multiLine;
|
|
57
47
|
|
|
58
48
|
case 6:
|
|
59
|
-
|
|
49
|
+
const multiPolygon = parseMultiPolygon(view, offset, dimension, littleEndian);
|
|
60
50
|
multiPolygon.type = 'Polygon';
|
|
61
51
|
return multiPolygon;
|
|
62
52
|
|
|
@@ -66,9 +56,9 @@ function parseWKB(buffer) {
|
|
|
66
56
|
}
|
|
67
57
|
|
|
68
58
|
function parsePoint(view, offset, dimension, littleEndian) {
|
|
69
|
-
|
|
59
|
+
const positions = new Float64Array(dimension);
|
|
70
60
|
|
|
71
|
-
for (
|
|
61
|
+
for (let i = 0; i < dimension; i++) {
|
|
72
62
|
positions[i] = view.getFloat64(offset, littleEndian);
|
|
73
63
|
offset += 8;
|
|
74
64
|
}
|
|
@@ -81,21 +71,21 @@ function parsePoint(view, offset, dimension, littleEndian) {
|
|
|
81
71
|
size: dimension
|
|
82
72
|
}
|
|
83
73
|
},
|
|
84
|
-
offset
|
|
74
|
+
offset
|
|
85
75
|
};
|
|
86
76
|
}
|
|
87
77
|
|
|
88
78
|
function parseLineString(view, offset, dimension, littleEndian) {
|
|
89
|
-
|
|
79
|
+
const nPoints = view.getUint32(offset, littleEndian);
|
|
90
80
|
offset += 4;
|
|
91
|
-
|
|
81
|
+
const positions = new Float64Array(nPoints * dimension);
|
|
92
82
|
|
|
93
|
-
for (
|
|
83
|
+
for (let i = 0; i < nPoints * dimension; i++) {
|
|
94
84
|
positions[i] = view.getFloat64(offset, littleEndian);
|
|
95
85
|
offset += 8;
|
|
96
86
|
}
|
|
97
87
|
|
|
98
|
-
|
|
88
|
+
const pathIndices = [0];
|
|
99
89
|
|
|
100
90
|
if (nPoints > 0) {
|
|
101
91
|
pathIndices.push(nPoints);
|
|
@@ -113,38 +103,34 @@ function parseLineString(view, offset, dimension, littleEndian) {
|
|
|
113
103
|
size: 1
|
|
114
104
|
}
|
|
115
105
|
},
|
|
116
|
-
offset
|
|
106
|
+
offset
|
|
117
107
|
};
|
|
118
108
|
}
|
|
119
109
|
|
|
120
|
-
|
|
121
|
-
return function (value) {
|
|
122
|
-
return sum += value;
|
|
123
|
-
};
|
|
124
|
-
};
|
|
110
|
+
const cumulativeSum = sum => value => sum += value;
|
|
125
111
|
|
|
126
112
|
function parsePolygon(view, offset, dimension, littleEndian) {
|
|
127
|
-
|
|
113
|
+
const nRings = view.getUint32(offset, littleEndian);
|
|
128
114
|
offset += 4;
|
|
129
|
-
|
|
115
|
+
const rings = [];
|
|
130
116
|
|
|
131
|
-
for (
|
|
132
|
-
|
|
133
|
-
|
|
117
|
+
for (let i = 0; i < nRings; i++) {
|
|
118
|
+
const parsed = parseLineString(view, offset, dimension, littleEndian);
|
|
119
|
+
const {
|
|
120
|
+
positions
|
|
121
|
+
} = parsed.geometry;
|
|
134
122
|
offset = parsed.offset;
|
|
135
123
|
rings.push(positions.value);
|
|
136
124
|
}
|
|
137
125
|
|
|
138
|
-
|
|
139
|
-
|
|
126
|
+
const concatenatedPositions = new Float64Array(concatTypedArrays(rings).buffer);
|
|
127
|
+
const polygonIndices = [0];
|
|
140
128
|
|
|
141
129
|
if (concatenatedPositions.length > 0) {
|
|
142
130
|
polygonIndices.push(concatenatedPositions.length / dimension);
|
|
143
131
|
}
|
|
144
132
|
|
|
145
|
-
|
|
146
|
-
return l.length / dimension;
|
|
147
|
-
}).map(cumulativeSum(0));
|
|
133
|
+
const primitivePolygonIndices = rings.map(l => l.length / dimension).map(cumulativeSum(0));
|
|
148
134
|
primitivePolygonIndices.unshift(0);
|
|
149
135
|
return {
|
|
150
136
|
geometry: {
|
|
@@ -162,17 +148,17 @@ function parsePolygon(view, offset, dimension, littleEndian) {
|
|
|
162
148
|
size: 1
|
|
163
149
|
}
|
|
164
150
|
},
|
|
165
|
-
offset
|
|
151
|
+
offset
|
|
166
152
|
};
|
|
167
153
|
}
|
|
168
154
|
|
|
169
155
|
function parseMultiPoint(view, offset, dimension, littleEndian) {
|
|
170
|
-
|
|
156
|
+
const nPoints = view.getUint32(offset, littleEndian);
|
|
171
157
|
offset += 4;
|
|
172
|
-
|
|
158
|
+
const binaryPointGeometries = [];
|
|
173
159
|
|
|
174
|
-
for (
|
|
175
|
-
|
|
160
|
+
for (let i = 0; i < nPoints; i++) {
|
|
161
|
+
const littleEndianPoint = view.getUint8(offset) === 1;
|
|
176
162
|
offset++;
|
|
177
163
|
|
|
178
164
|
if (view.getUint32(offset, littleEndianPoint) % 1000 !== 1) {
|
|
@@ -180,7 +166,7 @@ function parseMultiPoint(view, offset, dimension, littleEndian) {
|
|
|
180
166
|
}
|
|
181
167
|
|
|
182
168
|
offset += 4;
|
|
183
|
-
|
|
169
|
+
const parsed = parsePoint(view, offset, dimension, littleEndianPoint);
|
|
184
170
|
offset = parsed.offset;
|
|
185
171
|
binaryPointGeometries.push(parsed.geometry);
|
|
186
172
|
}
|
|
@@ -189,12 +175,12 @@ function parseMultiPoint(view, offset, dimension, littleEndian) {
|
|
|
189
175
|
}
|
|
190
176
|
|
|
191
177
|
function parseMultiLineString(view, offset, dimension, littleEndian) {
|
|
192
|
-
|
|
178
|
+
const nLines = view.getUint32(offset, littleEndian);
|
|
193
179
|
offset += 4;
|
|
194
|
-
|
|
180
|
+
const binaryLineGeometries = [];
|
|
195
181
|
|
|
196
|
-
for (
|
|
197
|
-
|
|
182
|
+
for (let i = 0; i < nLines; i++) {
|
|
183
|
+
const littleEndianLine = view.getUint8(offset) === 1;
|
|
198
184
|
offset++;
|
|
199
185
|
|
|
200
186
|
if (view.getUint32(offset, littleEndianLine) % 1000 !== 2) {
|
|
@@ -202,7 +188,7 @@ function parseMultiLineString(view, offset, dimension, littleEndian) {
|
|
|
202
188
|
}
|
|
203
189
|
|
|
204
190
|
offset += 4;
|
|
205
|
-
|
|
191
|
+
const parsed = parseLineString(view, offset, dimension, littleEndianLine);
|
|
206
192
|
offset = parsed.offset;
|
|
207
193
|
binaryLineGeometries.push(parsed.geometry);
|
|
208
194
|
}
|
|
@@ -211,12 +197,12 @@ function parseMultiLineString(view, offset, dimension, littleEndian) {
|
|
|
211
197
|
}
|
|
212
198
|
|
|
213
199
|
function parseMultiPolygon(view, offset, dimension, littleEndian) {
|
|
214
|
-
|
|
200
|
+
const nPolygons = view.getUint32(offset, littleEndian);
|
|
215
201
|
offset += 4;
|
|
216
|
-
|
|
202
|
+
const binaryPolygonGeometries = [];
|
|
217
203
|
|
|
218
|
-
for (
|
|
219
|
-
|
|
204
|
+
for (let i = 0; i < nPolygons; i++) {
|
|
205
|
+
const littleEndianPolygon = view.getUint8(offset) === 1;
|
|
220
206
|
offset++;
|
|
221
207
|
|
|
222
208
|
if (view.getUint32(offset, littleEndianPolygon) % 1000 !== 3) {
|
|
@@ -224,7 +210,7 @@ function parseMultiPolygon(view, offset, dimension, littleEndian) {
|
|
|
224
210
|
}
|
|
225
211
|
|
|
226
212
|
offset += 4;
|
|
227
|
-
|
|
213
|
+
const parsed = parsePolygon(view, offset, dimension, littleEndianPolygon);
|
|
228
214
|
offset = parsed.offset;
|
|
229
215
|
binaryPolygonGeometries.push(parsed.geometry);
|
|
230
216
|
}
|
|
@@ -233,10 +219,8 @@ function parseMultiPolygon(view, offset, dimension, littleEndian) {
|
|
|
233
219
|
}
|
|
234
220
|
|
|
235
221
|
function concatenateBinaryPointGeometries(binaryPointGeometries, dimension) {
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
});
|
|
239
|
-
var concatenatedPositions = new Float64Array(concatTypedArrays(positions).buffer);
|
|
222
|
+
const positions = binaryPointGeometries.map(geometry => geometry.positions.value);
|
|
223
|
+
const concatenatedPositions = new Float64Array(concatTypedArrays(positions).buffer);
|
|
240
224
|
return {
|
|
241
225
|
type: 'Point',
|
|
242
226
|
positions: {
|
|
@@ -247,13 +231,9 @@ function concatenateBinaryPointGeometries(binaryPointGeometries, dimension) {
|
|
|
247
231
|
}
|
|
248
232
|
|
|
249
233
|
function concatenateBinaryLineGeometries(binaryLineGeometries, dimension) {
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
var concatenatedPositions = new Float64Array(concatTypedArrays(lines).buffer);
|
|
254
|
-
var pathIndices = lines.map(function (line) {
|
|
255
|
-
return line.length / dimension;
|
|
256
|
-
}).map(cumulativeSum(0));
|
|
234
|
+
const lines = binaryLineGeometries.map(geometry => geometry.positions.value);
|
|
235
|
+
const concatenatedPositions = new Float64Array(concatTypedArrays(lines).buffer);
|
|
236
|
+
const pathIndices = lines.map(line => line.length / dimension).map(cumulativeSum(0));
|
|
257
237
|
pathIndices.unshift(0);
|
|
258
238
|
return {
|
|
259
239
|
type: 'LineString',
|
|
@@ -269,40 +249,25 @@ function concatenateBinaryLineGeometries(binaryLineGeometries, dimension) {
|
|
|
269
249
|
}
|
|
270
250
|
|
|
271
251
|
function concatenateBinaryPolygonGeometries(binaryPolygonGeometries, dimension) {
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
_primitivePolygonIndices = binaryPolygon.primitivePolygonIndices;
|
|
283
|
-
polygons.push(positions.value);
|
|
284
|
-
primitivePolygons.push(_primitivePolygonIndices.value);
|
|
285
|
-
}
|
|
286
|
-
} catch (err) {
|
|
287
|
-
_iterator.e(err);
|
|
288
|
-
} finally {
|
|
289
|
-
_iterator.f();
|
|
252
|
+
const polygons = [];
|
|
253
|
+
const primitivePolygons = [];
|
|
254
|
+
|
|
255
|
+
for (const binaryPolygon of binaryPolygonGeometries) {
|
|
256
|
+
const {
|
|
257
|
+
positions,
|
|
258
|
+
primitivePolygonIndices
|
|
259
|
+
} = binaryPolygon;
|
|
260
|
+
polygons.push(positions.value);
|
|
261
|
+
primitivePolygons.push(primitivePolygonIndices.value);
|
|
290
262
|
}
|
|
291
263
|
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
return p.length / dimension;
|
|
295
|
-
}).map(cumulativeSum(0));
|
|
264
|
+
const concatenatedPositions = new Float64Array(concatTypedArrays(polygons).buffer);
|
|
265
|
+
const polygonIndices = polygons.map(p => p.length / dimension).map(cumulativeSum(0));
|
|
296
266
|
polygonIndices.unshift(0);
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
for (
|
|
300
|
-
|
|
301
|
-
primitivePolygonIndices.push.apply(primitivePolygonIndices, (0, _toConsumableArray2.default)(primitivePolygon.filter(function (x) {
|
|
302
|
-
return x > 0;
|
|
303
|
-
}).map(function (x) {
|
|
304
|
-
return x + primitivePolygonIndices[primitivePolygonIndices.length - 1];
|
|
305
|
-
})));
|
|
267
|
+
const primitivePolygonIndices = [0];
|
|
268
|
+
|
|
269
|
+
for (const primitivePolygon of primitivePolygons) {
|
|
270
|
+
primitivePolygonIndices.push(...primitivePolygon.filter(x => x > 0).map(x => x + primitivePolygonIndices[primitivePolygonIndices.length - 1]));
|
|
306
271
|
}
|
|
307
272
|
|
|
308
273
|
return {
|
|
@@ -323,20 +288,20 @@ function concatenateBinaryPolygonGeometries(binaryPolygonGeometries, dimension)
|
|
|
323
288
|
}
|
|
324
289
|
|
|
325
290
|
function concatTypedArrays(arrays) {
|
|
326
|
-
|
|
291
|
+
let byteLength = 0;
|
|
327
292
|
|
|
328
|
-
for (
|
|
293
|
+
for (let i = 0; i < arrays.length; ++i) {
|
|
329
294
|
byteLength += arrays[i].byteLength;
|
|
330
295
|
}
|
|
331
296
|
|
|
332
|
-
|
|
333
|
-
|
|
297
|
+
const buffer = new Uint8Array(byteLength);
|
|
298
|
+
let byteOffset = 0;
|
|
334
299
|
|
|
335
|
-
for (
|
|
336
|
-
|
|
300
|
+
for (let i = 0; i < arrays.length; ++i) {
|
|
301
|
+
const data = new Uint8Array(arrays[i].buffer);
|
|
337
302
|
byteLength = data.length;
|
|
338
303
|
|
|
339
|
-
for (
|
|
304
|
+
for (let j = 0; j < byteLength; ++j) {
|
|
340
305
|
buffer[byteOffset++] = data[j];
|
|
341
306
|
}
|
|
342
307
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/lib/parse-wkb.ts"],"names":["NUM_DIMENSIONS","parseWKB","buffer","view","DataView","offset","littleEndian","getUint8","geometryCode","getUint32","geometryType","dimension","point","parsePoint","geometry","line","parseLineString","polygon","parsePolygon","multiPoint","parseMultiPoint","type","multiLine","parseMultiLineString","multiPolygon","parseMultiPolygon","Error","positions","Float64Array","i","getFloat64","value","size","nPoints","pathIndices","push","Uint16Array","cumulativeSum","sum","nRings","rings","parsed","concatenatedPositions","concatTypedArrays","polygonIndices","length","primitivePolygonIndices","map","l","unshift","binaryPointGeometries","littleEndianPoint","concatenateBinaryPointGeometries","nLines","binaryLineGeometries","littleEndianLine","concatenateBinaryLineGeometries","nPolygons","binaryPolygonGeometries","littleEndianPolygon","concatenateBinaryPolygonGeometries","lines","polygons","primitivePolygons","binaryPolygon","p","primitivePolygon","filter","x","arrays","byteLength","Uint8Array","byteOffset","data","j"],"mappings":"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","sourcesContent":["import type {\n TypedArray,\n BinaryGeometry,\n BinaryPointGeometry,\n BinaryLineGeometry,\n BinaryPolygonGeometry\n} from '@loaders.gl/schema';\n\nconst NUM_DIMENSIONS = {\n 0: 2, // 2D\n 1: 3, // 3D (Z)\n 2: 3, // 3D (M)\n 3: 4 // 4D (ZM)\n};\n\nexport default function parseWKB(buffer): BinaryGeometry {\n const view = new DataView(buffer);\n let offset = 0;\n\n // Check endianness of data\n const littleEndian = view.getUint8(offset) === 1;\n offset++;\n\n // 4-digit code representing dimension and type of geometry\n const geometryCode = view.getUint32(offset, littleEndian);\n offset += 4;\n\n const geometryType = geometryCode % 1000;\n const dimension = NUM_DIMENSIONS[(geometryCode - geometryType) / 1000];\n\n switch (geometryType) {\n case 1:\n const point = parsePoint(view, offset, dimension, littleEndian);\n return point.geometry;\n case 2:\n const line = parseLineString(view, offset, dimension, littleEndian);\n return line.geometry;\n case 3:\n const polygon = parsePolygon(view, offset, dimension, littleEndian);\n return polygon.geometry;\n case 4:\n const multiPoint = parseMultiPoint(view, offset, dimension, littleEndian);\n multiPoint.type = 'Point';\n return multiPoint;\n case 5:\n const multiLine = parseMultiLineString(view, offset, dimension, littleEndian);\n multiLine.type = 'LineString';\n return multiLine;\n case 6:\n const multiPolygon = parseMultiPolygon(view, offset, dimension, littleEndian);\n multiPolygon.type = 'Polygon';\n return multiPolygon;\n // case 7:\n // TODO: handle GeometryCollections\n // return parseGeometryCollection(view, offset, dimension, littleEndian);\n default:\n throw new Error(`WKB: Unsupported geometry type: ${geometryType}`);\n }\n}\n\n// Primitives; parse point and linear ring\nfunction parsePoint(\n view,\n offset,\n dimension,\n littleEndian\n): {geometry: BinaryPointGeometry; offset: number} {\n const positions = new Float64Array(dimension);\n for (let i = 0; i < dimension; i++) {\n positions[i] = view.getFloat64(offset, littleEndian);\n offset += 8;\n }\n\n return {\n geometry: {type: 'Point', positions: {value: positions, size: dimension}},\n offset\n };\n}\n\nfunction parseLineString(\n view,\n offset,\n dimension,\n littleEndian\n): {geometry: BinaryLineGeometry; offset: number} {\n const nPoints = view.getUint32(offset, littleEndian);\n offset += 4;\n\n // Instantiate array\n const positions = new Float64Array(nPoints * dimension);\n for (let i = 0; i < nPoints * dimension; i++) {\n positions[i] = view.getFloat64(offset, littleEndian);\n offset += 8;\n }\n\n const pathIndices = [0];\n if (nPoints > 0) {\n pathIndices.push(nPoints);\n }\n\n return {\n geometry: {\n type: 'LineString',\n positions: {value: positions, size: dimension},\n pathIndices: {value: new Uint16Array(pathIndices), size: 1}\n },\n offset\n };\n}\n\n// https://stackoverflow.com/a/55261098\nconst cumulativeSum = (sum) => (value) => (sum += value);\n\nfunction parsePolygon(\n view,\n offset,\n dimension,\n littleEndian\n): {geometry: BinaryPolygonGeometry; offset: number} {\n const nRings = view.getUint32(offset, littleEndian);\n offset += 4;\n\n const rings: TypedArray[] = [];\n for (let i = 0; i < nRings; i++) {\n const parsed = parseLineString(view, offset, dimension, littleEndian);\n const {positions} = parsed.geometry;\n offset = parsed.offset;\n rings.push(positions.value);\n }\n\n const concatenatedPositions = new Float64Array(concatTypedArrays(rings).buffer);\n const polygonIndices = [0];\n if (concatenatedPositions.length > 0) {\n polygonIndices.push(concatenatedPositions.length / dimension);\n }\n const primitivePolygonIndices = rings.map((l) => l.length / dimension).map(cumulativeSum(0));\n primitivePolygonIndices.unshift(0);\n\n return {\n geometry: {\n type: 'Polygon',\n positions: {value: concatenatedPositions, size: dimension},\n polygonIndices: {\n value: new Uint16Array(polygonIndices),\n size: 1\n },\n primitivePolygonIndices: {value: new Uint16Array(primitivePolygonIndices), size: 1}\n },\n offset\n };\n}\n\nfunction parseMultiPoint(view, offset, dimension, littleEndian): BinaryPointGeometry {\n const nPoints = view.getUint32(offset, littleEndian);\n offset += 4;\n\n const binaryPointGeometries: BinaryPointGeometry[] = [];\n for (let i = 0; i < nPoints; i++) {\n // Byte order for point\n const littleEndianPoint = view.getUint8(offset) === 1;\n offset++;\n\n // Assert point type\n if (view.getUint32(offset, littleEndianPoint) % 1000 !== 1) {\n throw new Error('WKB: Inner geometries of MultiPoint not of type Point');\n }\n\n offset += 4;\n\n const parsed = parsePoint(view, offset, dimension, littleEndianPoint);\n offset = parsed.offset;\n binaryPointGeometries.push(parsed.geometry);\n }\n\n return concatenateBinaryPointGeometries(binaryPointGeometries, dimension);\n}\n\nfunction parseMultiLineString(view, offset, dimension, littleEndian): BinaryLineGeometry {\n const nLines = view.getUint32(offset, littleEndian);\n offset += 4;\n\n const binaryLineGeometries: BinaryLineGeometry[] = [];\n for (let i = 0; i < nLines; i++) {\n // Byte order for line\n const littleEndianLine = view.getUint8(offset) === 1;\n offset++;\n\n // Assert type LineString\n if (view.getUint32(offset, littleEndianLine) % 1000 !== 2) {\n throw new Error('WKB: Inner geometries of MultiLineString not of type LineString');\n }\n offset += 4;\n\n const parsed = parseLineString(view, offset, dimension, littleEndianLine);\n offset = parsed.offset;\n binaryLineGeometries.push(parsed.geometry);\n }\n\n return concatenateBinaryLineGeometries(binaryLineGeometries, dimension);\n}\n\nfunction parseMultiPolygon(view, offset, dimension, littleEndian): BinaryPolygonGeometry {\n const nPolygons = view.getUint32(offset, littleEndian);\n offset += 4;\n\n const binaryPolygonGeometries: BinaryPolygonGeometry[] = [];\n for (let i = 0; i < nPolygons; i++) {\n // Byte order for polygon\n const littleEndianPolygon = view.getUint8(offset) === 1;\n offset++;\n\n // Assert type Polygon\n if (view.getUint32(offset, littleEndianPolygon) % 1000 !== 3) {\n throw new Error('WKB: Inner geometries of MultiPolygon not of type Polygon');\n }\n offset += 4;\n\n const parsed = parsePolygon(view, offset, dimension, littleEndianPolygon);\n offset = parsed.offset;\n binaryPolygonGeometries.push(parsed.geometry);\n }\n\n return concatenateBinaryPolygonGeometries(binaryPolygonGeometries, dimension);\n}\n\n// TODO - move to loaders.gl/schema/gis\n\nfunction concatenateBinaryPointGeometries(\n binaryPointGeometries: BinaryPointGeometry[],\n dimension: number\n): BinaryPointGeometry {\n const positions: TypedArray[] = binaryPointGeometries.map((geometry) => geometry.positions.value);\n const concatenatedPositions = new Float64Array(concatTypedArrays(positions).buffer);\n\n return {\n type: 'Point',\n positions: {value: concatenatedPositions, size: dimension}\n };\n}\n\nfunction concatenateBinaryLineGeometries(\n binaryLineGeometries: BinaryLineGeometry[],\n dimension: number\n): BinaryLineGeometry {\n const lines: TypedArray[] = binaryLineGeometries.map((geometry) => geometry.positions.value);\n const concatenatedPositions = new Float64Array(concatTypedArrays(lines).buffer);\n const pathIndices = lines.map((line) => line.length / dimension).map(cumulativeSum(0));\n pathIndices.unshift(0);\n\n return {\n type: 'LineString',\n positions: {value: concatenatedPositions, size: dimension},\n pathIndices: {value: new Uint16Array(pathIndices), size: 1}\n };\n}\n\nfunction concatenateBinaryPolygonGeometries(\n binaryPolygonGeometries: BinaryPolygonGeometry[],\n dimension: number\n): BinaryPolygonGeometry {\n const polygons: TypedArray[] = [];\n const primitivePolygons: TypedArray[] = [];\n\n for (const binaryPolygon of binaryPolygonGeometries) {\n const {positions, primitivePolygonIndices} = binaryPolygon;\n polygons.push(positions.value);\n primitivePolygons.push(primitivePolygonIndices.value);\n }\n\n const concatenatedPositions = new Float64Array(concatTypedArrays(polygons).buffer);\n const polygonIndices = polygons.map((p) => p.length / dimension).map(cumulativeSum(0));\n polygonIndices.unshift(0);\n\n // Combine primitivePolygonIndices from each individual polygon\n const primitivePolygonIndices = [0];\n for (const primitivePolygon of primitivePolygons) {\n primitivePolygonIndices.push(\n ...primitivePolygon\n .filter((x: number) => x > 0)\n .map((x: number) => x + primitivePolygonIndices[primitivePolygonIndices.length - 1])\n );\n }\n\n return {\n type: 'Polygon',\n positions: {value: concatenatedPositions, size: dimension},\n polygonIndices: {value: new Uint16Array(polygonIndices), size: 1},\n primitivePolygonIndices: {value: new Uint16Array(primitivePolygonIndices), size: 1}\n };\n}\n\n// TODO: remove copy; import from typed-array-utils\n// modules/math/src/geometry/typed-arrays/typed-array-utils.js\nfunction concatTypedArrays(arrays: TypedArray[]): TypedArray {\n let byteLength = 0;\n for (let i = 0; i < arrays.length; ++i) {\n byteLength += arrays[i].byteLength;\n }\n const buffer = new Uint8Array(byteLength);\n\n let byteOffset = 0;\n for (let i = 0; i < arrays.length; ++i) {\n const data = new Uint8Array(arrays[i].buffer);\n byteLength = data.length;\n for (let j = 0; j < byteLength; ++j) {\n buffer[byteOffset++] = data[j];\n }\n }\n return buffer;\n}\n"],"file":"parse-wkb.js"}
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/parse-wkb.ts"],"names":["NUM_DIMENSIONS","parseWKB","arrayBuffer","view","DataView","offset","littleEndian","getUint8","geometryCode","getUint32","geometryType","type","dimension","point","parsePoint","geometry","line","parseLineString","polygon","parsePolygon","multiPoint","parseMultiPoint","multiLine","parseMultiLineString","multiPolygon","parseMultiPolygon","Error","positions","Float64Array","i","getFloat64","value","size","nPoints","pathIndices","push","Uint16Array","cumulativeSum","sum","nRings","rings","parsed","concatenatedPositions","concatTypedArrays","buffer","polygonIndices","length","primitivePolygonIndices","map","l","unshift","binaryPointGeometries","littleEndianPoint","concatenateBinaryPointGeometries","nLines","binaryLineGeometries","littleEndianLine","concatenateBinaryLineGeometries","nPolygons","binaryPolygonGeometries","littleEndianPolygon","concatenateBinaryPolygonGeometries","lines","polygons","primitivePolygons","binaryPolygon","p","primitivePolygon","filter","x","arrays","byteLength","Uint8Array","byteOffset","data","j"],"mappings":"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","sourcesContent":["import type {\n TypedArray,\n BinaryGeometry,\n BinaryPointGeometry,\n BinaryLineGeometry,\n BinaryPolygonGeometry\n} from '@loaders.gl/schema';\n\nconst NUM_DIMENSIONS = {\n 0: 2, // 2D\n 1: 3, // 3D (Z)\n 2: 3, // 3D (M)\n 3: 4 // 4D (ZM)\n};\n\nexport default function parseWKB(arrayBuffer: ArrayBuffer): BinaryGeometry {\n const view = new DataView(arrayBuffer);\n let offset = 0;\n\n // Check endianness of data\n const littleEndian = view.getUint8(offset) === 1;\n offset++;\n\n // 4-digit code representing dimension and type of geometry\n const geometryCode = view.getUint32(offset, littleEndian);\n offset += 4;\n\n const geometryType = geometryCode % 1000;\n const type = ((geometryCode - geometryType) / 1000) as 0 | 1 | 2 | 3;\n const dimension = NUM_DIMENSIONS[type];\n\n switch (geometryType) {\n case 1:\n const point = parsePoint(view, offset, dimension, littleEndian);\n return point.geometry;\n case 2:\n const line = parseLineString(view, offset, dimension, littleEndian);\n return line.geometry;\n case 3:\n const polygon = parsePolygon(view, offset, dimension, littleEndian);\n return polygon.geometry;\n case 4:\n const multiPoint = parseMultiPoint(view, offset, dimension, littleEndian);\n multiPoint.type = 'Point';\n return multiPoint;\n case 5:\n const multiLine = parseMultiLineString(view, offset, dimension, littleEndian);\n multiLine.type = 'LineString';\n return multiLine;\n case 6:\n const multiPolygon = parseMultiPolygon(view, offset, dimension, littleEndian);\n multiPolygon.type = 'Polygon';\n return multiPolygon;\n // case 7:\n // TODO: handle GeometryCollections\n // return parseGeometryCollection(view, offset, dimension, littleEndian);\n default:\n throw new Error(`WKB: Unsupported geometry type: ${geometryType}`);\n }\n}\n\n// Primitives; parse point and linear ring\nfunction parsePoint(\n view: DataView,\n offset: number,\n dimension: number,\n littleEndian: boolean\n): {geometry: BinaryPointGeometry; offset: number} {\n const positions = new Float64Array(dimension);\n for (let i = 0; i < dimension; i++) {\n positions[i] = view.getFloat64(offset, littleEndian);\n offset += 8;\n }\n\n return {\n geometry: {type: 'Point', positions: {value: positions, size: dimension}},\n offset\n };\n}\n\nfunction parseLineString(\n view: DataView,\n offset: number,\n dimension: number,\n littleEndian: boolean\n): {geometry: BinaryLineGeometry; offset: number} {\n const nPoints = view.getUint32(offset, littleEndian);\n offset += 4;\n\n // Instantiate array\n const positions = new Float64Array(nPoints * dimension);\n for (let i = 0; i < nPoints * dimension; i++) {\n positions[i] = view.getFloat64(offset, littleEndian);\n offset += 8;\n }\n\n const pathIndices = [0];\n if (nPoints > 0) {\n pathIndices.push(nPoints);\n }\n\n return {\n geometry: {\n type: 'LineString',\n positions: {value: positions, size: dimension},\n pathIndices: {value: new Uint16Array(pathIndices), size: 1}\n },\n offset\n };\n}\n\n// https://stackoverflow.com/a/55261098\nconst cumulativeSum = (sum: number) => (value: number) => (sum += value);\n\nfunction parsePolygon(\n view: DataView,\n offset: number,\n dimension: number,\n littleEndian: boolean\n): {geometry: BinaryPolygonGeometry; offset: number} {\n const nRings = view.getUint32(offset, littleEndian);\n offset += 4;\n\n const rings: TypedArray[] = [];\n for (let i = 0; i < nRings; i++) {\n const parsed = parseLineString(view, offset, dimension, littleEndian);\n const {positions} = parsed.geometry;\n offset = parsed.offset;\n rings.push(positions.value);\n }\n\n const concatenatedPositions = new Float64Array(concatTypedArrays(rings).buffer);\n const polygonIndices = [0];\n if (concatenatedPositions.length > 0) {\n polygonIndices.push(concatenatedPositions.length / dimension);\n }\n const primitivePolygonIndices = rings.map((l) => l.length / dimension).map(cumulativeSum(0));\n primitivePolygonIndices.unshift(0);\n\n return {\n geometry: {\n type: 'Polygon',\n positions: {value: concatenatedPositions, size: dimension},\n polygonIndices: {\n value: new Uint16Array(polygonIndices),\n size: 1\n },\n primitivePolygonIndices: {value: new Uint16Array(primitivePolygonIndices), size: 1}\n },\n offset\n };\n}\n\nfunction parseMultiPoint(\n view: DataView,\n offset: number,\n dimension: number,\n littleEndian: boolean\n): BinaryPointGeometry {\n const nPoints = view.getUint32(offset, littleEndian);\n offset += 4;\n\n const binaryPointGeometries: BinaryPointGeometry[] = [];\n for (let i = 0; i < nPoints; i++) {\n // Byte order for point\n const littleEndianPoint = view.getUint8(offset) === 1;\n offset++;\n\n // Assert point type\n if (view.getUint32(offset, littleEndianPoint) % 1000 !== 1) {\n throw new Error('WKB: Inner geometries of MultiPoint not of type Point');\n }\n\n offset += 4;\n\n const parsed = parsePoint(view, offset, dimension, littleEndianPoint);\n offset = parsed.offset;\n binaryPointGeometries.push(parsed.geometry);\n }\n\n return concatenateBinaryPointGeometries(binaryPointGeometries, dimension);\n}\n\nfunction parseMultiLineString(\n view: DataView,\n offset: number,\n dimension: number,\n littleEndian: boolean\n): BinaryLineGeometry {\n const nLines = view.getUint32(offset, littleEndian);\n offset += 4;\n\n const binaryLineGeometries: BinaryLineGeometry[] = [];\n for (let i = 0; i < nLines; i++) {\n // Byte order for line\n const littleEndianLine = view.getUint8(offset) === 1;\n offset++;\n\n // Assert type LineString\n if (view.getUint32(offset, littleEndianLine) % 1000 !== 2) {\n throw new Error('WKB: Inner geometries of MultiLineString not of type LineString');\n }\n offset += 4;\n\n const parsed = parseLineString(view, offset, dimension, littleEndianLine);\n offset = parsed.offset;\n binaryLineGeometries.push(parsed.geometry);\n }\n\n return concatenateBinaryLineGeometries(binaryLineGeometries, dimension);\n}\n\nfunction parseMultiPolygon(\n view: DataView,\n offset: number,\n dimension: number,\n littleEndian: boolean\n): BinaryPolygonGeometry {\n const nPolygons = view.getUint32(offset, littleEndian);\n offset += 4;\n\n const binaryPolygonGeometries: BinaryPolygonGeometry[] = [];\n for (let i = 0; i < nPolygons; i++) {\n // Byte order for polygon\n const littleEndianPolygon = view.getUint8(offset) === 1;\n offset++;\n\n // Assert type Polygon\n if (view.getUint32(offset, littleEndianPolygon) % 1000 !== 3) {\n throw new Error('WKB: Inner geometries of MultiPolygon not of type Polygon');\n }\n offset += 4;\n\n const parsed = parsePolygon(view, offset, dimension, littleEndianPolygon);\n offset = parsed.offset;\n binaryPolygonGeometries.push(parsed.geometry);\n }\n\n return concatenateBinaryPolygonGeometries(binaryPolygonGeometries, dimension);\n}\n\n// TODO - move to loaders.gl/schema/gis\n\nfunction concatenateBinaryPointGeometries(\n binaryPointGeometries: BinaryPointGeometry[],\n dimension: number\n): BinaryPointGeometry {\n const positions: TypedArray[] = binaryPointGeometries.map((geometry) => geometry.positions.value);\n const concatenatedPositions = new Float64Array(concatTypedArrays(positions).buffer);\n\n return {\n type: 'Point',\n positions: {value: concatenatedPositions, size: dimension}\n };\n}\n\nfunction concatenateBinaryLineGeometries(\n binaryLineGeometries: BinaryLineGeometry[],\n dimension: number\n): BinaryLineGeometry {\n const lines: TypedArray[] = binaryLineGeometries.map((geometry) => geometry.positions.value);\n const concatenatedPositions = new Float64Array(concatTypedArrays(lines).buffer);\n const pathIndices = lines.map((line) => line.length / dimension).map(cumulativeSum(0));\n pathIndices.unshift(0);\n\n return {\n type: 'LineString',\n positions: {value: concatenatedPositions, size: dimension},\n pathIndices: {value: new Uint16Array(pathIndices), size: 1}\n };\n}\n\nfunction concatenateBinaryPolygonGeometries(\n binaryPolygonGeometries: BinaryPolygonGeometry[],\n dimension: number\n): BinaryPolygonGeometry {\n const polygons: TypedArray[] = [];\n const primitivePolygons: TypedArray[] = [];\n\n for (const binaryPolygon of binaryPolygonGeometries) {\n const {positions, primitivePolygonIndices} = binaryPolygon;\n polygons.push(positions.value);\n primitivePolygons.push(primitivePolygonIndices.value);\n }\n\n const concatenatedPositions = new Float64Array(concatTypedArrays(polygons).buffer);\n const polygonIndices = polygons.map((p) => p.length / dimension).map(cumulativeSum(0));\n polygonIndices.unshift(0);\n\n // Combine primitivePolygonIndices from each individual polygon\n const primitivePolygonIndices = [0];\n for (const primitivePolygon of primitivePolygons) {\n primitivePolygonIndices.push(\n ...primitivePolygon\n .filter((x: number) => x > 0)\n .map((x: number) => x + primitivePolygonIndices[primitivePolygonIndices.length - 1])\n );\n }\n\n return {\n type: 'Polygon',\n positions: {value: concatenatedPositions, size: dimension},\n polygonIndices: {value: new Uint16Array(polygonIndices), size: 1},\n primitivePolygonIndices: {value: new Uint16Array(primitivePolygonIndices), size: 1}\n };\n}\n\n// TODO: remove copy; import from typed-array-utils\n// modules/math/src/geometry/typed-arrays/typed-array-utils.js\nfunction concatTypedArrays(arrays: TypedArray[]): TypedArray {\n let byteLength = 0;\n for (let i = 0; i < arrays.length; ++i) {\n byteLength += arrays[i].byteLength;\n }\n const buffer = new Uint8Array(byteLength);\n\n let byteOffset = 0;\n for (let i = 0; i < arrays.length; ++i) {\n const data = new Uint8Array(arrays[i].buffer);\n byteLength = data.length;\n for (let j = 0; j < byteLength; ++j) {\n buffer[byteOffset++] = data[j];\n }\n }\n return buffer;\n}\n"],"file":"parse-wkb.js"}
|
|
@@ -4,19 +4,19 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = parseWKT;
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
const numberRegexp = /[-+]?([0-9]*\.[0-9]+|[0-9]+)([eE][-+]?[0-9]+)?/;
|
|
8
|
+
const tuples = new RegExp('^' + numberRegexp.source + '(\\s' + numberRegexp.source + '){1,}');
|
|
9
9
|
|
|
10
10
|
function parseWKT(input) {
|
|
11
|
-
|
|
11
|
+
const parts = input.split(';');
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
let _ = parts.pop();
|
|
14
14
|
|
|
15
|
-
|
|
16
|
-
|
|
15
|
+
const srid = (parts.shift() || '').split('=').pop();
|
|
16
|
+
let i = 0;
|
|
17
17
|
|
|
18
18
|
function $(re) {
|
|
19
|
-
|
|
19
|
+
const match = _.substring(i).match(re);
|
|
20
20
|
|
|
21
21
|
if (!match) return null;else {
|
|
22
22
|
i += match[0].length;
|
|
@@ -43,11 +43,11 @@ function parseWKT(input) {
|
|
|
43
43
|
|
|
44
44
|
function multicoords() {
|
|
45
45
|
white();
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
46
|
+
let depth = 0;
|
|
47
|
+
const rings = [];
|
|
48
|
+
const stack = [rings];
|
|
49
|
+
let pointer = rings;
|
|
50
|
+
let elem;
|
|
51
51
|
|
|
52
52
|
while (elem = $(/^(\()/) || $(/^(\))/) || $(/^(,)/) || $(tuples)) {
|
|
53
53
|
if (elem === '(') {
|
|
@@ -78,9 +78,9 @@ function parseWKT(input) {
|
|
|
78
78
|
}
|
|
79
79
|
|
|
80
80
|
function coords() {
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
81
|
+
const list = [];
|
|
82
|
+
let item;
|
|
83
|
+
let pt;
|
|
84
84
|
|
|
85
85
|
while (pt = $(tuples) || $(/^(,)/)) {
|
|
86
86
|
if (pt === ',') {
|
|
@@ -102,7 +102,7 @@ function parseWKT(input) {
|
|
|
102
102
|
if (!$(/^(point(\sz)?)/i)) return null;
|
|
103
103
|
white();
|
|
104
104
|
if (!$(/^(\()/)) return null;
|
|
105
|
-
|
|
105
|
+
const c = coords();
|
|
106
106
|
if (!c) return null;
|
|
107
107
|
white();
|
|
108
108
|
if (!$(/^(\))/)) return null;
|
|
@@ -116,10 +116,10 @@ function parseWKT(input) {
|
|
|
116
116
|
if (!$(/^(multipoint)/i)) return null;
|
|
117
117
|
white();
|
|
118
118
|
|
|
119
|
-
|
|
119
|
+
const newCoordsFormat = _.substring(_.indexOf('(') + 1, _.length - 1).replace(/\(/g, '').replace(/\)/g, '');
|
|
120
120
|
|
|
121
121
|
_ = 'MULTIPOINT (' + newCoordsFormat + ')';
|
|
122
|
-
|
|
122
|
+
const c = multicoords();
|
|
123
123
|
if (!c) return null;
|
|
124
124
|
white();
|
|
125
125
|
return {
|
|
@@ -131,7 +131,7 @@ function parseWKT(input) {
|
|
|
131
131
|
function multilinestring() {
|
|
132
132
|
if (!$(/^(multilinestring)/i)) return null;
|
|
133
133
|
white();
|
|
134
|
-
|
|
134
|
+
const c = multicoords();
|
|
135
135
|
if (!c) return null;
|
|
136
136
|
white();
|
|
137
137
|
return {
|
|
@@ -144,7 +144,7 @@ function parseWKT(input) {
|
|
|
144
144
|
if (!$(/^(linestring(\sz)?)/i)) return null;
|
|
145
145
|
white();
|
|
146
146
|
if (!$(/^(\()/)) return null;
|
|
147
|
-
|
|
147
|
+
const c = coords();
|
|
148
148
|
if (!c) return null;
|
|
149
149
|
if (!$(/^(\))/)) return null;
|
|
150
150
|
return {
|
|
@@ -156,7 +156,7 @@ function parseWKT(input) {
|
|
|
156
156
|
function polygon() {
|
|
157
157
|
if (!$(/^(polygon(\sz)?)/i)) return null;
|
|
158
158
|
white();
|
|
159
|
-
|
|
159
|
+
const c = multicoords();
|
|
160
160
|
if (!c) return null;
|
|
161
161
|
return {
|
|
162
162
|
type: 'Polygon',
|
|
@@ -167,7 +167,7 @@ function parseWKT(input) {
|
|
|
167
167
|
function multipolygon() {
|
|
168
168
|
if (!$(/^(multipolygon)/i)) return null;
|
|
169
169
|
white();
|
|
170
|
-
|
|
170
|
+
const c = multicoords();
|
|
171
171
|
if (!c) return null;
|
|
172
172
|
return {
|
|
173
173
|
type: 'MultiPolygon',
|
|
@@ -176,8 +176,8 @@ function parseWKT(input) {
|
|
|
176
176
|
}
|
|
177
177
|
|
|
178
178
|
function geometrycollection() {
|
|
179
|
-
|
|
180
|
-
|
|
179
|
+
const geometries = [];
|
|
180
|
+
let geometry;
|
|
181
181
|
if (!$(/^(geometrycollection)/i)) return null;
|
|
182
182
|
white();
|
|
183
183
|
if (!$(/^(\()/)) return null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/lib/parse-wkt.ts"],"names":["numberRegexp","tuples","RegExp","source","parseWKT","input","parts","split","_","pop","srid","shift","i","$","re","match","substring","length","crs","obj","type","properties","name","white","multicoords","depth","rings","stack","pointer","elem","push","some","isNaN","Array","prototype","apply","map","parseFloat","coords","list","item","pt","point","c","coordinates","multipoint","newCoordsFormat","indexOf","replace","multilinestring","linestring","polygon","multipolygon","geometrycollection","geometries","geometry","root"],"mappings":";;;;;;AAKA,IAAMA,YAAY,GAAG,gDAArB;AAEA,IAAMC,MAAM,GAAG,IAAIC,MAAJ,CAAW,MAAMF,YAAY,CAACG,MAAnB,GAA4B,MAA5B,GAAqCH,YAAY,CAACG,MAAlD,GAA2D,OAAtE,CAAf;;AAQe,SAASC,QAAT,CAAkBC,KAAlB,EAAyB;AACtC,MAAMC,KAAK,GAAGD,KAAK,CAACE,KAAN,CAAY,GAAZ,CAAd;;AACA,MAAIC,CAAC,GAAGF,KAAK,CAACG,GAAN,EAAR;;AACA,MAAMC,IAAI,GAAG,CAACJ,KAAK,CAACK,KAAN,MAAiB,EAAlB,EAAsBJ,KAAtB,CAA4B,GAA5B,EAAiCE,GAAjC,EAAb;AAEA,MAAIG,CAAC,GAAG,CAAR;;AAEA,WAASC,CAAT,CAAWC,EAAX,EAAe;AACb,QAAMC,KAAK,GAAGP,CAAC,CAACQ,SAAF,CAAYJ,CAAZ,EAAeG,KAAf,CAAqBD,EAArB,CAAd;;AACA,QAAI,CAACC,KAAL,EAAY,OAAO,IAAP,CAAZ,KACK;AACHH,MAAAA,CAAC,IAAIG,KAAK,CAAC,CAAD,CAAL,CAASE,MAAd;AACA,aAAOF,KAAK,CAAC,CAAD,CAAZ;AACD;AACF;;AAED,WAASG,GAAT,CAAaC,GAAb,EAAkB;AAChB,QAAIA,GAAG,IAAIT,IAAI,CAACK,KAAL,CAAW,KAAX,CAAX,EAA8B;AAC5BI,MAAAA,GAAG,CAACD,GAAJ,GAAU;AACRE,QAAAA,IAAI,EAAE,MADE;AAERC,QAAAA,UAAU,EAAE;AACVC,UAAAA,IAAI,EAAE,2BAA2BZ;AADvB;AAFJ,OAAV;AAMD;;AAED,WAAOS,GAAP;AACD;;AAED,WAASI,KAAT,GAAiB;AACfV,IAAAA,CAAC,CAAC,MAAD,CAAD;AACD;;AAED,WAASW,WAAT,GAAuB;AACrBD,IAAAA,KAAK;AACL,QAAIE,KAAK,GAAG,CAAZ;AACA,QAAMC,KAAK,GAAG,EAAd;AACA,QAAMC,KAAK,GAAG,CAACD,KAAD,CAAd;AACA,QAAIE,OAAO,GAAGF,KAAd;AACA,QAAIG,IAAJ;;AAEA,WAAQA,IAAI,GAAGhB,CAAC,CAAC,OAAD,CAAD,IAAcA,CAAC,CAAC,OAAD,CAAf,IAA4BA,CAAC,CAAC,MAAD,CAA7B,IAAyCA,CAAC,CAACZ,MAAD,CAAzD,EAAoE;AAClE,UAAI4B,IAAI,KAAK,GAAb,EAAkB;AAChBF,QAAAA,KAAK,CAACG,IAAN,CAAWF,OAAX;AACAA,QAAAA,OAAO,GAAG,EAAV;AACAD,QAAAA,KAAK,CAACA,KAAK,CAACV,MAAN,GAAe,CAAhB,CAAL,CAAwBa,IAAxB,CAA6BF,OAA7B;AACAH,QAAAA,KAAK;AACN,OALD,MAKO,IAAII,IAAI,KAAK,GAAb,EAAkB;AAEvB,YAAID,OAAO,CAACX,MAAR,KAAmB,CAAvB,EAA0B,OAAO,IAAP;AAG1BW,QAAAA,OAAO,GAAGD,KAAK,CAAClB,GAAN,EAAV;AAEA,YAAI,CAACmB,OAAL,EAAc,OAAO,IAAP;AACdH,QAAAA,KAAK;AACL,YAAIA,KAAK,KAAK,CAAd,EAAiB;AAClB,OAVM,MAUA,IAAII,IAAI,KAAK,GAAb,EAAkB;AACvBD,QAAAA,OAAO,GAAG,EAAV;AACAD,QAAAA,KAAK,CAACA,KAAK,CAACV,MAAN,GAAe,CAAhB,CAAL,CAAwBa,IAAxB,CAA6BF,OAA7B;AACD,OAHM,MAGA,IAAI,CAACC,IAAI,CAACtB,KAAL,CAAW,KAAX,EAAkBwB,IAAlB,CAAuBC,KAAvB,CAAL,EAAoC;AACzCC,QAAAA,KAAK,CAACC,SAAN,CAAgBJ,IAAhB,CAAqBK,KAArB,CAA2BP,OAA3B,EAAoCC,IAAI,CAACtB,KAAL,CAAW,KAAX,EAAkB6B,GAAlB,CAAsBC,UAAtB,CAApC;AACD,OAFM,MAEA;AACL,eAAO,IAAP;AACD;;AACDd,MAAAA,KAAK;AACN;;AAED,QAAIE,KAAK,KAAK,CAAd,EAAiB,OAAO,IAAP;AAEjB,WAAOC,KAAP;AACD;;AAED,WAASY,MAAT,GAAkB;AAChB,QAAMC,IAAI,GAAG,EAAb;AACA,QAAIC,IAAJ;AACA,QAAIC,EAAJ;;AACA,WAAQA,EAAE,GAAG5B,CAAC,CAACZ,MAAD,CAAD,IAAaY,CAAC,CAAC,MAAD,CAA3B,EAAsC;AACpC,UAAI4B,EAAE,KAAK,GAAX,EAAgB;AACdF,QAAAA,IAAI,CAACT,IAAL,CAAUU,IAAV;AACAA,QAAAA,IAAI,GAAG,EAAP;AACD,OAHD,MAGO,IAAI,CAACC,EAAE,CAAClC,KAAH,CAAS,KAAT,EAAgBwB,IAAhB,CAAqBC,KAArB,CAAL,EAAkC;AACvC,YAAI,CAACQ,IAAL,EAAWA,IAAI,GAAG,EAAP;AACXP,QAAAA,KAAK,CAACC,SAAN,CAAgBJ,IAAhB,CAAqBK,KAArB,CAA2BK,IAA3B,EAAiCC,EAAE,CAAClC,KAAH,CAAS,KAAT,EAAgB6B,GAAhB,CAAoBC,UAApB,CAAjC;AACD;;AACDd,MAAAA,KAAK;AACN;;AAED,QAAIiB,IAAJ,EAAUD,IAAI,CAACT,IAAL,CAAUU,IAAV,EAAV,KACK,OAAO,IAAP;AAEL,WAAOD,IAAI,CAACtB,MAAL,GAAcsB,IAAd,GAAqB,IAA5B;AACD;;AAED,WAASG,KAAT,GAAiB;AACf,QAAI,CAAC7B,CAAC,CAAC,iBAAD,CAAN,EAA2B,OAAO,IAAP;AAC3BU,IAAAA,KAAK;AACL,QAAI,CAACV,CAAC,CAAC,OAAD,CAAN,EAAiB,OAAO,IAAP;AACjB,QAAM8B,CAAC,GAAGL,MAAM,EAAhB;AACA,QAAI,CAACK,CAAL,EAAQ,OAAO,IAAP;AACRpB,IAAAA,KAAK;AACL,QAAI,CAACV,CAAC,CAAC,OAAD,CAAN,EAAiB,OAAO,IAAP;AACjB,WAAO;AACLO,MAAAA,IAAI,EAAE,OADD;AAELwB,MAAAA,WAAW,EAAED,CAAC,CAAC,CAAD;AAFT,KAAP;AAID;;AAED,WAASE,UAAT,GAAsB;AACpB,QAAI,CAAChC,CAAC,CAAC,gBAAD,CAAN,EAA0B,OAAO,IAAP;AAC1BU,IAAAA,KAAK;;AACL,QAAMuB,eAAe,GAAGtC,CAAC,CAACQ,SAAF,CAAYR,CAAC,CAACuC,OAAF,CAAU,GAAV,IAAiB,CAA7B,EAAgCvC,CAAC,CAACS,MAAF,GAAW,CAA3C,EACrB+B,OADqB,CACb,KADa,EACN,EADM,EAErBA,OAFqB,CAEb,KAFa,EAEN,EAFM,CAAxB;;AAGAxC,IAAAA,CAAC,GAAG,iBAAiBsC,eAAjB,GAAmC,GAAvC;AACA,QAAMH,CAAC,GAAGnB,WAAW,EAArB;AACA,QAAI,CAACmB,CAAL,EAAQ,OAAO,IAAP;AACRpB,IAAAA,KAAK;AACL,WAAO;AACLH,MAAAA,IAAI,EAAE,YADD;AAELwB,MAAAA,WAAW,EAAED;AAFR,KAAP;AAID;;AAED,WAASM,eAAT,GAA2B;AACzB,QAAI,CAACpC,CAAC,CAAC,qBAAD,CAAN,EAA+B,OAAO,IAAP;AAC/BU,IAAAA,KAAK;AACL,QAAMoB,CAAC,GAAGnB,WAAW,EAArB;AACA,QAAI,CAACmB,CAAL,EAAQ,OAAO,IAAP;AACRpB,IAAAA,KAAK;AACL,WAAO;AACLH,MAAAA,IAAI,EAAE,iBADD;AAELwB,MAAAA,WAAW,EAAED;AAFR,KAAP;AAID;;AAED,WAASO,UAAT,GAAsB;AACpB,QAAI,CAACrC,CAAC,CAAC,sBAAD,CAAN,EAAgC,OAAO,IAAP;AAChCU,IAAAA,KAAK;AACL,QAAI,CAACV,CAAC,CAAC,OAAD,CAAN,EAAiB,OAAO,IAAP;AACjB,QAAM8B,CAAC,GAAGL,MAAM,EAAhB;AACA,QAAI,CAACK,CAAL,EAAQ,OAAO,IAAP;AACR,QAAI,CAAC9B,CAAC,CAAC,OAAD,CAAN,EAAiB,OAAO,IAAP;AACjB,WAAO;AACLO,MAAAA,IAAI,EAAE,YADD;AAELwB,MAAAA,WAAW,EAAED;AAFR,KAAP;AAID;;AAED,WAASQ,OAAT,GAAmB;AACjB,QAAI,CAACtC,CAAC,CAAC,mBAAD,CAAN,EAA6B,OAAO,IAAP;AAC7BU,IAAAA,KAAK;AACL,QAAMoB,CAAC,GAAGnB,WAAW,EAArB;AACA,QAAI,CAACmB,CAAL,EAAQ,OAAO,IAAP;AACR,WAAO;AACLvB,MAAAA,IAAI,EAAE,SADD;AAELwB,MAAAA,WAAW,EAAED;AAFR,KAAP;AAID;;AAED,WAASS,YAAT,GAAwB;AACtB,QAAI,CAACvC,CAAC,CAAC,kBAAD,CAAN,EAA4B,OAAO,IAAP;AAC5BU,IAAAA,KAAK;AACL,QAAMoB,CAAC,GAAGnB,WAAW,EAArB;AACA,QAAI,CAACmB,CAAL,EAAQ,OAAO,IAAP;AACR,WAAO;AACLvB,MAAAA,IAAI,EAAE,cADD;AAELwB,MAAAA,WAAW,EAAED;AAFR,KAAP;AAID;;AAED,WAASU,kBAAT,GAA8B;AAC5B,QAAMC,UAAU,GAAG,EAAnB;AACA,QAAIC,QAAJ;AAEA,QAAI,CAAC1C,CAAC,CAAC,wBAAD,CAAN,EAAkC,OAAO,IAAP;AAClCU,IAAAA,KAAK;AAEL,QAAI,CAACV,CAAC,CAAC,OAAD,CAAN,EAAiB,OAAO,IAAP;;AACjB,WAAQ0C,QAAQ,GAAGC,IAAI,EAAvB,EAA4B;AAC1BF,MAAAA,UAAU,CAACxB,IAAX,CAAgByB,QAAhB;AACAhC,MAAAA,KAAK;AACLV,MAAAA,CAAC,CAAC,MAAD,CAAD;AACAU,MAAAA,KAAK;AACN;;AACD,QAAI,CAACV,CAAC,CAAC,OAAD,CAAN,EAAiB,OAAO,IAAP;AAEjB,WAAO;AACLO,MAAAA,IAAI,EAAE,oBADD;AAELkC,MAAAA,UAAU,EAAEA;AAFP,KAAP;AAID;;AAED,WAASE,IAAT,GAAgB;AACd,WACEd,KAAK,MACLQ,UAAU,EADV,IAEAC,OAAO,EAFP,IAGAN,UAAU,EAHV,IAIAI,eAAe,EAJf,IAKAG,YAAY,EALZ,IAMAC,kBAAkB,EAPpB;AASD;;AAED,SAAOnC,GAAG,CAACsC,IAAI,EAAL,CAAV;AACD","sourcesContent":["// Fork of https://github.com/mapbox/wellknown under ISC license (MIT/BSD-2-clause equivalent)\n\n/* eslint-disable */\n// @ts-nocheck\n\nconst numberRegexp = /[-+]?([0-9]*\\.[0-9]+|[0-9]+)([eE][-+]?[0-9]+)?/;\n// Matches sequences like '100 100' or '100 100 100'.\nconst tuples = new RegExp('^' + numberRegexp.source + '(\\\\s' + numberRegexp.source + '){1,}');\n\n/**\n * Parse WKT and return GeoJSON.\n *\n * @param {string} _ A WKT geometry\n * @return {?Object} A GeoJSON geometry object\n **/\nexport default function parseWKT(input) {\n const parts = input.split(';');\n let _ = parts.pop();\n const srid = (parts.shift() || '').split('=').pop();\n\n let i = 0;\n\n function $(re) {\n const match = _.substring(i).match(re);\n if (!match) return null;\n else {\n i += match[0].length;\n return match[0];\n }\n }\n\n function crs(obj) {\n if (obj && srid.match(/\\d+/)) {\n obj.crs = {\n type: 'name',\n properties: {\n name: 'urn:ogc:def:crs:EPSG::' + srid\n }\n };\n }\n\n return obj;\n }\n\n function white() {\n $(/^\\s*/);\n }\n\n function multicoords() {\n white();\n let depth = 0;\n const rings = [];\n const stack = [rings];\n let pointer = rings;\n let elem;\n\n while ((elem = $(/^(\\()/) || $(/^(\\))/) || $(/^(,)/) || $(tuples))) {\n if (elem === '(') {\n stack.push(pointer);\n pointer = [];\n stack[stack.length - 1].push(pointer);\n depth++;\n } else if (elem === ')') {\n // For the case: Polygon(), ...\n if (pointer.length === 0) return null;\n\n // @ts-ignore\n pointer = stack.pop();\n // the stack was empty, input was malformed\n if (!pointer) return null;\n depth--;\n if (depth === 0) break;\n } else if (elem === ',') {\n pointer = [];\n stack[stack.length - 1].push(pointer);\n } else if (!elem.split(/\\s/g).some(isNaN)) {\n Array.prototype.push.apply(pointer, elem.split(/\\s/g).map(parseFloat));\n } else {\n return null;\n }\n white();\n }\n\n if (depth !== 0) return null;\n\n return rings;\n }\n\n function coords() {\n const list = [];\n let item;\n let pt;\n while ((pt = $(tuples) || $(/^(,)/))) {\n if (pt === ',') {\n list.push(item);\n item = [];\n } else if (!pt.split(/\\s/g).some(isNaN)) {\n if (!item) item = [];\n Array.prototype.push.apply(item, pt.split(/\\s/g).map(parseFloat));\n }\n white();\n }\n\n if (item) list.push(item);\n else return null;\n\n return list.length ? list : null;\n }\n\n function point() {\n if (!$(/^(point(\\sz)?)/i)) return null;\n white();\n if (!$(/^(\\()/)) return null;\n const c = coords();\n if (!c) return null;\n white();\n if (!$(/^(\\))/)) return null;\n return {\n type: 'Point',\n coordinates: c[0]\n };\n }\n\n function multipoint() {\n if (!$(/^(multipoint)/i)) return null;\n white();\n const newCoordsFormat = _.substring(_.indexOf('(') + 1, _.length - 1)\n .replace(/\\(/g, '')\n .replace(/\\)/g, '');\n _ = 'MULTIPOINT (' + newCoordsFormat + ')';\n const c = multicoords();\n if (!c) return null;\n white();\n return {\n type: 'MultiPoint',\n coordinates: c\n };\n }\n\n function multilinestring() {\n if (!$(/^(multilinestring)/i)) return null;\n white();\n const c = multicoords();\n if (!c) return null;\n white();\n return {\n type: 'MultiLineString',\n coordinates: c\n };\n }\n\n function linestring() {\n if (!$(/^(linestring(\\sz)?)/i)) return null;\n white();\n if (!$(/^(\\()/)) return null;\n const c = coords();\n if (!c) return null;\n if (!$(/^(\\))/)) return null;\n return {\n type: 'LineString',\n coordinates: c\n };\n }\n\n function polygon() {\n if (!$(/^(polygon(\\sz)?)/i)) return null;\n white();\n const c = multicoords();\n if (!c) return null;\n return {\n type: 'Polygon',\n coordinates: c\n };\n }\n\n function multipolygon() {\n if (!$(/^(multipolygon)/i)) return null;\n white();\n const c = multicoords();\n if (!c) return null;\n return {\n type: 'MultiPolygon',\n coordinates: c\n };\n }\n\n function geometrycollection() {\n const geometries = [];\n let geometry;\n\n if (!$(/^(geometrycollection)/i)) return null;\n white();\n\n if (!$(/^(\\()/)) return null;\n while ((geometry = root())) {\n geometries.push(geometry);\n white();\n $(/^(,)/);\n white();\n }\n if (!$(/^(\\))/)) return null;\n\n return {\n type: 'GeometryCollection',\n geometries: geometries\n };\n }\n\n function root() {\n return (\n point() ||\n linestring() ||\n polygon() ||\n multipoint() ||\n multilinestring() ||\n multipolygon() ||\n geometrycollection()\n );\n }\n\n return crs(root());\n}\n"],"file":"parse-wkt.js"}
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/parse-wkt.ts"],"names":["numberRegexp","tuples","RegExp","source","parseWKT","input","parts","split","_","pop","srid","shift","i","$","re","match","substring","length","crs","obj","type","properties","name","white","multicoords","depth","rings","stack","pointer","elem","push","some","isNaN","Array","prototype","apply","map","parseFloat","coords","list","item","pt","point","c","coordinates","multipoint","newCoordsFormat","indexOf","replace","multilinestring","linestring","polygon","multipolygon","geometrycollection","geometries","geometry","root"],"mappings":"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","sourcesContent":["// Fork of https://github.com/mapbox/wellknown under ISC license (MIT/BSD-2-clause equivalent)\n\n/* eslint-disable */\n// @ts-nocheck\n\nconst numberRegexp = /[-+]?([0-9]*\\.[0-9]+|[0-9]+)([eE][-+]?[0-9]+)?/;\n// Matches sequences like '100 100' or '100 100 100'.\nconst tuples = new RegExp('^' + numberRegexp.source + '(\\\\s' + numberRegexp.source + '){1,}');\n\n/**\n * Parse WKT and return GeoJSON.\n *\n * @param {string} _ A WKT geometry\n * @return {?Object} A GeoJSON geometry object\n **/\nexport default function parseWKT(input) {\n const parts = input.split(';');\n let _ = parts.pop();\n const srid = (parts.shift() || '').split('=').pop();\n\n let i = 0;\n\n function $(re) {\n const match = _.substring(i).match(re);\n if (!match) return null;\n else {\n i += match[0].length;\n return match[0];\n }\n }\n\n function crs(obj) {\n if (obj && srid.match(/\\d+/)) {\n obj.crs = {\n type: 'name',\n properties: {\n name: 'urn:ogc:def:crs:EPSG::' + srid\n }\n };\n }\n\n return obj;\n }\n\n function white() {\n $(/^\\s*/);\n }\n\n function multicoords() {\n white();\n let depth = 0;\n const rings = [];\n const stack = [rings];\n let pointer = rings;\n let elem;\n\n while ((elem = $(/^(\\()/) || $(/^(\\))/) || $(/^(,)/) || $(tuples))) {\n if (elem === '(') {\n stack.push(pointer);\n pointer = [];\n stack[stack.length - 1].push(pointer);\n depth++;\n } else if (elem === ')') {\n // For the case: Polygon(), ...\n if (pointer.length === 0) return null;\n\n // @ts-ignore\n pointer = stack.pop();\n // the stack was empty, input was malformed\n if (!pointer) return null;\n depth--;\n if (depth === 0) break;\n } else if (elem === ',') {\n pointer = [];\n stack[stack.length - 1].push(pointer);\n } else if (!elem.split(/\\s/g).some(isNaN)) {\n Array.prototype.push.apply(pointer, elem.split(/\\s/g).map(parseFloat));\n } else {\n return null;\n }\n white();\n }\n\n if (depth !== 0) return null;\n\n return rings;\n }\n\n function coords() {\n const list = [];\n let item;\n let pt;\n while ((pt = $(tuples) || $(/^(,)/))) {\n if (pt === ',') {\n list.push(item);\n item = [];\n } else if (!pt.split(/\\s/g).some(isNaN)) {\n if (!item) item = [];\n Array.prototype.push.apply(item, pt.split(/\\s/g).map(parseFloat));\n }\n white();\n }\n\n if (item) list.push(item);\n else return null;\n\n return list.length ? list : null;\n }\n\n function point() {\n if (!$(/^(point(\\sz)?)/i)) return null;\n white();\n if (!$(/^(\\()/)) return null;\n const c = coords();\n if (!c) return null;\n white();\n if (!$(/^(\\))/)) return null;\n return {\n type: 'Point',\n coordinates: c[0]\n };\n }\n\n function multipoint() {\n if (!$(/^(multipoint)/i)) return null;\n white();\n const newCoordsFormat = _.substring(_.indexOf('(') + 1, _.length - 1)\n .replace(/\\(/g, '')\n .replace(/\\)/g, '');\n _ = 'MULTIPOINT (' + newCoordsFormat + ')';\n const c = multicoords();\n if (!c) return null;\n white();\n return {\n type: 'MultiPoint',\n coordinates: c\n };\n }\n\n function multilinestring() {\n if (!$(/^(multilinestring)/i)) return null;\n white();\n const c = multicoords();\n if (!c) return null;\n white();\n return {\n type: 'MultiLineString',\n coordinates: c\n };\n }\n\n function linestring() {\n if (!$(/^(linestring(\\sz)?)/i)) return null;\n white();\n if (!$(/^(\\()/)) return null;\n const c = coords();\n if (!c) return null;\n if (!$(/^(\\))/)) return null;\n return {\n type: 'LineString',\n coordinates: c\n };\n }\n\n function polygon() {\n if (!$(/^(polygon(\\sz)?)/i)) return null;\n white();\n const c = multicoords();\n if (!c) return null;\n return {\n type: 'Polygon',\n coordinates: c\n };\n }\n\n function multipolygon() {\n if (!$(/^(multipolygon)/i)) return null;\n white();\n const c = multicoords();\n if (!c) return null;\n return {\n type: 'MultiPolygon',\n coordinates: c\n };\n }\n\n function geometrycollection() {\n const geometries = [];\n let geometry;\n\n if (!$(/^(geometrycollection)/i)) return null;\n white();\n\n if (!$(/^(\\()/)) return null;\n while ((geometry = root())) {\n geometries.push(geometry);\n white();\n $(/^(,)/);\n white();\n }\n if (!$(/^(\\))/)) return null;\n\n return {\n type: 'GeometryCollection',\n geometries: geometries\n };\n }\n\n function root() {\n return (\n point() ||\n linestring() ||\n polygon() ||\n multipoint() ||\n multilinestring() ||\n multipolygon() ||\n geometrycollection()\n );\n }\n\n return crs(root());\n}\n"],"file":"parse-wkt.js"}
|