@loaders.gl/wkt 3.4.13 → 3.4.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
 
3
- var moduleExports = require('./index');
3
+ const moduleExports = require('./index');
4
4
  globalThis.loaders = globalThis.loaders || {};
5
5
  module.exports = Object.assign(globalThis.loaders, moduleExports);
6
6
  //# sourceMappingURL=bundle.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"bundle.js","names":["moduleExports","require","globalThis","loaders","module","exports","Object","assign"],"sources":["../../src/bundle.ts"],"sourcesContent":["// @ts-nocheck\nconst moduleExports = require('./index');\nglobalThis.loaders = globalThis.loaders || {};\nmodule.exports = Object.assign(globalThis.loaders, moduleExports);\n"],"mappings":";;AACA,IAAMA,aAAa,GAAGC,OAAO,CAAC,SAAS,CAAC;AACxCC,UAAU,CAACC,OAAO,GAAGD,UAAU,CAACC,OAAO,IAAI,CAAC,CAAC;AAC7CC,MAAM,CAACC,OAAO,GAAGC,MAAM,CAACC,MAAM,CAACL,UAAU,CAACC,OAAO,EAAEH,aAAa,CAAC"}
1
+ {"version":3,"file":"bundle.js","names":["moduleExports","require","globalThis","loaders","module","exports","Object","assign"],"sources":["../../src/bundle.ts"],"sourcesContent":["// @ts-nocheck\nconst moduleExports = require('./index');\nglobalThis.loaders = globalThis.loaders || {};\nmodule.exports = Object.assign(globalThis.loaders, moduleExports);\n"],"mappings":";;AACA,MAAMA,aAAa,GAAGC,OAAO,CAAC,SAAS,CAAC;AACxCC,UAAU,CAACC,OAAO,GAAGD,UAAU,CAACC,OAAO,IAAI,CAAC,CAAC;AAC7CC,MAAM,CAACC,OAAO,GAAGC,MAAM,CAACC,MAAM,CAACL,UAAU,CAACC,OAAO,EAAEH,aAAa,CAAC"}
package/dist/es5/index.js CHANGED
@@ -5,37 +5,37 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  Object.defineProperty(exports, "WKBLoader", {
7
7
  enumerable: true,
8
- get: function get() {
8
+ get: function () {
9
9
  return _wkbLoader.WKBLoader;
10
10
  }
11
11
  });
12
12
  Object.defineProperty(exports, "WKBWorkerLoader", {
13
13
  enumerable: true,
14
- get: function get() {
14
+ get: function () {
15
15
  return _wkbLoader.WKBWorkerLoader;
16
16
  }
17
17
  });
18
18
  Object.defineProperty(exports, "WKBWriter", {
19
19
  enumerable: true,
20
- get: function get() {
20
+ get: function () {
21
21
  return _wkbWriter.WKBWriter;
22
22
  }
23
23
  });
24
24
  Object.defineProperty(exports, "WKTLoader", {
25
25
  enumerable: true,
26
- get: function get() {
26
+ get: function () {
27
27
  return _wktLoader.WKTLoader;
28
28
  }
29
29
  });
30
30
  Object.defineProperty(exports, "WKTWorkerLoader", {
31
31
  enumerable: true,
32
- get: function get() {
32
+ get: function () {
33
33
  return _wktLoader.WKTWorkerLoader;
34
34
  }
35
35
  });
36
36
  Object.defineProperty(exports, "WKTWriter", {
37
37
  enumerable: true,
38
- get: function get() {
38
+ get: function () {
39
39
  return _wktWriter.WKTWriter;
40
40
  }
41
41
  });
@@ -5,11 +5,7 @@ Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
7
  exports.default = encodeWKB;
8
- var _toArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toArray"));
9
8
  var _binaryWriter = _interopRequireDefault(require("./utils/binary-writer"));
10
- 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; } } }; }
11
- 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); }
12
- 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; }
13
9
  var WKB = function (WKB) {
14
10
  WKB[WKB["Point"] = 1] = "Point";
15
11
  WKB[WKB["LineString"] = 2] = "LineString";
@@ -21,7 +17,7 @@ var WKB = function (WKB) {
21
17
  return WKB;
22
18
  }(WKB || {});
23
19
  function encodeWKB(geometry) {
24
- var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
20
+ let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
25
21
  if (geometry.type === 'Feature') {
26
22
  geometry = geometry.geometry;
27
23
  }
@@ -44,7 +40,7 @@ function encodeWKB(geometry) {
44
40
  case 'GeometryCollection':
45
41
  return encodeGeometryCollection(geometry, options);
46
42
  default:
47
- var exhaustiveCheck = geometry;
43
+ const exhaustiveCheck = geometry;
48
44
  throw new Error("Unhandled case: ".concat(exhaustiveCheck));
49
45
  }
50
46
  }
@@ -65,12 +61,12 @@ function getGeometrySize(geometry, options) {
65
61
  case 'GeometryCollection':
66
62
  return getGeometryCollectionSize(geometry, options);
67
63
  default:
68
- var exhaustiveCheck = geometry;
64
+ const exhaustiveCheck = geometry;
69
65
  throw new Error("Unhandled case: ".concat(exhaustiveCheck));
70
66
  }
71
67
  }
