@loaders.gl/wkt 3.3.0-alpha.1 → 3.3.0-alpha.11

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 (55) hide show
  1. package/dist/es5/bundle.js +0 -1
  2. package/dist/es5/bundle.js.map +1 -1
  3. package/dist/es5/index.js +6 -10
  4. package/dist/es5/index.js.map +1 -1
  5. package/dist/es5/lib/encode-wkb.js +19 -96
  6. package/dist/es5/lib/encode-wkb.js.map +1 -1
  7. package/dist/es5/lib/encode-wkt.js +0 -13
  8. package/dist/es5/lib/encode-wkt.js.map +1 -1
  9. package/dist/es5/lib/parse-wkb.js +6 -51
  10. package/dist/es5/lib/parse-wkb.js.map +1 -1
  11. package/dist/es5/lib/parse-wkt.js +2 -28
  12. package/dist/es5/lib/parse-wkt.js.map +1 -1
  13. package/dist/es5/lib/utils/binary-writer.js +9 -27
  14. package/dist/es5/lib/utils/binary-writer.js.map +1 -1
  15. package/dist/es5/lib/utils/version.js +1 -1
  16. package/dist/es5/lib/utils/version.js.map +1 -1
  17. package/dist/es5/wkb-loader.js +4 -17
  18. package/dist/es5/wkb-loader.js.map +1 -1
  19. package/dist/es5/wkb-writer.js +0 -4
  20. package/dist/es5/wkb-writer.js.map +1 -1
  21. package/dist/es5/wkt-loader.js +4 -17
  22. package/dist/es5/wkt-loader.js.map +1 -1
  23. package/dist/es5/wkt-writer.js +0 -4
  24. package/dist/es5/wkt-writer.js.map +1 -1
  25. package/dist/es5/workers/wkb-worker.js +0 -2
  26. package/dist/es5/workers/wkb-worker.js.map +1 -1
  27. package/dist/es5/workers/wkt-worker.js +0 -2
  28. package/dist/es5/workers/wkt-worker.js.map +1 -1
  29. package/dist/esm/bundle.js +1 -1
  30. package/dist/esm/bundle.js.map +1 -1
  31. package/dist/esm/index.js.map +1 -1
  32. package/dist/esm/lib/encode-wkb.js +4 -56
  33. package/dist/esm/lib/encode-wkb.js.map +1 -1
  34. package/dist/esm/lib/encode-wkt.js +2 -13
  35. package/dist/esm/lib/encode-wkt.js.map +1 -1
  36. package/dist/esm/lib/parse-wkb.js +5 -42
  37. package/dist/esm/lib/parse-wkb.js.map +1 -1
  38. package/dist/esm/lib/parse-wkt.js +4 -28
  39. package/dist/esm/lib/parse-wkt.js.map +1 -1
  40. package/dist/esm/lib/utils/binary-writer.js +1 -36
  41. package/dist/esm/lib/utils/binary-writer.js.map +1 -1
  42. package/dist/esm/lib/utils/version.js +2 -1
  43. package/dist/esm/lib/utils/version.js.map +1 -1
  44. package/dist/esm/wkb-loader.js +4 -1
  45. package/dist/esm/wkb-loader.js.map +1 -1
  46. package/dist/esm/wkb-writer.js +1 -0
  47. package/dist/esm/wkb-writer.js.map +1 -1
  48. package/dist/esm/wkt-loader.js +4 -1
  49. package/dist/esm/wkt-loader.js.map +1 -1
  50. package/dist/esm/wkt-writer.js +1 -0
  51. package/dist/esm/wkt-writer.js.map +1 -1
  52. package/dist/esm/workers/wkb-worker.js.map +1 -1
  53. package/dist/esm/workers/wkt-worker.js.map +1 -1
  54. package/dist/wkt-worker.js +1 -1
  55. package/package.json +4 -4
@@ -1,6 +1,8 @@
1
+
2
+
1
3
  import BinaryWriter from './utils/binary-writer';
2
- var WKB;
3
4
 
5
+ var WKB;
4
6
  (function (WKB) {
5
7
  WKB[WKB["Point"] = 1] = "Point";
6
8
  WKB[WKB["LineString"] = 2] = "LineString";
@@ -10,7 +12,6 @@ var WKB;
10
12
  WKB[WKB["MultiPolygon"] = 6] = "MultiPolygon";
11
13
  WKB[WKB["GeometryCollection"] = 7] = "GeometryCollection";
12
14
  })(WKB || (WKB = {}));
