@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.
Files changed (64) hide show
  1. package/dist/bundle.d.ts +2 -0
  2. package/dist/bundle.d.ts.map +1 -0
  3. package/dist/bundle.js +596 -0
  4. package/dist/es5/bundle.js +1 -1
  5. package/dist/es5/bundle.js.map +1 -1
  6. package/dist/es5/index.js +5 -5
  7. package/dist/es5/lib/encode-wkt.js +2 -2
  8. package/dist/es5/lib/encode-wkt.js.map +1 -1
  9. package/dist/es5/lib/parse-wkb.js +78 -113
  10. package/dist/es5/lib/parse-wkb.js.map +1 -1
  11. package/dist/es5/lib/parse-wkt.js +24 -24
  12. package/dist/es5/lib/parse-wkt.js.map +1 -1
  13. package/dist/es5/lib/utils/version.js +1 -1
  14. package/dist/es5/lib/utils/version.js.map +1 -1
  15. package/dist/es5/wkb-loader.js +6 -39
  16. package/dist/es5/wkb-loader.js.map +1 -1
  17. package/dist/es5/wkt-loader.js +4 -37
  18. package/dist/es5/wkt-loader.js.map +1 -1
  19. package/dist/es5/wkt-writer.js +1 -1
  20. package/dist/es5/wkt-writer.js.map +1 -1
  21. package/dist/esm/lib/encode-wkt.js +8 -8
  22. package/dist/esm/lib/encode-wkt.js.map +1 -1
  23. package/dist/esm/lib/parse-wkb.js +5 -4
  24. package/dist/esm/lib/parse-wkb.js.map +1 -1
  25. package/dist/esm/lib/utils/version.js +1 -1
  26. package/dist/esm/lib/utils/version.js.map +1 -1
  27. package/dist/esm/wkb-loader.js.map +1 -1
  28. package/dist/index.d.ts +4 -0
  29. package/dist/index.d.ts.map +1 -0
  30. package/dist/index.js +11 -0
  31. package/dist/lib/encode-wkt.d.ts +8 -0
  32. package/dist/lib/encode-wkt.d.ts.map +1 -0
  33. package/dist/lib/encode-wkt.js +48 -0
  34. package/dist/lib/parse-wkb.d.ts +3 -0
  35. package/dist/lib/parse-wkb.d.ts.map +1 -0
  36. package/dist/lib/parse-wkb.js +236 -0
  37. package/dist/lib/parse-wkt.d.ts +8 -0
  38. package/dist/lib/parse-wkt.d.ts.map +1 -0
  39. package/dist/lib/parse-wkt.js +227 -0
  40. package/dist/lib/utils/version.d.ts +2 -0
  41. package/dist/lib/utils/version.d.ts.map +1 -0
  42. package/dist/lib/utils/version.js +7 -0
  43. package/dist/wkb-loader.d.ts +39 -0
  44. package/dist/wkb-loader.d.ts.map +1 -0
  45. package/dist/wkb-loader.js +34 -0
  46. package/dist/wkt-loader.d.ts +10 -0
  47. package/dist/wkt-loader.d.ts.map +1 -0
  48. package/dist/wkt-loader.js +33 -0
  49. package/dist/wkt-worker.js +380 -2
  50. package/dist/wkt-writer.d.ts +6 -0
  51. package/dist/wkt-writer.d.ts.map +1 -0
  52. package/dist/wkt-writer.js +23 -0
  53. package/dist/workers/wkb-worker.d.ts +2 -0
  54. package/dist/workers/wkb-worker.d.ts.map +1 -0
  55. package/dist/workers/wkb-worker.js +5 -0
  56. package/dist/workers/wkt-worker.d.ts +2 -0
  57. package/dist/workers/wkt-worker.d.ts.map +1 -0
  58. package/dist/workers/wkt-worker.js +5 -0
  59. package/package.json +7 -7
  60. package/src/lib/parse-wkb.ts +35 -19
  61. package/src/wkb-loader.ts +1 -1
  62. package/dist/dist.min.js +0 -2
  63. package/dist/dist.min.js.map +0 -1
  64. 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(buffer) {
26
- var view = new DataView(buffer);
27
- var offset = 0;
28
- var littleEndian = view.getUint8(offset) === 1;
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
- var geometryCode = view.getUint32(offset, littleEndian);
19
+ const geometryCode = view.getUint32(offset, littleEndian);
31
20
  offset += 4;
32
- var geometryType = geometryCode % 1000;
33
- var dimension = NUM_DIMENSIONS[(geometryCode - geometryType) / 1000];
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
- var point = parsePoint(view, offset, dimension, littleEndian);
27
+ const point = parsePoint(view, offset, dimension, littleEndian);
38
28
  return point.geometry;
39
29
 
40
30
  case 2:
41
- var line = parseLineString(view, offset, dimension, littleEndian);
31
+ const line = parseLineString(view, offset, dimension, littleEndian);
42
32
  return line.geometry;
43
33
 
44
34
  case 3:
45
- var polygon = parsePolygon(view, offset, dimension, littleEndian);
35
+ const polygon = parsePolygon(view, offset, dimension, littleEndian);
46
36
  return polygon.geometry;
47
37
 
48
38
  case 4:
49
- var multiPoint = parseMultiPoint(view, offset, dimension, littleEndian);
39
+ const multiPoint = parseMultiPoint(view, offset, dimension, littleEndian);
50
40
  multiPoint.type = 'Point';
51
41
  return multiPoint;
52
42
 
53
43
  case 5:
54
- var multiLine = parseMultiLineString(view, offset, dimension, littleEndian);
44
+ const multiLine = parseMultiLineString(view, offset, dimension, littleEndian);
55
45
  multiLine.type = 'LineString';
56
46
  return multiLine;
57
47
 
58
48
  case 6:
59
- var multiPolygon = parseMultiPolygon(view, offset, dimension, littleEndian);
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
- var positions = new Float64Array(dimension);
59
+ const positions = new Float64Array(dimension);
70
60
 
71
- for (var i = 0; i < dimension; i++) {
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: offset
74
+ offset
85
75
  };
86
76
  }