72
68
  function encodePoint(coordinates, options) {
73
- var writer = new _binaryWriter.default(getPointSize(options));
69
+ const writer = new _binaryWriter.default(getPointSize(options));
74
70
  writer.writeInt8(1);
75
71
  writeWkbType(writer, WKB.Point, options);
76
72
  if (typeof coordinates[0] === 'undefined' && typeof coordinates[1] === 'undefined') {
@@ -98,251 +94,141 @@ function writeCoordinate(writer, coordinate, options) {
98
94
  }
99
95
  }
100
96
  function getPointSize(options) {
101
- var coordinateSize = getCoordinateSize(options);
97
+ const coordinateSize = getCoordinateSize(options);
102
98
  return 1 + 4 + coordinateSize;
103
99
  }
104
100
  function encodeLineString(coordinates, options) {
105
- var size = getLineStringSize(coordinates, options);
106
- var writer = new _binaryWriter.default(size);
101
+ const size = getLineStringSize(coordinates, options);
102
+ const writer = new _binaryWriter.default(size);
107
103
  writer.writeInt8(1);
108
104
  writeWkbType(writer, WKB.LineString, options);
109
105
  writer.writeUInt32LE(coordinates.length);
110
- var _iterator = _createForOfIteratorHelper(coordinates),
111
- _step;
112
- try {
113
- for (_iterator.s(); !(_step = _iterator.n()).done;) {
114
- var coordinate = _step.value;
115
- writeCoordinate(writer, coordinate, options);
116
- }
117
- } catch (err) {
118
- _iterator.e(err);
119
- } finally {
120
- _iterator.f();
106
+ for (const coordinate of coordinates) {
107
+ writeCoordinate(writer, coordinate, options);
121
108
  }
122
109
  return writer.arrayBuffer;
123
110
  }
124
111
  function getLineStringSize(coordinates, options) {
125
- var coordinateSize = getCoordinateSize(options);
112
+ const coordinateSize = getCoordinateSize(options);
126
113
  return 1 + 4 + 4 + coordinates.length * coordinateSize;
127
114
  }
128
115
  function encodePolygon(coordinates, options) {
129
- var writer = new _binaryWriter.default(getPolygonSize(coordinates, options));
116
+ const writer = new _binaryWriter.default(getPolygonSize(coordinates, options));
130
117
  writer.writeInt8(1);
131
118
  writeWkbType(writer, WKB.Polygon, options);
132
- var _coordinates = (0, _toArray2.default)(coordinates),
133
- exteriorRing = _coordinates[0],
134
- interiorRings = _coordinates.slice(1);
119
+ const [exteriorRing, ...interiorRings] = coordinates;
135
120
  if (exteriorRing.length > 0) {
136
121
  writer.writeUInt32LE(1 + interiorRings.length);
137
122
  writer.writeUInt32LE(exteriorRing.length);
138
123
  } else {
139
124
  writer.writeUInt32LE(0);
140
125
  }
141
- var _iterator2 = _createForOfIteratorHelper(exteriorRing),
142
- _step2;
143
- try {
144
- for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
145
- var coordinate = _step2.value;
146
- writeCoordinate(writer, coordinate, options);
147
- }
148
- } catch (err) {
149
- _iterator2.e(err);
150
- } finally {
151
- _iterator2.f();
126
+ for (const coordinate of exteriorRing) {
127
+ writeCoordinate(writer, coordinate, options);
152
128
  }
153
- var _iterator3 = _createForOfIteratorHelper(interiorRings),
154
- _step3;
155
- try {
156
- for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
157
- var interiorRing = _step3.value;
158
- writer.writeUInt32LE(interiorRing.length);
159
- var _iterator4 = _createForOfIteratorHelper(interiorRing),
160
- _step4;
161
- try {
162
- for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
163
- var _coordinate = _step4.value;
164
- writeCoordinate(writer, _coordinate, options);
165
- }
166
- } catch (err) {
167
- _iterator4.e(err);
168
- } finally {
169
- _iterator4.f();
170
- }
129
+ for (const interiorRing of interiorRings) {
130
+ writer.writeUInt32LE(interiorRing.length);
131
+ for (const coordinate of interiorRing) {
132
+ writeCoordinate(writer, coordinate, options);
171
133
  }
172
- } catch (err) {
173
- _iterator3.e(err);
174
- } finally {
175
- _iterator3.f();
176
134
  }
177
135
  return writer.arrayBuffer;
178
136
  }
179
137
  function getPolygonSize(coordinates, options) {
180
- var coordinateSize = getCoordinateSize(options);
181
- var _coordinates2 = (0, _toArray2.default)(coordinates),
182
- exteriorRing = _coordinates2[0],
183
- interiorRings = _coordinates2.slice(1);
184
- var size = 1 + 4 + 4;
138
+ const coordinateSize = getCoordinateSize(options);
139
+ const [exteriorRing, ...interiorRings] = coordinates;
140
+ let size = 1 + 4 + 4;
185
141
  if (exteriorRing.length > 0) {
186
142
  size += 4 + exteriorRing.length * coordinateSize;
187
143
  }
188
- var _iterator5 = _createForOfIteratorHelper(interiorRings),
189
- _step5;
190
- try {
191
- for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
192
- var interiorRing = _step5.value;
193
- size += 4 + interiorRing.length * coordinateSize;
194
- }
195
- } catch (err) {
196
- _iterator5.e(err);
197
- } finally {
198
- _iterator5.f();
144
+ for (const interiorRing of interiorRings) {
145
+ size += 4 + interiorRing.length * coordinateSize;
199
146
  }
200
147
  return size;
201
148
  }
202
149
  function encodeMultiPoint(multiPoint, options) {
203
- var writer = new _binaryWriter.default(getMultiPointSize(multiPoint, options));
204
- var points = multiPoint.coordinates;
150
+ const writer = new _binaryWriter.default(getMultiPointSize(multiPoint, options));
151
+ const points = multiPoint.coordinates;
205
152
  writer.writeInt8(1);
206
153
  writeWkbType(writer, WKB.MultiPoint, options);
207
154
  writer.writeUInt32LE(points.length);
208
- var _iterator6 = _createForOfIteratorHelper(points),
209
- _step6;
210
- try {
211
- for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {
212
- var point = _step6.value;
213
- var arrayBuffer = encodePoint(point, options);
214
- writer.writeBuffer(arrayBuffer);
215
- }
216
- } catch (err) {
217
- _iterator6.e(err);
218
- } finally {
219
- _iterator6.f();
155
+ for (const point of points) {
156
+ const arrayBuffer = encodePoint(point, options);
157
+ writer.writeBuffer(arrayBuffer);
220
158
  }
221
159
  return writer.arrayBuffer;
222
160
  }
223
161
  function getMultiPointSize(multiPoint, options) {
224
- var coordinateSize = getCoordinateSize(options);
225
- var points = multiPoint.coordinates;
162
+ let coordinateSize = getCoordinateSize(options);
163
+ const points = multiPoint.coordinates;
226
164
  coordinateSize += 5;
227
165
  return 1 + 4 + 4 + points.length * coordinateSize;
228
166
  }
229
167
  function encodeMultiLineString(multiLineString, options) {
230
- var writer = new _binaryWriter.default(getMultiLineStringSize(multiLineString, options));
231
- var lineStrings = multiLineString.coordinates;
168
+ const writer = new _binaryWriter.default(getMultiLineStringSize(multiLineString, options));
169
+ const lineStrings = multiLineString.coordinates;
232
170
  writer.writeInt8(1);
233
171
  writeWkbType(writer, WKB.MultiLineString, options);
234
172
  writer.writeUInt32LE(lineStrings.length);
235
- var _iterator7 = _createForOfIteratorHelper(lineStrings),
236
- _step7;
237
- try {
238
- for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {
239
- var lineString = _step7.value;
240
- var encodedLineString = encodeLineString(lineString, options);
241
- writer.writeBuffer(encodedLineString);
242
- }
243
- } catch (err) {
244
- _iterator7.e(err);
245
- } finally {
246
- _iterator7.f();
173
+ for (const lineString of lineStrings) {
174
+ const encodedLineString = encodeLineString(lineString, options);
175
+ writer.writeBuffer(encodedLineString);
247
176
  }
248
177
  return writer.arrayBuffer;
249
178
  }
250
179
  function getMultiLineStringSize(multiLineString, options) {
251
- var size = 1 + 4 + 4;
252
- var lineStrings = multiLineString.coordinates;
253
- var _iterator8 = _createForOfIteratorHelper(lineStrings),
254
- _step8;
255
- try {
256
- for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {
257
- var lineString = _step8.value;
258
- size += getLineStringSize(lineString, options);
259
- }
260
- } catch (err) {
261
- _iterator8.e(err);
262
- } finally {
263
- _iterator8.f();
180
+ let size = 1 + 4 + 4;
181
+ const lineStrings = multiLineString.coordinates;
182
+ for (const lineString of lineStrings) {
183
+ size += getLineStringSize(lineString, options);
264
184
  }
265
185
  return size;
266
186
  }
267
187
  function encodeMultiPolygon(multiPolygon, options) {
268
- var writer = new _binaryWriter.default(getMultiPolygonSize(multiPolygon, options));
269
- var polygons = multiPolygon.coordinates;
188
+ const writer = new _binaryWriter.default(getMultiPolygonSize(multiPolygon, options));
189
+ const polygons = multiPolygon.coordinates;
270
190
  writer.writeInt8(1);
271
191
  writeWkbType(writer, WKB.MultiPolygon, options);
272
192
  writer.writeUInt32LE(polygons.length);
273
- var _iterator9 = _createForOfIteratorHelper(polygons),
274
- _step9;
275
- try {
276
- for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) {
277
- var polygon = _step9.value;
278
- var encodedPolygon = encodePolygon(polygon, options);
279
- writer.writeBuffer(encodedPolygon);
280
- }
281
- } catch (err) {
282
- _iterator9.e(err);
283
- } finally {
284
- _iterator9.f();
193
+ for (const polygon of polygons) {
194
+ const encodedPolygon = encodePolygon(polygon, options);
195
+ writer.writeBuffer(encodedPolygon);
285
196
  }
286
197
  return writer.arrayBuffer;
287
198
  }
288
199
  function getMultiPolygonSize(multiPolygon, options) {
289
- var size = 1 + 4 + 4;
290
- var polygons = multiPolygon.coordinates;
291
- var _iterator10 = _createForOfIteratorHelper(polygons),
292
- _step10;
293
- try {
294
- for (_iterator10.s(); !(_step10 = _iterator10.n()).done;) {
295
- var polygon = _step10.value;
296
- size += getPolygonSize(polygon, options);
297
- }
298
- } catch (err) {
299
- _iterator10.e(err);
300
- } finally {
301
- _iterator10.f();
200
+ let size = 1 + 4 + 4;
201
+ const polygons = multiPolygon.coordinates;
202
+ for (const polygon of polygons) {
203
+ size += getPolygonSize(polygon, options);
302
204
  }
303
205
  return size;
304
206
  }
305
207
  function encodeGeometryCollection(collection, options) {
306
- var writer = new _binaryWriter.default(getGeometryCollectionSize(collection, options));
208
+ const writer = new _binaryWriter.default(getGeometryCollectionSize(collection, options));
307
209
  writer.writeInt8(1);
308
210
  writeWkbType(writer, WKB.GeometryCollection, options);
309
211
  writer.writeUInt32LE(collection.geometries.length);
310
- var _iterator11 = _createForOfIteratorHelper(collection.geometries),
311
- _step11;
312
- try {
313
- for (_iterator11.s(); !(_step11 = _iterator11.n()).done;) {
314
- var geometry = _step11.value;
315
- var arrayBuffer = encodeWKB(geometry, options);
316
- writer.writeBuffer(arrayBuffer);
317
- }
318
- } catch (err) {
319
- _iterator11.e(err);
320
- } finally {
321
- _iterator11.f();
212
+ for (const geometry of collection.geometries) {
213
+ const arrayBuffer = encodeWKB(geometry, options);
214
+ writer.writeBuffer(arrayBuffer);
322
215
  }
323
216
  return writer.arrayBuffer;
324
217
  }
325
218
  function getGeometryCollectionSize(collection, options) {
326
- var size = 1 + 4 + 4;
327
- var _iterator12 = _createForOfIteratorHelper(collection.geometries),
328
- _step12;
329
- try {
330
- for (_iterator12.s(); !(_step12 = _iterator12.n()).done;) {
331
- var geometry = _step12.value;
332
- size += getGeometrySize(geometry, options);
333
- }
334
- } catch (err) {
335
- _iterator12.e(err);
336
- } finally {
337
- _iterator12.f();
219
+ let size = 1 + 4 + 4;
220
+ for (const geometry of collection.geometries) {
221
+ size += getGeometrySize(geometry, options);
338
222
  }
339
223
  return size;
340
224
  }
341
225
  function writeWkbType(writer, geometryType, options) {
342
- var hasZ = options.hasZ,
343
- hasM = options.hasM,
344
- srid = options.srid;
345
- var dimensionType = 0;
226
+ const {
227
+ hasZ,
228
+ hasM,
229
+ srid
230
+ } = options;
231
+ let dimensionType = 0;
346
232
  if (!srid) {
347
233
  if (hasZ && hasM) {
348
234
  dimensionType += 3000;
@@ -362,7 +248,7 @@ function writeWkbType(writer, geometryType, options) {
362
248
  writer.writeUInt32LE(dimensionType + geometryType >>> 0);
363
249
  }
364
250
  function getCoordinateSize(options) {
365
- var coordinateSize = 16;
251
+ let coordinateSize = 16;
366
252
  if (options.hasZ) {
367
253
  coordinateSize += 8;
368
254
  }
@@ -1 +1 @@
1
- {"version":3,"file":"encode-wkb.js","names":["_binaryWriter","_interopRequireDefault","require","_createForOfIteratorHelper","o","allowArrayLike","it","Symbol","iterator","Array","isArray","_unsupportedIterableToArray","length","i","F","s","n","done","value","e","_e","f","TypeError","normalCompletion","didErr","err","call","step","next","_e2","return","minLen","_arrayLikeToArray","Object","prototype","toString","slice","constructor","name","from","test","arr","len","arr2","WKB","encodeWKB","geometry","options","arguments","undefined","type","wkb","encodePoint","coordinates","encodeLineString","encodePolygon","encodeMultiPoint","encodeMultiPolygon","encodeMultiLineString","encodeGeometryCollection","exhaustiveCheck","Error","concat","getGeometrySize","getPointSize","getLineStringSize","getPolygonSize","getMultiPointSize","getMultiPolygonSize","getMultiLineStringSize","getGeometryCollectionSize","writer","BinaryWriter","writeInt8","writeWkbType","Point","writeDoubleLE","NaN","hasZ","hasM","writeCoordinate","arrayBuffer","coordinate","coordinateSize","getCoordinateSize","size","LineString","writeUInt32LE","_iterator","_step","Polygon","_coordinates","_toArray2","default","exteriorRing","interiorRings","_iterator2","_step2","_iterator3","_step3","interiorRing","_iterator4","_step4","_coordinates2","_iterator5","_step5","multiPoint","points","MultiPoint","_iterator6","_step6","point","writeBuffer","multiLineString","lineStrings","MultiLineString","_iterator7","_step7","lineString","encodedLineString","_iterator8","_step8","multiPolygon","polygons","MultiPolygon","_iterator9","_step9","polygon","encodedPolygon","_iterator10","_step10","collection","GeometryCollection","geometries","_iterator11","_step11","_iterator12","_step12","geometryType","srid","dimensionType"],"sources":["../../../src/lib/encode-wkb.ts"],"sourcesContent":["// loaders.gl, MIT license\n// Forked from https://github.com/cschwarz/wkx under MIT license, Copyright (c) 2013 Christian Schwarz\n// Reference: https://www.ogc.org/standards/sfa\n\nimport type {\n Feature,\n Geometry,\n Point,\n MultiPoint,\n LineString,\n MultiLineString,\n Polygon,\n MultiPolygon,\n GeometryCollection\n} from '@loaders.gl/schema';\n\nimport BinaryWriter from './utils/binary-writer';\n\n/**\n * Integer code for geometry type\n * Reference: https://en.wikipedia.org/wiki/Well-known_text_representation_of_geometry#Well-known_binary\n */\nenum WKB {\n Point = 1,\n LineString = 2,\n Polygon = 3,\n MultiPoint = 4,\n MultiLineString = 5,\n MultiPolygon = 6,\n GeometryCollection = 7\n}\n\n/**\n * Options for encodeWKB\n */\ninterface WKBOptions {\n /** Does the GeoJSON input have Z values? */\n hasZ?: boolean;\n\n /** Does the GeoJSON input have M values? */\n hasM?: boolean;\n\n /** Spatial reference for input GeoJSON */\n srid?: any;\n}\n\n/**\n * Encodes a GeoJSON object into WKB\n * @param geojson A GeoJSON Feature or Geometry\n * @returns string\n */\nexport default function encodeWKB(\n geometry: Geometry | Feature,\n options: WKBOptions | {wkb: WKBOptions} = {}\n): ArrayBuffer {\n if (geometry.type === 'Feature') {\n geometry = geometry.geometry;\n }\n\n // Options should be wrapped in a `wkb` key, but we allow top-level options here for backwards\n // compatibility\n if ('wkb' in options) {\n options = options.wkb;\n }\n\n switch (geometry.type) {\n case 'Point':\n return encodePoint(geometry.coordinates, options);\n case 'LineString':\n return encodeLineString(geometry.coordinates, options);\n case 'Polygon':\n return encodePolygon(geometry.coordinates, options);\n case 'MultiPoint':\n return encodeMultiPoint(geometry, options);\n case 'MultiPolygon':\n return encodeMultiPolygon(geometry, options);\n case 'MultiLineString':\n return encodeMultiLineString(geometry, options);\n case 'GeometryCollection':\n return encodeGeometryCollection(geometry, options);\n default:\n const exhaustiveCheck: never = geometry;\n throw new Error(`Unhandled case: ${exhaustiveCheck}`);\n }\n}\n\n/** Calculate the binary size (in the WKB encoding) of a specific GeoJSON geometry */\nfunction getGeometrySize(geometry: Geometry, options: WKBOptions): number {\n switch (geometry.type) {\n case 'Point':\n return getPointSize(options);\n case 'LineString':\n return getLineStringSize(geometry.coordinates, options);\n case 'Polygon':\n return getPolygonSize(geometry.coordinates, options);\n case 'MultiPoint':\n return getMultiPointSize(geometry, options);\n case 'MultiPolygon':\n return getMultiPolygonSize(geometry, options);\n case 'MultiLineString':\n return getMultiLineStringSize(geometry, options);\n case 'GeometryCollection':\n return getGeometryCollectionSize(geometry, options);\n default:\n const exhaustiveCheck: never = geometry;\n throw new Error(`Unhandled case: ${exhaustiveCheck}`);\n }\n}\n\n/** Encode Point geometry as WKB ArrayBuffer */\nfunction encodePoint(coordinates: Point['coordinates'], options: WKBOptions): ArrayBuffer {\n const writer = new BinaryWriter(getPointSize(options));\n\n writer.writeInt8(1);\n writeWkbType(writer, WKB.Point, options);\n\n // I believe this special case is to handle writing Point(NaN, NaN) correctly\n if (typeof coordinates[0] === 'undefined' && typeof coordinates[1] === 'undefined') {\n writer.writeDoubleLE(NaN);\n writer.writeDoubleLE(NaN);\n\n if (options.hasZ) {\n writer.writeDoubleLE(NaN);\n }\n if (options.hasM) {\n writer.writeDoubleLE(NaN);\n }\n } else {\n writeCoordinate(writer, coordinates, options);\n }\n\n return writer.arrayBuffer;\n}\n\n/** Write coordinate to buffer */\nfunction writeCoordinate(\n writer: BinaryWriter,\n coordinate: Point['coordinates'],\n options: WKBOptions\n): void {\n writer.writeDoubleLE(coordinate[0]);\n writer.writeDoubleLE(coordinate[1]);\n\n if (options.hasZ) {\n writer.writeDoubleLE(coordinate[2]);\n }\n if (options.hasM) {\n writer.writeDoubleLE(coordinate[3]);\n }\n}\n\n/** Get encoded size of Point geometry */\nfunction getPointSize(options: WKBOptions): number {\n const coordinateSize = getCoordinateSize(options);\n return 1 + 4 + coordinateSize;\n}\n\n/** Encode LineString geometry as WKB ArrayBuffer */\nfunction encodeLineString(\n coordinates: LineString['coordinates'],\n options: WKBOptions\n): ArrayBuffer {\n const size = getLineStringSize(coordinates, options);\n\n const writer = new BinaryWriter(size);\n\n writer.writeInt8(1);\n\n writeWkbType(writer, WKB.LineString, options);\n writer.writeUInt32LE(coordinates.length);\n\n for (const coordinate of coordinates) {\n writeCoordinate(writer, coordinate, options);\n }\n\n return writer.arrayBuffer;\n}\n\n/** Get encoded size of LineString geometry */\nfunction getLineStringSize(coordinates: LineString['coordinates'], options: WKBOptions): number {\n const coordinateSize = getCoordinateSize(options);\n\n return 1 + 4 + 4 + coordinates.length * coordinateSize;\n}\n\n/** Encode Polygon geometry as WKB ArrayBuffer */\nfunction encodePolygon(coordinates: Polygon['coordinates'], options: WKBOptions): ArrayBuffer {\n const writer = new BinaryWriter(getPolygonSize(coordinates, options));\n\n writer.writeInt8(1);\n\n writeWkbType(writer, WKB.Polygon, options);\n const [exteriorRing, ...interiorRings] = coordinates;\n\n if (exteriorRing.length > 0) {\n writer.writeUInt32LE(1 + interiorRings.length);\n writer.writeUInt32LE(exteriorRing.length);\n } else {\n writer.writeUInt32LE(0);\n }\n\n for (const coordinate of exteriorRing) {\n writeCoordinate(writer, coordinate, options);\n }\n\n for (const interiorRing of interiorRings) {\n writer.writeUInt32LE(interiorRing.length);\n\n for (const coordinate of interiorRing) {\n writeCoordinate(writer, coordinate, options);\n }\n }\n\n return writer.arrayBuffer;\n}\n\n/** Get encoded size of Polygon geometry */\nfunction getPolygonSize(coordinates: Polygon['coordinates'], options: WKBOptions): number {\n const coordinateSize = getCoordinateSize(options);\n const [exteriorRing, ...interiorRings] = coordinates;\n\n let size = 1 + 4 + 4;\n\n if (exteriorRing.length > 0) {\n size += 4 + exteriorRing.length * coordinateSize;\n }\n\n for (const interiorRing of interiorRings) {\n size += 4 + interiorRing.length * coordinateSize;\n }\n\n return size;\n}\n\n/** Encode MultiPoint geometry as WKB ArrayBufer */\nfunction encodeMultiPoint(multiPoint: MultiPoint, options: WKBOptions) {\n const writer = new BinaryWriter(getMultiPointSize(multiPoint, options));\n const points = multiPoint.coordinates;\n\n writer.writeInt8(1);\n\n writeWkbType(writer, WKB.MultiPoint, options);\n writer.writeUInt32LE(points.length);\n\n for (const point of points) {\n // TODO: add srid to this options object? {srid: multiPoint.srid}\n const arrayBuffer = encodePoint(point, options);\n writer.writeBuffer(arrayBuffer);\n }\n\n return writer.arrayBuffer;\n}\n\n/** Get encoded size of MultiPoint geometry */\nfunction getMultiPointSize(multiPoint: MultiPoint, options: WKBOptions) {\n let coordinateSize = getCoordinateSize(options);\n const points = multiPoint.coordinates;\n\n // This is because each point has a 5-byte header?\n coordinateSize += 5;\n\n return 1 + 4 + 4 + points.length * coordinateSize;\n}\n\n/** Encode MultiLineString geometry as WKB ArrayBufer */\nfunction encodeMultiLineString(multiLineString: MultiLineString, options: WKBOptions) {\n const writer = new BinaryWriter(getMultiLineStringSize(multiLineString, options));\n const lineStrings = multiLineString.coordinates;\n\n writer.writeInt8(1);\n\n writeWkbType(writer, WKB.MultiLineString, options);\n writer.writeUInt32LE(lineStrings.length);\n\n for (const lineString of lineStrings) {\n // TODO: Handle srid?\n const encodedLineString = encodeLineString(lineString, options);\n writer.writeBuffer(encodedLineString);\n }\n\n return writer.arrayBuffer;\n}\n\n/** Get encoded size of MultiLineString geometry */\nfunction getMultiLineStringSize(multiLineString: MultiLineString, options: WKBOptions): number {\n let size = 1 + 4 + 4;\n const lineStrings = multiLineString.coordinates;\n\n for (const lineString of lineStrings) {\n size += getLineStringSize(lineString, options);\n }\n\n return size;\n}\n\nfunction encodeMultiPolygon(multiPolygon: MultiPolygon, options: WKBOptions): ArrayBuffer {\n const writer = new BinaryWriter(getMultiPolygonSize(multiPolygon, options));\n const polygons = multiPolygon.coordinates;\n\n writer.writeInt8(1);\n\n writeWkbType(writer, WKB.MultiPolygon, options);\n writer.writeUInt32LE(polygons.length);\n\n for (const polygon of polygons) {\n const encodedPolygon = encodePolygon(polygon, options);\n writer.writeBuffer(encodedPolygon);\n }\n\n return writer.arrayBuffer;\n}\n\nfunction getMultiPolygonSize(multiPolygon: MultiPolygon, options: WKBOptions): number {\n let size = 1 + 4 + 4;\n const polygons = multiPolygon.coordinates;\n\n for (const polygon of polygons) {\n size += getPolygonSize(polygon, options);\n }\n\n return size;\n}\n\nfunction encodeGeometryCollection(\n collection: GeometryCollection,\n options: WKBOptions\n): ArrayBuffer {\n const writer = new BinaryWriter(getGeometryCollectionSize(collection, options));\n\n writer.writeInt8(1);\n\n writeWkbType(writer, WKB.GeometryCollection, options);\n writer.writeUInt32LE(collection.geometries.length);\n\n for (const geometry of collection.geometries) {\n // TODO: handle srid? {srid: collection.srid}\n const arrayBuffer = encodeWKB(geometry, options);\n writer.writeBuffer(arrayBuffer);\n }\n\n return writer.arrayBuffer;\n}\n\nfunction getGeometryCollectionSize(collection: GeometryCollection, options: WKBOptions): number {\n let size = 1 + 4 + 4;\n\n for (const geometry of collection.geometries) {\n size += getGeometrySize(geometry, options);\n }\n\n return size;\n}\n\n// HELPERS\n\n/**\n * Construct and write WKB integer code\n * Reference: https://en.wikipedia.org/wiki/Well-known_text_representation_of_geometry#Well-known_binary\n */\nfunction writeWkbType(writer: BinaryWriter, geometryType: number, options: WKBOptions): void {\n const {hasZ, hasM, srid} = options;\n\n let dimensionType = 0;\n\n if (!srid) {\n if (hasZ && hasM) {\n dimensionType += 3000;\n } else if (hasZ) {\n dimensionType += 1000;\n } else if (hasM) {\n dimensionType += 2000;\n }\n } else {\n if (hasZ) {\n dimensionType |= 0x80000000;\n }\n if (hasM) {\n dimensionType |= 0x40000000;\n }\n }\n\n writer.writeUInt32LE((dimensionType + geometryType) >>> 0);\n}\n\n/** Get coordinate size given Z/M dimensions */\nfunction getCoordinateSize(options: WKBOptions): number {\n let coordinateSize = 16;\n\n if (options.hasZ) {\n coordinateSize += 8;\n }\n if (options.hasM) {\n coordinateSize += 8;\n }\n\n return coordinateSize;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"encode-wkb.js","names":["_binaryWriter","_interopRequireDefault","require","WKB","encodeWKB","geometry","options","arguments","length","undefined","type","wkb","encodePoint","coordinates","encodeLineString","encodePolygon","encodeMultiPoint","encodeMultiPolygon","encodeMultiLineString","encodeGeometryCollection","exhaustiveCheck","Error","concat","getGeometrySize","getPointSize","getLineStringSize","getPolygonSize","getMultiPointSize","getMultiPolygonSize","getMultiLineStringSize","getGeometryCollectionSize","writer","BinaryWriter","writeInt8","writeWkbType","Point","writeDoubleLE","NaN","hasZ","hasM","writeCoordinate","arrayBuffer","coordinate","coordinateSize","getCoordinateSize","size","LineString","writeUInt32LE","Polygon","exteriorRing","interiorRings","interiorRing","multiPoint","points","MultiPoint","point","writeBuffer","multiLineString","lineStrings","MultiLineString","lineString","encodedLineString","multiPolygon","polygons","MultiPolygon","polygon","encodedPolygon","collection","GeometryCollection","geometries","geometryType","srid","dimensionType"],"sources":["../../../src/lib/encode-wkb.ts"],"sourcesContent":["// loaders.gl, MIT license\n// Forked from https://github.com/cschwarz/wkx under MIT license, Copyright (c) 2013 Christian Schwarz\n// Reference: https://www.ogc.org/standards/sfa\n\nimport type {\n Feature,\n Geometry,\n Point,\n MultiPoint,\n LineString,\n MultiLineString,\n Polygon,\n MultiPolygon,\n GeometryCollection\n} from '@loaders.gl/schema';\n\nimport BinaryWriter from './utils/binary-writer';\n\n/**\n * Integer code for geometry type\n * Reference: https://en.wikipedia.org/wiki/Well-known_text_representation_of_geometry#Well-known_binary\n */\nenum WKB {\n Point = 1,\n LineString = 2,\n Polygon = 3,\n MultiPoint = 4,\n MultiLineString = 5,\n MultiPolygon = 6,\n GeometryCollection = 7\n}\n\n/**\n * Options for encodeWKB\n */\ninterface WKBOptions {\n /** Does the GeoJSON input have Z values? */\n hasZ?: boolean;\n\n /** Does the GeoJSON input have M values? */\n hasM?: boolean;\n\n /** Spatial reference for input GeoJSON */\n srid?: any;\n}\n\n/**\n * Encodes a GeoJSON object into WKB\n * @param geojson A GeoJSON Feature or Geometry\n * @returns string\n */\nexport default function encodeWKB(\n geometry: Geometry | Feature,\n options: WKBOptions | {wkb: WKBOptions} = {}\n): ArrayBuffer {\n if (geometry.type === 'Feature') {\n geometry = geometry.geometry;\n }\n\n // Options should be wrapped in a `wkb` key, but we allow top-level options here for backwards\n // compatibility\n if ('wkb' in options) {\n options = options.wkb;\n }\n\n switch (geometry.type) {\n case 'Point':\n return encodePoint(geometry.coordinates, options);\n case 'LineString':\n return encodeLineString(geometry.coordinates, options);\n case 'Polygon':\n return encodePolygon(geometry.coordinates, options);\n case 'MultiPoint':\n return encodeMultiPoint(geometry, options);\n case 'MultiPolygon':\n return encodeMultiPolygon(geometry, options);\n case 'MultiLineString':\n return encodeMultiLineString(geometry, options);\n case 'GeometryCollection':\n return encodeGeometryCollection(geometry, options);\n default:\n const exhaustiveCheck: never = geometry;\n throw new Error(`Unhandled case: ${exhaustiveCheck}`);\n }\n}\n\n/** Calculate the binary size (in the WKB encoding) of a specific GeoJSON geometry */\nfunction getGeometrySize(geometry: Geometry, options: WKBOptions): number {\n switch (geometry.type) {\n case 'Point':\n return getPointSize(options);\n case 'LineString':\n return getLineStringSize(geometry.coordinates, options);\n case 'Polygon':\n return getPolygonSize(geometry.coordinates, options);\n case 'MultiPoint':\n return getMultiPointSize(geometry, options);\n case 'MultiPolygon':\n return getMultiPolygonSize(geometry, options);\n case 'MultiLineString':\n return getMultiLineStringSize(geometry, options);\n case 'GeometryCollection':\n return getGeometryCollectionSize(geometry, options);\n default:\n const exhaustiveCheck: never = geometry;\n throw new Error(`Unhandled case: ${exhaustiveCheck}`);\n }\n}\n\n/** Encode Point geometry as WKB ArrayBuffer */\nfunction encodePoint(coordinates: Point['coordinates'], options: WKBOptions): ArrayBuffer {\n const writer = new BinaryWriter(getPointSize(options));\n\n writer.writeInt8(1);\n writeWkbType(writer, WKB.Point, options);\n\n // I believe this special case is to handle writing Point(NaN, NaN) correctly\n if (typeof coordinates[0] === 'undefined' && typeof coordinates[1] === 'undefined') {\n writer.writeDoubleLE(NaN);\n writer.writeDoubleLE(NaN);\n\n if (options.hasZ) {\n writer.writeDoubleLE(NaN);\n }\n if (options.hasM) {\n writer.writeDoubleLE(NaN);\n }\n } else {\n writeCoordinate(writer, coordinates, options);\n }\n\n return writer.arrayBuffer;\n}\n\n/** Write coordinate to buffer */\nfunction writeCoordinate(\n writer: BinaryWriter,\n coordinate: Point['coordinates'],\n options: WKBOptions\n): void {\n writer.writeDoubleLE(coordinate[0]);\n writer.writeDoubleLE(coordinate[1]);\n\n if (options.hasZ) {\n writer.writeDoubleLE(coordinate[2]);\n }\n if (options.hasM) {\n writer.writeDoubleLE(coordinate[3]);\n }\n}\n\n/** Get encoded size of Point geometry */\nfunction getPointSize(options: WKBOptions): number {\n const coordinateSize = getCoordinateSize(options);\n return 1 + 4 + coordinateSize;\n}\n\n/** Encode LineString geometry as WKB ArrayBuffer */\nfunction encodeLineString(\n coordinates: LineString['coordinates'],\n options: WKBOptions\n): ArrayBuffer {\n const size = getLineStringSize(coordinates, options);\n\n const writer = new BinaryWriter(size);\n\n writer.writeInt8(1);\n\n writeWkbType(writer, WKB.LineString, options);\n writer.writeUInt32LE(coordinates.length);\n\n for (const coordinate of coordinates) {\n writeCoordinate(writer, coordinate, options);\n }\n\n return writer.arrayBuffer;\n}\n\n/** Get encoded size of LineString geometry */\nfunction getLineStringSize(coordinates: LineString['coordinates'], options: WKBOptions): number {\n const coordinateSize = getCoordinateSize(options);\n\n return 1 + 4 + 4 + coordinates.length * coordinateSize;\n}\n\n/** Encode Polygon geometry as WKB ArrayBuffer */\nfunction encodePolygon(coordinates: Polygon['coordinates'], options: WKBOptions): ArrayBuffer {\n const writer = new BinaryWriter(getPolygonSize(coordinates, options));\n\n writer.writeInt8(1);\n\n writeWkbType(writer, WKB.Polygon, options);\n const [exteriorRing, ...interiorRings] = coordinates;\n\n if (exteriorRing.length > 0) {\n writer.writeUInt32LE(1 + interiorRings.length);\n writer.writeUInt32LE(exteriorRing.length);\n } else {\n writer.writeUInt32LE(0);\n }\n\n for (const coordinate of exteriorRing) {\n writeCoordinate(writer, coordinate, options);\n }\n\n for (const interiorRing of interiorRings) {\n writer.writeUInt32LE(interiorRing.length);\n\n for (const coordinate of interiorRing) {\n writeCoordinate(writer, coordinate, options);\n }\n }\n\n return writer.arrayBuffer;\n}\n\n/** Get encoded size of Polygon geometry */\nfunction getPolygonSize(coordinates: Polygon['coordinates'], options: WKBOptions): number {\n const coordinateSize = getCoordinateSize(options);\n const [exteriorRing, ...interiorRings] = coordinates;\n\n let size = 1 + 4 + 4;\n\n if (exteriorRing.length > 0) {\n size += 4 + exteriorRing.length * coordinateSize;\n }\n\n for (const interiorRing of interiorRings) {\n size += 4 + interiorRing.length * coordinateSize;\n }\n\n return size;\n}\n\n/** Encode MultiPoint geometry as WKB ArrayBufer */\nfunction encodeMultiPoint(multiPoint: MultiPoint, options: WKBOptions) {\n const writer = new BinaryWriter(getMultiPointSize(multiPoint, options));\n const points = multiPoint.coordinates;\n\n writer.writeInt8(1);\n\n writeWkbType(writer, WKB.MultiPoint, options);\n writer.writeUInt32LE(points.length);\n\n for (const point of points) {\n // TODO: add srid to this options object? {srid: multiPoint.srid}\n const arrayBuffer = encodePoint(point, options);\n writer.writeBuffer(arrayBuffer);\n }\n\n return writer.arrayBuffer;\n}\n\n/** Get encoded size of MultiPoint geometry */\nfunction getMultiPointSize(multiPoint: MultiPoint, options: WKBOptions) {\n let coordinateSize = getCoordinateSize(options);\n const points = multiPoint.coordinates;\n\n // This is because each point has a 5-byte header?\n coordinateSize += 5;\n\n return 1 + 4 + 4 + points.length * coordinateSize;\n}\n\n/** Encode MultiLineString geometry as WKB ArrayBufer */\nfunction encodeMultiLineString(multiLineString: MultiLineString, options: WKBOptions) {\n const writer = new BinaryWriter(getMultiLineStringSize(multiLineString, options));\n const lineStrings = multiLineString.coordinates;\n\n writer.writeInt8(1);\n\n writeWkbType(writer, WKB.MultiLineString, options);\n writer.writeUInt32LE(lineStrings.length);\n\n for (const lineString of lineStrings) {\n // TODO: Handle srid?\n const encodedLineString = encodeLineString(lineString, options);\n writer.writeBuffer(encodedLineString);\n }\n\n return writer.arrayBuffer;\n}\n\n/** Get encoded size of MultiLineString geometry */\nfunction getMultiLineStringSize(multiLineString: MultiLineString, options: WKBOptions): number {\n let size = 1 + 4 + 4;\n const lineStrings = multiLineString.coordinates;\n\n for (const lineString of lineStrings) {\n size += getLineStringSize(lineString, options);\n }\n\n return size;\n}\n\nfunction encodeMultiPolygon(multiPolygon: MultiPolygon, options: WKBOptions): ArrayBuffer {\n const writer = new BinaryWriter(getMultiPolygonSize(multiPolygon, options));\n const polygons = multiPolygon.coordinates;\n\n writer.writeInt8(1);\n\n writeWkbType(writer, WKB.MultiPolygon, options);\n writer.writeUInt32LE(polygons.length);\n\n for (const polygon of polygons) {\n const encodedPolygon = encodePolygon(polygon, options);\n writer.writeBuffer(encodedPolygon);\n }\n\n return writer.arrayBuffer;\n}\n\nfunction getMultiPolygonSize(multiPolygon: MultiPolygon, options: WKBOptions): number {\n let size = 1 + 4 + 4;\n const polygons = multiPolygon.coordinates;\n\n for (const polygon of polygons) {\n size += getPolygonSize(polygon, options);\n }\n\n return size;\n}\n\nfunction encodeGeometryCollection(\n collection: GeometryCollection,\n options: WKBOptions\n): ArrayBuffer {\n const writer = new BinaryWriter(getGeometryCollectionSize(collection, options));\n\n writer.writeInt8(1);\n\n writeWkbType(writer, WKB.GeometryCollection, options);\n writer.writeUInt32LE(collection.geometries.length);\n\n for (const geometry of collection.geometries) {\n // TODO: handle srid? {srid: collection.srid}\n const arrayBuffer = encodeWKB(geometry, options);\n writer.writeBuffer(arrayBuffer);\n }\n\n return writer.arrayBuffer;\n}\n\nfunction getGeometryCollectionSize(collection: GeometryCollection, options: WKBOptions): number {\n let size = 1 + 4 + 4;\n\n for (const geometry of collection.geometries) {\n size += getGeometrySize(geometry, options);\n }\n\n return size;\n}\n\n// HELPERS\n\n/**\n * Construct and write WKB integer code\n * Reference: https://en.wikipedia.org/wiki/Well-known_text_representation_of_geometry#Well-known_binary\n */\nfunction writeWkbType(writer: BinaryWriter, geometryType: number, options: WKBOptions): void {\n const {hasZ, hasM, srid} = options;\n\n let dimensionType = 0;\n\n if (!srid) {\n if (hasZ && hasM) {\n dimensionType += 3000;\n } else if (hasZ) {\n dimensionType += 1000;\n } else if (hasM) {\n dimensionType += 2000;\n }\n } else {\n if (hasZ) {\n dimensionType |= 0x80000000;\n }\n if (hasM) {\n dimensionType |= 0x40000000;\n }\n }\n\n writer.writeUInt32LE((dimensionType + geometryType) >>> 0);\n}\n\n/** Get coordinate size given Z/M dimensions */\nfunction getCoordinateSize(options: WKBOptions): number {\n let coordinateSize = 16;\n\n if (options.hasZ) {\n coordinateSize += 8;\n }\n if (options.hasM) {\n coordinateSize += 8;\n }\n\n return coordinateSize;\n}\n"],"mappings":"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"}