13
-
14
15
  export default function encodeWKB(geometry, options) {
15
16
  if (geometry.type === 'Feature') {
16
17
  geometry = geometry.geometry;
@@ -19,29 +20,21 @@ export default function encodeWKB(geometry, options) {
19
20
  if ('wkb' in options) {
20
21
  options = options.wkb;
21
22
  }
22
-
23
23
  switch (geometry.type) {
24
24
  case 'Point':
25
25
  return encodePoint(geometry.coordinates, options);
26
-
27
26
  case 'LineString':
28
27
  return encodeLineString(geometry.coordinates, options);
29
-
30
28
  case 'Polygon':
31
29
  return encodePolygon(geometry.coordinates, options);
32
-
33
30
  case 'MultiPoint':
34
31
  return encodeMultiPoint(geometry, options);
35
-
36
32
  case 'MultiPolygon':
37
33
  return encodeMultiPolygon(geometry, options);
38
-
39
34
  case 'MultiLineString':
40
35
  return encodeMultiLineString(geometry, options);
41
-
42
36
  case 'GeometryCollection':
43
37
  return encodeGeometryCollection(geometry, options);
44
-
45
38
  default:
46
39
  const exhaustiveCheck = geometry;
47
40
  throw new Error("Unhandled case: ".concat(exhaustiveCheck));
@@ -52,25 +45,18 @@ function getGeometrySize(geometry, options) {
52
45
  switch (geometry.type) {
53
46
  case 'Point':
54
47
  return getPointSize(options);
55
-
56
48
  case 'LineString':
57
49
  return getLineStringSize(geometry.coordinates, options);
58
-
59
50
  case 'Polygon':
60
51
  return getPolygonSize(geometry.coordinates, options);
61
-
62
52
  case 'MultiPoint':
63
53
  return getMultiPointSize(geometry, options);
64
-
65
54
  case 'MultiPolygon':
66
55
  return getMultiPolygonSize(geometry, options);
67
-
68
56
  case 'MultiLineString':
69
57
  return getMultiLineStringSize(geometry, options);
70
-
71
58
  case 'GeometryCollection':
72
59
  return getGeometryCollectionSize(geometry, options);
73
-
74
60
  default:
75
61
  const exhaustiveCheck = geometry;
76
62
  throw new Error("Unhandled case: ".concat(exhaustiveCheck));
@@ -85,29 +71,24 @@ function encodePoint(coordinates, options) {
85
71
  if (typeof coordinates[0] === 'undefined' && typeof coordinates[1] === 'undefined') {
86
72
  writer.writeDoubleLE(NaN);
87
73
  writer.writeDoubleLE(NaN);
88
-
89
74
  if (options.hasZ) {
90
75
  writer.writeDoubleLE(NaN);
91
76
  }
92
-
93
77
  if (options.hasM) {
94
78
  writer.writeDoubleLE(NaN);
95
79
  }
96
80
  } else {
97
81
  writeCoordinate(writer, coordinates, options);
98
82
  }
99
-
100
83
  return writer.arrayBuffer;
101
84
  }
102
85
 
103
86
  function writeCoordinate(writer, coordinate, options) {
104
87
  writer.writeDoubleLE(coordinate[0]);
105
88
  writer.writeDoubleLE(coordinate[1]);
106
-
107
89
  if (options.hasZ) {
108
90
  writer.writeDoubleLE(coordinate[2]);
109
91
  }
110
-
111
92
  if (options.hasM) {
112
93
  writer.writeDoubleLE(coordinate[3]);
113
94
  }
@@ -124,11 +105,9 @@ function encodeLineString(coordinates, options) {
124
105
  writer.writeInt8(1);
125
106
  writeWkbType(writer, WKB.LineString, options);
126
107
  writer.writeUInt32LE(coordinates.length);
127
-
128
108
  for (const coordinate of coordinates) {
129
109
  writeCoordinate(writer, coordinate, options);
130
110
  }
131
-
132
111
  return writer.arrayBuffer;
133
112
  }
134
113
 
@@ -142,26 +121,21 @@ function encodePolygon(coordinates, options) {
142
121
  writer.writeInt8(1);
143
122
  writeWkbType(writer, WKB.Polygon, options);
144
123
  const [exteriorRing, ...interiorRings] = coordinates;
145
-
146
124
  if (exteriorRing.length > 0) {
147
125
  writer.writeUInt32LE(1 + interiorRings.length);
148
126
  writer.writeUInt32LE(exteriorRing.length);
149
127
  } else {
150
128
  writer.writeUInt32LE(0);
151
129
  }
152
-
153
130
  for (const coordinate of exteriorRing) {
154
131
  writeCoordinate(writer, coordinate, options);
155
132
  }
156
-
157
133
  for (const interiorRing of interiorRings) {
158
134
  writer.writeUInt32LE(interiorRing.length);
159
-
160
135
  for (const coordinate of interiorRing) {
161
136
  writeCoordinate(writer, coordinate, options);
162
137
  }
163
138
  }
164
-
165
139
  return writer.arrayBuffer;
166
140
  }
167
141
 
@@ -169,15 +143,12 @@ function getPolygonSize(coordinates, options) {
169
143
  const coordinateSize = getCoordinateSize(options);
170
144
  const [exteriorRing, ...interiorRings] = coordinates;
171
145
  let size = 1 + 4 + 4;
172
-
173
146
  if (exteriorRing.length > 0) {
174
147
  size += 4 + exteriorRing.length * coordinateSize;
175
148
  }
176
-
177
149
  for (const interiorRing of interiorRings) {
178
150
  size += 4 + interiorRing.length * coordinateSize;
179
151
  }
180
-
181
152
  return size;
182
153
  }
183
154
 
@@ -187,18 +158,17 @@ function encodeMultiPoint(multiPoint, options) {
187
158
  writer.writeInt8(1);
188
159
  writeWkbType(writer, WKB.MultiPoint, options);
189
160
  writer.writeUInt32LE(points.length);
190
-
191
161
  for (const point of points) {
192
162
  const arrayBuffer = encodePoint(point, options);
193
163
  writer.writeBuffer(arrayBuffer);
194
164
  }
195
-
196
165
  return writer.arrayBuffer;
197
166
  }
198
167
 
199
168
  function getMultiPointSize(multiPoint, options) {
200
169
  let coordinateSize = getCoordinateSize(options);
201
170
  const points = multiPoint.coordinates;
171
+
202
172
  coordinateSize += 5;
203
173
  return 1 + 4 + 4 + points.length * coordinateSize;
204
174
  }
@@ -209,73 +179,57 @@ function encodeMultiLineString(multiLineString, options) {
209
179
  writer.writeInt8(1);
210
180
  writeWkbType(writer, WKB.MultiLineString, options);
211
181
  writer.writeUInt32LE(lineStrings.length);
212
-
213
182
  for (const lineString of lineStrings) {
214
183
  const encodedLineString = encodeLineString(lineString, options);
215
184
  writer.writeBuffer(encodedLineString);
216
185
  }
217
-
218
186
  return writer.arrayBuffer;
219
187
  }
220
188
 
221
189
  function getMultiLineStringSize(multiLineString, options) {
222
190
  let size = 1 + 4 + 4;
223
191
  const lineStrings = multiLineString.coordinates;
224
-
225
192
  for (const lineString of lineStrings) {
226
193
  size += getLineStringSize(lineString, options);
227
194
  }
228
-
229
195
  return size;
230
196
  }
231
-
232
197
  function encodeMultiPolygon(multiPolygon, options) {
233
198
  const writer = new BinaryWriter(getMultiPolygonSize(multiPolygon, options));
234
199
  const polygons = multiPolygon.coordinates;
235
200
  writer.writeInt8(1);
236
201
  writeWkbType(writer, WKB.MultiPolygon, options);
237
202
  writer.writeUInt32LE(polygons.length);
238
-
239
203
  for (const polygon of polygons) {
240
204
  const encodedPolygon = encodePolygon(polygon, options);
241
205
  writer.writeBuffer(encodedPolygon);
242
206
  }
243
-
244
207
  return writer.arrayBuffer;
245
208
  }
246
-
247
209
  function getMultiPolygonSize(multiPolygon, options) {
248
210
  let size = 1 + 4 + 4;
249
211
  const polygons = multiPolygon.coordinates;
250
-
251
212
  for (const polygon of polygons) {
252
213
  size += getPolygonSize(polygon, options);
253
214
  }
254
-
255
215
  return size;
256
216
  }
257
-
258
217
  function encodeGeometryCollection(collection, options) {
259
218
  const writer = new BinaryWriter(getGeometryCollectionSize(collection, options));
260
219
  writer.writeInt8(1);
261
220
  writeWkbType(writer, WKB.GeometryCollection, options);
262
221
  writer.writeUInt32LE(collection.geometries.length);
263
-
264
222
  for (const geometry of collection.geometries) {
265
223
  const arrayBuffer = encodeWKB(geometry, options);
266
224
  writer.writeBuffer(arrayBuffer);
267
225
  }
268
-
269
226
  return writer.arrayBuffer;
270
227
  }
271
-
272
228
  function getGeometryCollectionSize(collection, options) {
273
229
  let size = 1 + 4 + 4;
274
-
275
230
  for (const geometry of collection.geometries) {
276
231
  size += getGeometrySize(geometry, options);
277
232
  }
278
-
279
233
  return size;
280
234
  }
281
235
 
@@ -286,7 +240,6 @@ function writeWkbType(writer, geometryType, options) {
286
240
  srid
287
241
  } = options;
288
242
  let dimensionType = 0;
289
-
290
243
  if (!srid) {
291
244
  if (hasZ && hasM) {
292
245
  dimensionType += 3000;
@@ -299,26 +252,21 @@ function writeWkbType(writer, geometryType, options) {
299
252
  if (hasZ) {
300
253
  dimensionType |= 0x80000000;
301
254
  }
302
-
303
255
  if (hasM) {
304
256
  dimensionType |= 0x40000000;
305
257
  }
306
258
  }
307
-
308
259
  writer.writeUInt32LE(dimensionType + geometryType >>> 0);
309
260
  }
310
261
 
311
262
  function getCoordinateSize(options) {
312
263
  let coordinateSize = 16;
313
-
314
264
  if (options.hasZ) {
315
265
  coordinateSize += 8;
316
266
  }
317
-
318
267
  if (options.hasM) {
319
268
  coordinateSize += 8;
320
269
  }
321
-
322
270
  return coordinateSize;
323
271
  }
324
272
  //# sourceMappingURL=encode-wkb.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/lib/encode-wkb.ts"],"names":["BinaryWriter","WKB","encodeWKB","geometry","options","type","wkb","encodePoint","coordinates","encodeLineString","encodePolygon","encodeMultiPoint","encodeMultiPolygon","encodeMultiLineString","encodeGeometryCollection","exhaustiveCheck","Error","getGeometrySize","getPointSize","getLineStringSize","getPolygonSize","getMultiPointSize","getMultiPolygonSize","getMultiLineStringSize","getGeometryCollectionSize","writer","writeInt8","writeWkbType","Point","writeDoubleLE","NaN","hasZ","hasM","writeCoordinate","arrayBuffer","coordinate","coordinateSize","getCoordinateSize","size","LineString","writeUInt32LE","length","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"],"mappings":"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","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"],"file":"encode-wkb.js"}
1
+ {"version":3,"file":"encode-wkb.js","names":["BinaryWriter","WKB","encodeWKB","geometry","options","type","wkb","encodePoint","coordinates","encodeLineString","encodePolygon","encodeMultiPoint","encodeMultiPolygon","encodeMultiLineString","encodeGeometryCollection","exhaustiveCheck","Error","getGeometrySize","getPointSize","getLineStringSize","getPolygonSize","getMultiPointSize","getMultiPolygonSize","getMultiLineStringSize","getGeometryCollectionSize","writer","writeInt8","writeWkbType","Point","writeDoubleLE","NaN","hasZ","hasM","writeCoordinate","arrayBuffer","coordinate","coordinateSize","getCoordinateSize","size","LineString","writeUInt32LE","length","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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"}
@@ -1,51 +1,40 @@
1
+
2
+
1
3
  export default function encodeWKT(geometry) {
2
4
  if (geometry.type === 'Feature') {
3
5
  geometry = geometry.geometry;
4
6
  }
5
-
6
7
  switch (geometry.type) {
7
8
  case 'Point':
8
9
  return "POINT ".concat(wrapParens(pairWKT(geometry.coordinates)));
9
-
10
10
  case 'LineString':
11
11
  return "LINESTRING ".concat(wrapParens(ringWKT(geometry.coordinates)));
12
-
13
12
  case 'Polygon':
14
13
  return "POLYGON ".concat(wrapParens(ringsWKT(geometry.coordinates)));
15
-
16
14
  case 'MultiPoint':
17
15
  return "MULTIPOINT ".concat(wrapParens(ringWKT(geometry.coordinates)));
18
-
19
16
  case 'MultiPolygon':
20
17
  return "MULTIPOLYGON ".concat(wrapParens(multiRingsWKT(geometry.coordinates)));
21
-
22
18
  case 'MultiLineString':
23
19
  return "MULTILINESTRING ".concat(wrapParens(ringsWKT(geometry.coordinates)));
24
-
25
20
  case 'GeometryCollection':
26
21
  return "GEOMETRYCOLLECTION ".concat(wrapParens(geometry.geometries.map(encodeWKT).join(', ')));
27
-
28
22
  default:
29
23
  throw new Error('stringify requires a valid GeoJSON Feature or geometry object as input');
30
24
  }
31
25
  }
32
-
33
26
  function pairWKT(c) {
34
27
  return c.join(' ');
35
28
  }
36
-
37
29
  function ringWKT(r) {
38
30
  return r.map(pairWKT).join(', ');
39
31
  }
40
-
41
32
  function ringsWKT(r) {
42
33
  return r.map(ringWKT).map(wrapParens).join(', ');
43
34
  }
44
-
45
35
  function multiRingsWKT(r) {
46
36
  return r.map(ringsWKT).map(wrapParens).join(', ');
47
37
  }
48
-
49
38
  function wrapParens(s) {
50
39
  return "(".concat(s, ")");
51
40
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/lib/encode-wkt.ts"],"names":["encodeWKT","geometry","type","wrapParens","pairWKT","coordinates","ringWKT","ringsWKT","multiRingsWKT","geometries","map","join","Error","c","r","s"],"mappings":"AASA,eAAe,SAASA,SAAT,CAAmBC,QAAnB,EAAyD;AACtE,MAAIA,QAAQ,CAACC,IAAT,KAAkB,SAAtB,EAAiC;AAC/BD,IAAAA,QAAQ,GAAGA,QAAQ,CAACA,QAApB;AACD;;AAED,UAAQA,QAAQ,CAACC,IAAjB;AACE,SAAK,OAAL;AACE,6BAAgBC,UAAU,CAACC,OAAO,CAACH,QAAQ,CAACI,WAAV,CAAR,CAA1B;;AACF,SAAK,YAAL;AACE,kCAAqBF,UAAU,CAACG,OAAO,CAACL,QAAQ,CAACI,WAAV,CAAR,CAA/B;;AACF,SAAK,SAAL;AACE,+BAAkBF,UAAU,CAACI,QAAQ,CAACN,QAAQ,CAACI,WAAV,CAAT,CAA5B;;AACF,SAAK,YAAL;AACE,kCAAqBF,UAAU,CAACG,OAAO,CAACL,QAAQ,CAACI,WAAV,CAAR,CAA/B;;AACF,SAAK,cAAL;AACE,oCAAuBF,UAAU,CAACK,aAAa,CAACP,QAAQ,CAACI,WAAV,CAAd,CAAjC;;AACF,SAAK,iBAAL;AACE,uCAA0BF,UAAU,CAACI,QAAQ,CAACN,QAAQ,CAACI,WAAV,CAAT,CAApC;;AACF,SAAK,oBAAL;AACE,0CAA6BF,UAAU,CAACF,QAAQ,CAACQ,UAAT,CAAoBC,GAApB,CAAwBV,SAAxB,EAAmCW,IAAnC,CAAwC,IAAxC,CAAD,CAAvC;;AACF;AACE,YAAM,IAAIC,KAAJ,CAAU,wEAAV,CAAN;AAhBJ;AAkBD;;AAED,SAASR,OAAT,CAAiBS,CAAjB,EAAsC;AACpC,SAAOA,CAAC,CAACF,IAAF,CAAO,GAAP,CAAP;AACD;;AAED,SAASL,OAAT,CAAiBQ,CAAjB,EAAwC;AACtC,SAAOA,CAAC,CAACJ,GAAF,CAAMN,OAAN,EAAeO,IAAf,CAAoB,IAApB,CAAP;AACD;;AAED,SAASJ,QAAT,CAAkBO,CAAlB,EAA2C;AACzC,SAAOA,CAAC,CAACJ,GAAF,CAAMJ,OAAN,EAAeI,GAAf,CAAmBP,UAAnB,EAA+BQ,IAA/B,CAAoC,IAApC,CAAP;AACD;;AAED,SAASH,aAAT,CAAuBM,CAAvB,EAAkD;AAChD,SAAOA,CAAC,CAACJ,GAAF,CAAMH,QAAN,EAAgBG,GAAhB,CAAoBP,UAApB,EAAgCQ,IAAhC,CAAqC,IAArC,CAAP;AACD;;AAED,SAASR,UAAT,CAAoBY,CAApB,EAAuC;AACrC,oBAAWA,CAAX;AACD","sourcesContent":["// Fork of https://github.com/mapbox/wellknown under ISC license (MIT/BSD-2-clause equivalent)\n// eslint-disable-next-line import/no-unresolved\nimport type {Feature, Geometry} from '@loaders.gl/schema';\n\n/**\n * Stringifies a GeoJSON object into WKT\n * @param geojson\n * @returns string\n */\nexport default function encodeWKT(geometry: Geometry | Feature): string {\n if (geometry.type === 'Feature') {\n geometry = geometry.geometry;\n }\n\n switch (geometry.type) {\n case 'Point':\n return `POINT ${wrapParens(pairWKT(geometry.coordinates))}`;\n case 'LineString':\n return `LINESTRING ${wrapParens(ringWKT(geometry.coordinates))}`;\n case 'Polygon':\n return `POLYGON ${wrapParens(ringsWKT(geometry.coordinates))}`;\n case 'MultiPoint':\n return `MULTIPOINT ${wrapParens(ringWKT(geometry.coordinates))}`;\n case 'MultiPolygon':\n return `MULTIPOLYGON ${wrapParens(multiRingsWKT(geometry.coordinates))}`;\n case 'MultiLineString':\n return `MULTILINESTRING ${wrapParens(ringsWKT(geometry.coordinates))}`;\n case 'GeometryCollection':\n return `GEOMETRYCOLLECTION ${wrapParens(geometry.geometries.map(encodeWKT).join(', '))}`;\n default:\n throw new Error('stringify requires a valid GeoJSON Feature or geometry object as input');\n }\n}\n\nfunction pairWKT(c: number[]): string {\n return c.join(' ');\n}\n\nfunction ringWKT(r: number[][]): string {\n return r.map(pairWKT).join(', ');\n}\n\nfunction ringsWKT(r: number[][][]): string {\n return r.map(ringWKT).map(wrapParens).join(', ');\n}\n\nfunction multiRingsWKT(r: number[][][][]): string {\n return r.map(ringsWKT).map(wrapParens).join(', ');\n}\n\nfunction wrapParens(s: string): string {\n return `(${s})`;\n}\n"],"file":"encode-wkt.js"}
1
+ {"version":3,"file":"encode-wkt.js","names":["encodeWKT","geometry","type","wrapParens","pairWKT","coordinates","ringWKT","ringsWKT","multiRingsWKT","geometries","map","join","Error","c","r","s"],"sources":["../../../src/lib/encode-wkt.ts"],"sourcesContent":["// Fork of https://github.com/mapbox/wellknown under ISC license (MIT/BSD-2-clause equivalent)\n// eslint-disable-next-line import/no-unresolved\nimport type {Feature, Geometry} from '@loaders.gl/schema';\n\n/**\n * Stringifies a GeoJSON object into WKT\n * @param geojson\n * @returns string\n */\nexport default function encodeWKT(geometry: Geometry | Feature): string {\n if (geometry.type === 'Feature') {\n geometry = geometry.geometry;\n }\n\n switch (geometry.type) {\n case 'Point':\n return `POINT ${wrapParens(pairWKT(geometry.coordinates))}`;\n case 'LineString':\n return `LINESTRING ${wrapParens(ringWKT(geometry.coordinates))}`;\n case 'Polygon':\n return `POLYGON ${wrapParens(ringsWKT(geometry.coordinates))}`;\n case 'MultiPoint':\n return `MULTIPOINT ${wrapParens(ringWKT(geometry.coordinates))}`;\n case 'MultiPolygon':\n return `MULTIPOLYGON ${wrapParens(multiRingsWKT(geometry.coordinates))}`;\n case 'MultiLineString':\n return `MULTILINESTRING ${wrapParens(ringsWKT(geometry.coordinates))}`;\n case 'GeometryCollection':\n return `GEOMETRYCOLLECTION ${wrapParens(geometry.geometries.map(encodeWKT).join(', '))}`;\n default:\n throw new Error('stringify requires a valid GeoJSON Feature or geometry object as input');\n }\n}\n\nfunction pairWKT(c: number[]): string {\n return c.join(' ');\n}\n\nfunction ringWKT(r: number[][]): string {\n return r.map(pairWKT).join(', ');\n}\n\nfunction ringsWKT(r: number[][][]): string {\n return r.map(ringWKT).map(wrapParens).join(', ');\n}\n\nfunction multiRingsWKT(r: number[][][][]): string {\n return r.map(ringsWKT).map(wrapParens).join(', ');\n}\n\nfunction wrapParens(s: string): string {\n return `(${s})`;\n}\n"],"mappings":";;AASA,eAAe,SAASA,SAAS,CAACC,QAA4B,EAAU;EACtE,IAAIA,QAAQ,CAACC,IAAI,KAAK,SAAS,EAAE;IAC/BD,QAAQ,GAAGA,QAAQ,CAACA,QAAQ;EAC9B;EAEA,QAAQA,QAAQ,CAACC,IAAI;IACnB,KAAK,OAAO;MACV,uBAAgBC,UAAU,CAACC,OAAO,CAACH,QAAQ,CAACI,WAAW,CAAC,CAAC;IAC3D,KAAK,YAAY;MACf,4BAAqBF,UAAU,CAACG,OAAO,CAACL,QAAQ,CAACI,WAAW,CAAC,CAAC;IAChE,KAAK,SAAS;MACZ,yBAAkBF,UAAU,CAACI,QAAQ,CAACN,QAAQ,CAACI,WAAW,CAAC,CAAC;IAC9D,KAAK,YAAY;MACf,4BAAqBF,UAAU,CAACG,OAAO,CAACL,QAAQ,CAACI,WAAW,CAAC,CAAC;IAChE,KAAK,cAAc;MACjB,8BAAuBF,UAAU,CAACK,aAAa,CAACP,QAAQ,CAACI,WAAW,CAAC,CAAC;IACxE,KAAK,iBAAiB;MACpB,iCAA0BF,UAAU,CAACI,QAAQ,CAACN,QAAQ,CAACI,WAAW,CAAC,CAAC;IACtE,KAAK,oBAAoB;MACvB,oCAA6BF,UAAU,CAACF,QAAQ,CAACQ,UAAU,CAACC,GAAG,CAACV,SAAS,CAAC,CAACW,IAAI,CAAC,IAAI,CAAC,CAAC;IACxF;MACE,MAAM,IAAIC,KAAK,CAAC,wEAAwE,CAAC;EAAC;AAEhG;AAEA,SAASR,OAAO,CAACS,CAAW,EAAU;EACpC,OAAOA,CAAC,CAACF,IAAI,CAAC,GAAG,CAAC;AACpB;AAEA,SAASL,OAAO,CAACQ,CAAa,EAAU;EACtC,OAAOA,CAAC,CAACJ,GAAG,CAACN,OAAO,CAAC,CAACO,IAAI,CAAC,IAAI,CAAC;AAClC;AAEA,SAASJ,QAAQ,CAACO,CAAe,EAAU;EACzC,OAAOA,CAAC,CAACJ,GAAG,CAACJ,OAAO,CAAC,CAACI,GAAG,CAACP,UAAU,CAAC,CAACQ,IAAI,CAAC,IAAI,CAAC;AAClD;AAEA,SAASH,aAAa,CAACM,CAAiB,EAAU;EAChD,OAAOA,CAAC,CAACJ,GAAG,CAACH,QAAQ,CAAC,CAACG,GAAG,CAACP,UAAU,CAAC,CAACQ,IAAI,CAAC,IAAI,CAAC;AACnD;AAEA,SAASR,UAAU,CAACY,CAAS,EAAU;EACrC,kBAAWA,CAAC;AACd"}