87
77
 
88
78
  function parseLineString(view, offset, dimension, littleEndian) {
89
- var nPoints = view.getUint32(offset, littleEndian);
79
+ const nPoints = view.getUint32(offset, littleEndian);
90
80
  offset += 4;
91
- var positions = new Float64Array(nPoints * dimension);
81
+ const positions = new Float64Array(nPoints * dimension);
92
82
 
93
- for (var i = 0; i < nPoints * dimension; i++) {
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
- var pathIndices = [0];
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: offset
106
+ offset
117
107
  };
118
108
  }
119
109
 
120
- var cumulativeSum = function cumulativeSum(sum) {
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
- var nRings = view.getUint32(offset, littleEndian);
113
+ const nRings = view.getUint32(offset, littleEndian);
128
114
  offset += 4;
129
- var rings = [];
115
+ const rings = [];
130
116
 
131
- for (var i = 0; i < nRings; i++) {
132
- var parsed = parseLineString(view, offset, dimension, littleEndian);
133
- var positions = parsed.geometry.positions;
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
- var concatenatedPositions = new Float64Array(concatTypedArrays(rings).buffer);
139
- var polygonIndices = [0];
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
- var primitivePolygonIndices = rings.map(function (l) {
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: offset
151
+ offset
166
152
  };
167
153
  }
168
154
 
169
155
  function parseMultiPoint(view, offset, dimension, littleEndian) {
170
- var nPoints = view.getUint32(offset, littleEndian);
156
+ const nPoints = view.getUint32(offset, littleEndian);
171
157
  offset += 4;
172
- var binaryPointGeometries = [];
158
+ const binaryPointGeometries = [];
173
159
 
174
- for (var i = 0; i < nPoints; i++) {
175
- var littleEndianPoint = view.getUint8(offset) === 1;
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
- var parsed = parsePoint(view, offset, dimension, littleEndianPoint);
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
- var nLines = view.getUint32(offset, littleEndian);
178
+ const nLines = view.getUint32(offset, littleEndian);
193
179
  offset += 4;
194
- var binaryLineGeometries = [];
180
+ const binaryLineGeometries = [];
195
181
 
196
- for (var i = 0; i < nLines; i++) {
197
- var littleEndianLine = view.getUint8(offset) === 1;
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
- var parsed = parseLineString(view, offset, dimension, littleEndianLine);
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
- var nPolygons = view.getUint32(offset, littleEndian);
200
+ const nPolygons = view.getUint32(offset, littleEndian);
215
201
  offset += 4;
216
- var binaryPolygonGeometries = [];
202
+ const binaryPolygonGeometries = [];
217
203
 
218
- for (var i = 0; i < nPolygons; i++) {
219
- var littleEndianPolygon = view.getUint8(offset) === 1;
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
- var parsed = parsePolygon(view, offset, dimension, littleEndianPolygon);
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
- var positions = binaryPointGeometries.map(function (geometry) {
237
- return geometry.positions.value;
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
- var lines = binaryLineGeometries.map(function (geometry) {
251
- return geometry.positions.value;
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
- var polygons = [];
273
- var primitivePolygons = [];
274
-
275
- var _iterator = _createForOfIteratorHelper(binaryPolygonGeometries),
276
- _step;
277
-
278
- try {
279
- for (_iterator.s(); !(_step = _iterator.n()).done;) {
280
- var binaryPolygon = _step.value;
281
- var positions = binaryPolygon.positions,
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
- var concatenatedPositions = new Float64Array(concatTypedArrays(polygons).buffer);
293
- var polygonIndices = polygons.map(function (p) {
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
- var primitivePolygonIndices = [0];
298
-
299
- for (var _i = 0, _primitivePolygons = primitivePolygons; _i < _primitivePolygons.length; _i++) {
300
- var primitivePolygon = _primitivePolygons[_i];
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
- var byteLength = 0;
291
+ let byteLength = 0;
327
292
 
328
- for (var i = 0; i < arrays.length; ++i) {
293
+ for (let i = 0; i < arrays.length; ++i) {
329
294
  byteLength += arrays[i].byteLength;
330
295
  }
331
296
 
332
- var buffer = new Uint8Array(byteLength);
333
- var byteOffset = 0;
297
+ const buffer = new Uint8Array(byteLength);
298
+ let byteOffset = 0;
334
299
 
335
- for (var _i2 = 0; _i2 < arrays.length; ++_i2) {
336
- var data = new Uint8Array(arrays[_i2].buffer);
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 (var j = 0; j < byteLength; ++j) {
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
- var numberRegexp = /[-+]?([0-9]*\.[0-9]+|[0-9]+)([eE][-+]?[0-9]+)?/;
8
- var tuples = new RegExp('^' + numberRegexp.source + '(\\s' + numberRegexp.source + '){1,}');
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
- var parts = input.split(';');
11
+ const parts = input.split(';');
12
12
 
13
- var _ = parts.pop();
13
+ let _ = parts.pop();
14
14
 
15
- var srid = (parts.shift() || '').split('=').pop();
16
- var i = 0;
15
+ const srid = (parts.shift() || '').split('=').pop();
16
+ let i = 0;
17
17
 
18
18
  function $(re) {
19
- var match = _.substring(i).match(re);
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
- var depth = 0;
47
- var rings = [];
48
- var stack = [rings];
49
- var pointer = rings;
50
- var elem;
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
- var list = [];
82
- var item;
83
- var pt;
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
- var c = coords();
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
- var newCoordsFormat = _.substring(_.indexOf('(') + 1, _.length - 1).replace(/\(/g, '').replace(/\)/g, '');
119
+ const newCoordsFormat = _.substring(_.indexOf('(') + 1, _.length - 1).replace(/\(/g, '').replace(/\)/g, '');
120
120
 
121
121
  _ = 'MULTIPOINT (' + newCoordsFormat + ')';
122
- var c = multicoords();
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
- var c = multicoords();
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
- var c = coords();
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
- var c = multicoords();
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
- var c = multicoords();
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
- var geometries = [];
180
- var geometry;
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":"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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"}
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"}