@loaders.gl/wkt 3.3.0-alpha.5 → 3.3.0-alpha.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/es5/bundle.js +0 -1
- package/dist/es5/bundle.js.map +1 -1
- package/dist/es5/index.js +6 -10
- package/dist/es5/index.js.map +1 -1
- package/dist/es5/lib/encode-wkb.js +19 -96
- package/dist/es5/lib/encode-wkb.js.map +1 -1
- package/dist/es5/lib/encode-wkt.js +0 -13
- package/dist/es5/lib/encode-wkt.js.map +1 -1
- package/dist/es5/lib/parse-wkb.js +6 -51
- package/dist/es5/lib/parse-wkb.js.map +1 -1
- package/dist/es5/lib/parse-wkt.js +2 -28
- package/dist/es5/lib/parse-wkt.js.map +1 -1
- package/dist/es5/lib/utils/binary-writer.js +9 -27
- package/dist/es5/lib/utils/binary-writer.js.map +1 -1
- package/dist/es5/lib/utils/version.js +1 -1
- package/dist/es5/lib/utils/version.js.map +1 -1
- package/dist/es5/wkb-loader.js +4 -17
- package/dist/es5/wkb-loader.js.map +1 -1
- package/dist/es5/wkb-writer.js +0 -4
- package/dist/es5/wkb-writer.js.map +1 -1
- package/dist/es5/wkt-loader.js +4 -17
- package/dist/es5/wkt-loader.js.map +1 -1
- package/dist/es5/wkt-writer.js +0 -4
- package/dist/es5/wkt-writer.js.map +1 -1
- package/dist/es5/workers/wkb-worker.js +0 -2
- package/dist/es5/workers/wkb-worker.js.map +1 -1
- package/dist/es5/workers/wkt-worker.js +0 -2
- package/dist/es5/workers/wkt-worker.js.map +1 -1
- package/dist/esm/bundle.js +1 -1
- package/dist/esm/bundle.js.map +1 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/lib/encode-wkb.js +4 -56
- package/dist/esm/lib/encode-wkb.js.map +1 -1
- package/dist/esm/lib/encode-wkt.js +2 -13
- package/dist/esm/lib/encode-wkt.js.map +1 -1
- package/dist/esm/lib/parse-wkb.js +5 -42
- package/dist/esm/lib/parse-wkb.js.map +1 -1
- package/dist/esm/lib/parse-wkt.js +4 -28
- package/dist/esm/lib/parse-wkt.js.map +1 -1
- package/dist/esm/lib/utils/binary-writer.js +1 -36
- package/dist/esm/lib/utils/binary-writer.js.map +1 -1
- package/dist/esm/lib/utils/version.js +2 -1
- package/dist/esm/lib/utils/version.js.map +1 -1
- package/dist/esm/wkb-loader.js +4 -1
- package/dist/esm/wkb-loader.js.map +1 -1
- package/dist/esm/wkb-writer.js +1 -0
- package/dist/esm/wkb-writer.js.map +1 -1
- package/dist/esm/wkt-loader.js +4 -1
- package/dist/esm/wkt-loader.js.map +1 -1
- package/dist/esm/wkt-writer.js +1 -0
- package/dist/esm/wkt-writer.js.map +1 -1
- package/dist/esm/workers/wkb-worker.js.map +1 -1
- package/dist/esm/workers/wkt-worker.js.map +1 -1
- package/dist/wkt-worker.js +1 -1
- 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,"
|
|
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"}
|