@loaders.gl/wkt 3.2.12 → 3.3.0-alpha.10
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
|
@@ -4,45 +4,41 @@ const NUM_DIMENSIONS = {
|
|
|
4
4
|
2: 3,
|
|
5
5
|
3: 4
|
|
6
6
|
};
|
|
7
|
+
|
|
7
8
|
export default function parseWKB(arrayBuffer) {
|
|
8
9
|
const view = new DataView(arrayBuffer);
|
|
9
10
|
let offset = 0;
|
|
11
|
+
|
|
10
12
|
const littleEndian = view.getUint8(offset) === 1;
|
|
11
13
|
offset++;
|
|
14
|
+
|
|
12
15
|
const geometryCode = view.getUint32(offset, littleEndian);
|
|
13
16
|
offset += 4;
|
|
14
17
|
const geometryType = geometryCode % 1000;
|
|
15
18
|
const type = (geometryCode - geometryType) / 1000;
|
|
16
19
|
const dimension = NUM_DIMENSIONS[type];
|
|
17
|
-
|
|
18
20
|
switch (geometryType) {
|
|
19
21
|
case 1:
|
|
20
22
|
const point = parsePoint(view, offset, dimension, littleEndian);
|
|
21
23
|
return point.geometry;
|
|
22
|
-
|
|
23
24
|
case 2:
|
|
24
25
|
const line = parseLineString(view, offset, dimension, littleEndian);
|
|
25
26
|
return line.geometry;
|
|
26
|
-
|
|
27
27
|
case 3:
|
|
28
28
|
const polygon = parsePolygon(view, offset, dimension, littleEndian);
|
|
29
29
|
return polygon.geometry;
|
|
30
|
-
|
|
31
30
|
case 4:
|
|
32
31
|
const multiPoint = parseMultiPoint(view, offset, dimension, littleEndian);
|
|
33
32
|
multiPoint.type = 'Point';
|
|
34
33
|
return multiPoint;
|
|
35
|
-
|
|
36
34
|
case 5:
|
|
37
35
|
const multiLine = parseMultiLineString(view, offset, dimension, littleEndian);
|
|
38
36
|
multiLine.type = 'LineString';
|
|
39
37
|
return multiLine;
|
|
40
|
-
|
|
41
38
|
case 6:
|
|
42
39
|
const multiPolygon = parseMultiPolygon(view, offset, dimension, littleEndian);
|
|
43
40
|
multiPolygon.type = 'Polygon';
|
|
44
41
|
return multiPolygon;
|
|
45
|
-
|
|
46
42
|
default:
|
|
47
43
|
throw new Error("WKB: Unsupported geometry type: ".concat(geometryType));
|
|
48
44
|
}
|
|
@@ -50,12 +46,10 @@ export default function parseWKB(arrayBuffer) {
|
|
|
50
46
|
|
|
51
47
|
function parsePoint(view, offset, dimension, littleEndian) {
|
|
52
48
|
const positions = new Float64Array(dimension);
|
|
53
|
-
|
|
54
49
|
for (let i = 0; i < dimension; i++) {
|
|
55
50
|
positions[i] = view.getFloat64(offset, littleEndian);
|
|
56
51
|
offset += 8;
|
|
57
52
|
}
|
|
58
|
-
|
|
59
53
|
return {
|
|
60
54
|
geometry: {
|
|
61
55
|
type: 'Point',
|
|
@@ -67,23 +61,19 @@ function parsePoint(view, offset, dimension, littleEndian) {
|
|
|
67
61
|
offset
|
|
68
62
|
};
|
|
69
63
|
}
|
|
70
|
-
|
|
71
64
|
function parseLineString(view, offset, dimension, littleEndian) {
|
|
72
65
|
const nPoints = view.getUint32(offset, littleEndian);
|
|
73
66
|
offset += 4;
|
|
74
|
-
const positions = new Float64Array(nPoints * dimension);
|
|
75
67
|
|
|
68
|
+
const positions = new Float64Array(nPoints * dimension);
|
|
76
69
|
for (let i = 0; i < nPoints * dimension; i++) {
|
|
77
70
|
positions[i] = view.getFloat64(offset, littleEndian);
|
|
78
71
|
offset += 8;
|
|
79
72
|
}
|
|
80
|
-
|
|
81
73
|
const pathIndices = [0];
|
|
82
|
-
|
|
83
74
|
if (nPoints > 0) {
|
|
84
75
|
pathIndices.push(nPoints);
|
|
85
76
|
}
|
|
86
|
-
|
|
87
77
|
return {
|
|
88
78
|
geometry: {
|
|
89
79
|
type: 'LineString',
|
|
@@ -101,12 +91,10 @@ function parseLineString(view, offset, dimension, littleEndian) {
|
|
|
101
91
|
}
|
|
102
92
|
|
|
103
93
|
const cumulativeSum = sum => value => sum += value;
|
|
104
|
-
|
|
105
94
|
function parsePolygon(view, offset, dimension, littleEndian) {
|
|
106
95
|
const nRings = view.getUint32(offset, littleEndian);
|
|
107
96
|
offset += 4;
|
|
108
97
|
const rings = [];
|
|
109
|
-
|
|
110
98
|
for (let i = 0; i < nRings; i++) {
|
|
111
99
|
const parsed = parseLineString(view, offset, dimension, littleEndian);
|
|
112
100
|
const {
|
|
@@ -115,14 +103,11 @@ function parsePolygon(view, offset, dimension, littleEndian) {
|
|
|
115
103
|
offset = parsed.offset;
|
|
116
104
|
rings.push(positions.value);
|
|
117
105
|
}
|
|
118
|
-
|
|
119
106
|
const concatenatedPositions = new Float64Array(concatTypedArrays(rings).buffer);
|
|
120
107
|
const polygonIndices = [0];
|
|
121
|
-
|
|
122
108
|
if (concatenatedPositions.length > 0) {
|
|
123
109
|
polygonIndices.push(concatenatedPositions.length / dimension);
|
|
124
110
|
}
|
|
125
|
-
|
|
126
111
|
const primitivePolygonIndices = rings.map(l => l.length / dimension).map(cumulativeSum(0));
|
|
127
112
|
primitivePolygonIndices.unshift(0);
|
|
128
113
|
return {
|
|
@@ -144,12 +129,10 @@ function parsePolygon(view, offset, dimension, littleEndian) {
|
|
|
144
129
|
offset
|
|
145
130
|
};
|
|
146
131
|
}
|
|
147
|
-
|
|
148
132
|
function parseMultiPoint(view, offset, dimension, littleEndian) {
|
|
149
133
|
const nPoints = view.getUint32(offset, littleEndian);
|
|
150
134
|
offset += 4;
|
|
151
135
|
const binaryPointGeometries = [];
|
|
152
|
-
|
|
153
136
|
for (let i = 0; i < nPoints; i++) {
|
|
154
137
|
const littleEndianPoint = view.getUint8(offset) === 1;
|
|
155
138
|
offset++;
|
|
@@ -157,21 +140,17 @@ function parseMultiPoint(view, offset, dimension, littleEndian) {
|
|
|
157
140
|
if (view.getUint32(offset, littleEndianPoint) % 1000 !== 1) {
|
|
158
141
|
throw new Error('WKB: Inner geometries of MultiPoint not of type Point');
|
|
159
142
|
}
|
|
160
|
-
|
|
161
143
|
offset += 4;
|
|
162
144
|
const parsed = parsePoint(view, offset, dimension, littleEndianPoint);
|
|
163
145
|
offset = parsed.offset;
|
|
164
146
|
binaryPointGeometries.push(parsed.geometry);
|
|
165
147
|
}
|
|
166
|
-
|
|
167
148
|
return concatenateBinaryPointGeometries(binaryPointGeometries, dimension);
|
|
168
149
|
}
|
|
169
|
-
|
|
170
150
|
function parseMultiLineString(view, offset, dimension, littleEndian) {
|
|
171
151
|
const nLines = view.getUint32(offset, littleEndian);
|
|
172
152
|
offset += 4;
|
|
173
153
|
const binaryLineGeometries = [];
|
|
174
|
-
|
|
175
154
|
for (let i = 0; i < nLines; i++) {
|
|
176
155
|
const littleEndianLine = view.getUint8(offset) === 1;
|
|
177
156
|
offset++;
|
|
@@ -179,21 +158,17 @@ function parseMultiLineString(view, offset, dimension, littleEndian) {
|
|
|
179
158
|
if (view.getUint32(offset, littleEndianLine) % 1000 !== 2) {
|
|
180
159
|
throw new Error('WKB: Inner geometries of MultiLineString not of type LineString');
|
|
181
160
|
}
|
|
182
|
-
|
|
183
161
|
offset += 4;
|
|
184
162
|
const parsed = parseLineString(view, offset, dimension, littleEndianLine);
|
|
185
163
|
offset = parsed.offset;
|
|
186
164
|
binaryLineGeometries.push(parsed.geometry);
|
|
187
165
|
}
|
|
188
|
-
|
|
189
166
|
return concatenateBinaryLineGeometries(binaryLineGeometries, dimension);
|
|
190
167
|
}
|
|
191
|
-
|
|
192
168
|
function parseMultiPolygon(view, offset, dimension, littleEndian) {
|
|
193
169
|
const nPolygons = view.getUint32(offset, littleEndian);
|
|
194
170
|
offset += 4;
|
|
195
171
|
const binaryPolygonGeometries = [];
|
|
196
|
-
|
|
197
172
|
for (let i = 0; i < nPolygons; i++) {
|
|
198
173
|
const littleEndianPolygon = view.getUint8(offset) === 1;
|
|
199
174
|
offset++;
|
|
@@ -201,13 +176,11 @@ function parseMultiPolygon(view, offset, dimension, littleEndian) {
|
|
|
201
176
|
if (view.getUint32(offset, littleEndianPolygon) % 1000 !== 3) {
|
|
202
177
|
throw new Error('WKB: Inner geometries of MultiPolygon not of type Polygon');
|
|
203
178
|
}
|
|
204
|
-
|
|
205
179
|
offset += 4;
|
|
206
180
|
const parsed = parsePolygon(view, offset, dimension, littleEndianPolygon);
|
|
207
181
|
offset = parsed.offset;
|
|
208
182
|
binaryPolygonGeometries.push(parsed.geometry);
|
|
209
183
|
}
|
|
210
|
-
|
|
211
184
|
return concatenateBinaryPolygonGeometries(binaryPolygonGeometries, dimension);
|
|
212
185
|
}
|
|
213
186
|
|
|
@@ -222,7 +195,6 @@ function concatenateBinaryPointGeometries(binaryPointGeometries, dimension) {
|
|
|
222
195
|
}
|
|
223
196
|
};
|
|
224
197
|
}
|
|
225
|
-
|
|
226
198
|
function concatenateBinaryLineGeometries(binaryLineGeometries, dimension) {
|
|
227
199
|
const lines = binaryLineGeometries.map(geometry => geometry.positions.value);
|
|
228
200
|
const concatenatedPositions = new Float64Array(concatTypedArrays(lines).buffer);
|
|
@@ -240,11 +212,9 @@ function concatenateBinaryLineGeometries(binaryLineGeometries, dimension) {
|
|
|
240
212
|
}
|
|
241
213
|
};
|
|
242
214
|
}
|
|
243
|
-
|
|
244
215
|
function concatenateBinaryPolygonGeometries(binaryPolygonGeometries, dimension) {
|
|
245
216
|
const polygons = [];
|
|
246
217
|
const primitivePolygons = [];
|
|
247
|
-
|
|
248
218
|
for (const binaryPolygon of binaryPolygonGeometries) {
|
|
249
219
|
const {
|
|
250
220
|
positions,
|
|
@@ -253,16 +223,14 @@ function concatenateBinaryPolygonGeometries(binaryPolygonGeometries, dimension)
|
|
|
253
223
|
polygons.push(positions.value);
|
|
254
224
|
primitivePolygons.push(primitivePolygonIndices.value);
|
|
255
225
|
}
|
|
256
|
-
|
|
257
226
|
const concatenatedPositions = new Float64Array(concatTypedArrays(polygons).buffer);
|
|
258
227
|
const polygonIndices = polygons.map(p => p.length / dimension).map(cumulativeSum(0));
|
|
259
228
|
polygonIndices.unshift(0);
|
|
260
|
-
const primitivePolygonIndices = [0];
|
|
261
229
|
|
|
230
|
+
const primitivePolygonIndices = [0];
|
|
262
231
|
for (const primitivePolygon of primitivePolygons) {
|
|
263
232
|
primitivePolygonIndices.push(...primitivePolygon.filter(x => x > 0).map(x => x + primitivePolygonIndices[primitivePolygonIndices.length - 1]));
|
|
264
233
|
}
|
|
265
|
-
|
|
266
234
|
return {
|
|
267
235
|
type: 'Polygon',
|
|
268
236
|
positions: {
|
|
@@ -282,23 +250,18 @@ function concatenateBinaryPolygonGeometries(binaryPolygonGeometries, dimension)
|
|
|
282
250
|
|
|
283
251
|
function concatTypedArrays(arrays) {
|
|
284
252
|
let byteLength = 0;
|
|
285
|
-
|
|
286
253
|
for (let i = 0; i < arrays.length; ++i) {
|
|
287
254
|
byteLength += arrays[i].byteLength;
|
|
288
255
|
}
|
|
289
|
-
|
|
290
256
|
const buffer = new Uint8Array(byteLength);
|
|
291
257
|
let byteOffset = 0;
|
|
292
|
-
|
|
293
258
|
for (let i = 0; i < arrays.length; ++i) {
|
|
294
259
|
const data = new Uint8Array(arrays[i].buffer);
|
|
295
260
|
byteLength = data.length;
|
|
296
|
-
|
|
297
261
|
for (let j = 0; j < byteLength; ++j) {
|
|
298
262
|
buffer[byteOffset++] = data[j];
|
|
299
263
|
}
|
|
300
264
|
}
|
|
301
|
-
|
|
302
265
|
return buffer;
|
|
303
266
|
}
|
|
304
267
|
//# sourceMappingURL=parse-wkb.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/lib/parse-wkb.ts"],"names":["NUM_DIMENSIONS","parseWKB","arrayBuffer","view","DataView","offset","littleEndian","getUint8","geometryCode","getUint32","geometryType","type","dimension","point","parsePoint","geometry","line","parseLineString","polygon","parsePolygon","multiPoint","parseMultiPoint","multiLine","parseMultiLineString","multiPolygon","parseMultiPolygon","Error","positions","Float64Array","i","getFloat64","value","size","nPoints","pathIndices","push","Uint16Array","cumulativeSum","sum","nRings","rings","parsed","concatenatedPositions","concatTypedArrays","buffer","polygonIndices","length","primitivePolygonIndices","map","l","unshift","binaryPointGeometries","littleEndianPoint","concatenateBinaryPointGeometries","nLines","binaryLineGeometries","littleEndianLine","concatenateBinaryLineGeometries","nPolygons","binaryPolygonGeometries","littleEndianPolygon","concatenateBinaryPolygonGeometries","lines","polygons","primitivePolygons","binaryPolygon","p","primitivePolygon","filter","x","arrays","byteLength","Uint8Array","byteOffset","data","j"],"mappings":"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","sourcesContent":["import type {\n TypedArray,\n BinaryGeometry,\n BinaryPointGeometry,\n BinaryLineGeometry,\n BinaryPolygonGeometry\n} from '@loaders.gl/schema';\n\nconst NUM_DIMENSIONS = {\n 0: 2, // 2D\n 1: 3, // 3D (Z)\n 2: 3, // 3D (M)\n 3: 4 // 4D (ZM)\n};\n\nexport default function parseWKB(arrayBuffer: ArrayBuffer): BinaryGeometry {\n const view = new DataView(arrayBuffer);\n let offset = 0;\n\n // Check endianness of data\n const littleEndian = view.getUint8(offset) === 1;\n offset++;\n\n // 4-digit code representing dimension and type of geometry\n const geometryCode = view.getUint32(offset, littleEndian);\n offset += 4;\n\n const geometryType = geometryCode % 1000;\n const type = ((geometryCode - geometryType) / 1000) as 0 | 1 | 2 | 3;\n const dimension = NUM_DIMENSIONS[type];\n\n switch (geometryType) {\n case 1:\n const point = parsePoint(view, offset, dimension, littleEndian);\n return point.geometry;\n case 2:\n const line = parseLineString(view, offset, dimension, littleEndian);\n return line.geometry;\n case 3:\n const polygon = parsePolygon(view, offset, dimension, littleEndian);\n return polygon.geometry;\n case 4:\n const multiPoint = parseMultiPoint(view, offset, dimension, littleEndian);\n multiPoint.type = 'Point';\n return multiPoint;\n case 5:\n const multiLine = parseMultiLineString(view, offset, dimension, littleEndian);\n multiLine.type = 'LineString';\n return multiLine;\n case 6:\n const multiPolygon = parseMultiPolygon(view, offset, dimension, littleEndian);\n multiPolygon.type = 'Polygon';\n return multiPolygon;\n // case 7:\n // TODO: handle GeometryCollections\n // return parseGeometryCollection(view, offset, dimension, littleEndian);\n default:\n throw new Error(`WKB: Unsupported geometry type: ${geometryType}`);\n }\n}\n\n// Primitives; parse point and linear ring\nfunction parsePoint(\n view: DataView,\n offset: number,\n dimension: number,\n littleEndian: boolean\n): {geometry: BinaryPointGeometry; offset: number} {\n const positions = new Float64Array(dimension);\n for (let i = 0; i < dimension; i++) {\n positions[i] = view.getFloat64(offset, littleEndian);\n offset += 8;\n }\n\n return {\n geometry: {type: 'Point', positions: {value: positions, size: dimension}},\n offset\n };\n}\n\nfunction parseLineString(\n view: DataView,\n offset: number,\n dimension: number,\n littleEndian: boolean\n): {geometry: BinaryLineGeometry; offset: number} {\n const nPoints = view.getUint32(offset, littleEndian);\n offset += 4;\n\n // Instantiate array\n const positions = new Float64Array(nPoints * dimension);\n for (let i = 0; i < nPoints * dimension; i++) {\n positions[i] = view.getFloat64(offset, littleEndian);\n offset += 8;\n }\n\n const pathIndices = [0];\n if (nPoints > 0) {\n pathIndices.push(nPoints);\n }\n\n return {\n geometry: {\n type: 'LineString',\n positions: {value: positions, size: dimension},\n pathIndices: {value: new Uint16Array(pathIndices), size: 1}\n },\n offset\n };\n}\n\n// https://stackoverflow.com/a/55261098\nconst cumulativeSum = (sum: number) => (value: number) => (sum += value);\n\nfunction parsePolygon(\n view: DataView,\n offset: number,\n dimension: number,\n littleEndian: boolean\n): {geometry: BinaryPolygonGeometry; offset: number} {\n const nRings = view.getUint32(offset, littleEndian);\n offset += 4;\n\n const rings: TypedArray[] = [];\n for (let i = 0; i < nRings; i++) {\n const parsed = parseLineString(view, offset, dimension, littleEndian);\n const {positions} = parsed.geometry;\n offset = parsed.offset;\n rings.push(positions.value);\n }\n\n const concatenatedPositions = new Float64Array(concatTypedArrays(rings).buffer);\n const polygonIndices = [0];\n if (concatenatedPositions.length > 0) {\n polygonIndices.push(concatenatedPositions.length / dimension);\n }\n const primitivePolygonIndices = rings.map((l) => l.length / dimension).map(cumulativeSum(0));\n primitivePolygonIndices.unshift(0);\n\n return {\n geometry: {\n type: 'Polygon',\n positions: {value: concatenatedPositions, size: dimension},\n polygonIndices: {\n value: new Uint16Array(polygonIndices),\n size: 1\n },\n primitivePolygonIndices: {value: new Uint16Array(primitivePolygonIndices), size: 1}\n },\n offset\n };\n}\n\nfunction parseMultiPoint(\n view: DataView,\n offset: number,\n dimension: number,\n littleEndian: boolean\n): BinaryPointGeometry {\n const nPoints = view.getUint32(offset, littleEndian);\n offset += 4;\n\n const binaryPointGeometries: BinaryPointGeometry[] = [];\n for (let i = 0; i < nPoints; i++) {\n // Byte order for point\n const littleEndianPoint = view.getUint8(offset) === 1;\n offset++;\n\n // Assert point type\n if (view.getUint32(offset, littleEndianPoint) % 1000 !== 1) {\n throw new Error('WKB: Inner geometries of MultiPoint not of type Point');\n }\n\n offset += 4;\n\n const parsed = parsePoint(view, offset, dimension, littleEndianPoint);\n offset = parsed.offset;\n binaryPointGeometries.push(parsed.geometry);\n }\n\n return concatenateBinaryPointGeometries(binaryPointGeometries, dimension);\n}\n\nfunction parseMultiLineString(\n view: DataView,\n offset: number,\n dimension: number,\n littleEndian: boolean\n): BinaryLineGeometry {\n const nLines = view.getUint32(offset, littleEndian);\n offset += 4;\n\n const binaryLineGeometries: BinaryLineGeometry[] = [];\n for (let i = 0; i < nLines; i++) {\n // Byte order for line\n const littleEndianLine = view.getUint8(offset) === 1;\n offset++;\n\n // Assert type LineString\n if (view.getUint32(offset, littleEndianLine) % 1000 !== 2) {\n throw new Error('WKB: Inner geometries of MultiLineString not of type LineString');\n }\n offset += 4;\n\n const parsed = parseLineString(view, offset, dimension, littleEndianLine);\n offset = parsed.offset;\n binaryLineGeometries.push(parsed.geometry);\n }\n\n return concatenateBinaryLineGeometries(binaryLineGeometries, dimension);\n}\n\nfunction parseMultiPolygon(\n view: DataView,\n offset: number,\n dimension: number,\n littleEndian: boolean\n): BinaryPolygonGeometry {\n const nPolygons = view.getUint32(offset, littleEndian);\n offset += 4;\n\n const binaryPolygonGeometries: BinaryPolygonGeometry[] = [];\n for (let i = 0; i < nPolygons; i++) {\n // Byte order for polygon\n const littleEndianPolygon = view.getUint8(offset) === 1;\n offset++;\n\n // Assert type Polygon\n if (view.getUint32(offset, littleEndianPolygon) % 1000 !== 3) {\n throw new Error('WKB: Inner geometries of MultiPolygon not of type Polygon');\n }\n offset += 4;\n\n const parsed = parsePolygon(view, offset, dimension, littleEndianPolygon);\n offset = parsed.offset;\n binaryPolygonGeometries.push(parsed.geometry);\n }\n\n return concatenateBinaryPolygonGeometries(binaryPolygonGeometries, dimension);\n}\n\n// TODO - move to loaders.gl/schema/gis\n\nfunction concatenateBinaryPointGeometries(\n binaryPointGeometries: BinaryPointGeometry[],\n dimension: number\n): BinaryPointGeometry {\n const positions: TypedArray[] = binaryPointGeometries.map((geometry) => geometry.positions.value);\n const concatenatedPositions = new Float64Array(concatTypedArrays(positions).buffer);\n\n return {\n type: 'Point',\n positions: {value: concatenatedPositions, size: dimension}\n };\n}\n\nfunction concatenateBinaryLineGeometries(\n binaryLineGeometries: BinaryLineGeometry[],\n dimension: number\n): BinaryLineGeometry {\n const lines: TypedArray[] = binaryLineGeometries.map((geometry) => geometry.positions.value);\n const concatenatedPositions = new Float64Array(concatTypedArrays(lines).buffer);\n const pathIndices = lines.map((line) => line.length / dimension).map(cumulativeSum(0));\n pathIndices.unshift(0);\n\n return {\n type: 'LineString',\n positions: {value: concatenatedPositions, size: dimension},\n pathIndices: {value: new Uint16Array(pathIndices), size: 1}\n };\n}\n\nfunction concatenateBinaryPolygonGeometries(\n binaryPolygonGeometries: BinaryPolygonGeometry[],\n dimension: number\n): BinaryPolygonGeometry {\n const polygons: TypedArray[] = [];\n const primitivePolygons: TypedArray[] = [];\n\n for (const binaryPolygon of binaryPolygonGeometries) {\n const {positions, primitivePolygonIndices} = binaryPolygon;\n polygons.push(positions.value);\n primitivePolygons.push(primitivePolygonIndices.value);\n }\n\n const concatenatedPositions = new Float64Array(concatTypedArrays(polygons).buffer);\n const polygonIndices = polygons.map((p) => p.length / dimension).map(cumulativeSum(0));\n polygonIndices.unshift(0);\n\n // Combine primitivePolygonIndices from each individual polygon\n const primitivePolygonIndices = [0];\n for (const primitivePolygon of primitivePolygons) {\n primitivePolygonIndices.push(\n ...primitivePolygon\n .filter((x: number) => x > 0)\n .map((x: number) => x + primitivePolygonIndices[primitivePolygonIndices.length - 1])\n );\n }\n\n return {\n type: 'Polygon',\n positions: {value: concatenatedPositions, size: dimension},\n polygonIndices: {value: new Uint16Array(polygonIndices), size: 1},\n primitivePolygonIndices: {value: new Uint16Array(primitivePolygonIndices), size: 1}\n };\n}\n\n// TODO: remove copy; import from typed-array-utils\n// modules/math/src/geometry/typed-arrays/typed-array-utils.js\nfunction concatTypedArrays(arrays: TypedArray[]): TypedArray {\n let byteLength = 0;\n for (let i = 0; i < arrays.length; ++i) {\n byteLength += arrays[i].byteLength;\n }\n const buffer = new Uint8Array(byteLength);\n\n let byteOffset = 0;\n for (let i = 0; i < arrays.length; ++i) {\n const data = new Uint8Array(arrays[i].buffer);\n byteLength = data.length;\n for (let j = 0; j < byteLength; ++j) {\n buffer[byteOffset++] = data[j];\n }\n }\n return buffer;\n}\n"],"file":"parse-wkb.js"}
|
|
1
|
+
{"version":3,"file":"parse-wkb.js","names":["NUM_DIMENSIONS","parseWKB","arrayBuffer","view","DataView","offset","littleEndian","getUint8","geometryCode","getUint32","geometryType","type","dimension","point","parsePoint","geometry","line","parseLineString","polygon","parsePolygon","multiPoint","parseMultiPoint","multiLine","parseMultiLineString","multiPolygon","parseMultiPolygon","Error","positions","Float64Array","i","getFloat64","value","size","nPoints","pathIndices","push","Uint16Array","cumulativeSum","sum","nRings","rings","parsed","concatenatedPositions","concatTypedArrays","buffer","polygonIndices","length","primitivePolygonIndices","map","l","unshift","binaryPointGeometries","littleEndianPoint","concatenateBinaryPointGeometries","nLines","binaryLineGeometries","littleEndianLine","concatenateBinaryLineGeometries","nPolygons","binaryPolygonGeometries","littleEndianPolygon","concatenateBinaryPolygonGeometries","lines","polygons","primitivePolygons","binaryPolygon","p","primitivePolygon","filter","x","arrays","byteLength","Uint8Array","byteOffset","data","j"],"sources":["../../../src/lib/parse-wkb.ts"],"sourcesContent":["import type {\n TypedArray,\n BinaryGeometry,\n BinaryPointGeometry,\n BinaryLineGeometry,\n BinaryPolygonGeometry\n} from '@loaders.gl/schema';\n\nconst NUM_DIMENSIONS = {\n 0: 2, // 2D\n 1: 3, // 3D (Z)\n 2: 3, // 3D (M)\n 3: 4 // 4D (ZM)\n};\n\nexport default function parseWKB(arrayBuffer: ArrayBuffer): BinaryGeometry {\n const view = new DataView(arrayBuffer);\n let offset = 0;\n\n // Check endianness of data\n const littleEndian = view.getUint8(offset) === 1;\n offset++;\n\n // 4-digit code representing dimension and type of geometry\n const geometryCode = view.getUint32(offset, littleEndian);\n offset += 4;\n\n const geometryType = geometryCode % 1000;\n const type = ((geometryCode - geometryType) / 1000) as 0 | 1 | 2 | 3;\n const dimension = NUM_DIMENSIONS[type];\n\n switch (geometryType) {\n case 1:\n const point = parsePoint(view, offset, dimension, littleEndian);\n return point.geometry;\n case 2:\n const line = parseLineString(view, offset, dimension, littleEndian);\n return line.geometry;\n case 3:\n const polygon = parsePolygon(view, offset, dimension, littleEndian);\n return polygon.geometry;\n case 4:\n const multiPoint = parseMultiPoint(view, offset, dimension, littleEndian);\n multiPoint.type = 'Point';\n return multiPoint;\n case 5:\n const multiLine = parseMultiLineString(view, offset, dimension, littleEndian);\n multiLine.type = 'LineString';\n return multiLine;\n case 6:\n const multiPolygon = parseMultiPolygon(view, offset, dimension, littleEndian);\n multiPolygon.type = 'Polygon';\n return multiPolygon;\n // case 7:\n // TODO: handle GeometryCollections\n // return parseGeometryCollection(view, offset, dimension, littleEndian);\n default:\n throw new Error(`WKB: Unsupported geometry type: ${geometryType}`);\n }\n}\n\n// Primitives; parse point and linear ring\nfunction parsePoint(\n view: DataView,\n offset: number,\n dimension: number,\n littleEndian: boolean\n): {geometry: BinaryPointGeometry; offset: number} {\n const positions = new Float64Array(dimension);\n for (let i = 0; i < dimension; i++) {\n positions[i] = view.getFloat64(offset, littleEndian);\n offset += 8;\n }\n\n return {\n geometry: {type: 'Point', positions: {value: positions, size: dimension}},\n offset\n };\n}\n\nfunction parseLineString(\n view: DataView,\n offset: number,\n dimension: number,\n littleEndian: boolean\n): {geometry: BinaryLineGeometry; offset: number} {\n const nPoints = view.getUint32(offset, littleEndian);\n offset += 4;\n\n // Instantiate array\n const positions = new Float64Array(nPoints * dimension);\n for (let i = 0; i < nPoints * dimension; i++) {\n positions[i] = view.getFloat64(offset, littleEndian);\n offset += 8;\n }\n\n const pathIndices = [0];\n if (nPoints > 0) {\n pathIndices.push(nPoints);\n }\n\n return {\n geometry: {\n type: 'LineString',\n positions: {value: positions, size: dimension},\n pathIndices: {value: new Uint16Array(pathIndices), size: 1}\n },\n offset\n };\n}\n\n// https://stackoverflow.com/a/55261098\nconst cumulativeSum = (sum: number) => (value: number) => (sum += value);\n\nfunction parsePolygon(\n view: DataView,\n offset: number,\n dimension: number,\n littleEndian: boolean\n): {geometry: BinaryPolygonGeometry; offset: number} {\n const nRings = view.getUint32(offset, littleEndian);\n offset += 4;\n\n const rings: TypedArray[] = [];\n for (let i = 0; i < nRings; i++) {\n const parsed = parseLineString(view, offset, dimension, littleEndian);\n const {positions} = parsed.geometry;\n offset = parsed.offset;\n rings.push(positions.value);\n }\n\n const concatenatedPositions = new Float64Array(concatTypedArrays(rings).buffer);\n const polygonIndices = [0];\n if (concatenatedPositions.length > 0) {\n polygonIndices.push(concatenatedPositions.length / dimension);\n }\n const primitivePolygonIndices = rings.map((l) => l.length / dimension).map(cumulativeSum(0));\n primitivePolygonIndices.unshift(0);\n\n return {\n geometry: {\n type: 'Polygon',\n positions: {value: concatenatedPositions, size: dimension},\n polygonIndices: {\n value: new Uint16Array(polygonIndices),\n size: 1\n },\n primitivePolygonIndices: {value: new Uint16Array(primitivePolygonIndices), size: 1}\n },\n offset\n };\n}\n\nfunction parseMultiPoint(\n view: DataView,\n offset: number,\n dimension: number,\n littleEndian: boolean\n): BinaryPointGeometry {\n const nPoints = view.getUint32(offset, littleEndian);\n offset += 4;\n\n const binaryPointGeometries: BinaryPointGeometry[] = [];\n for (let i = 0; i < nPoints; i++) {\n // Byte order for point\n const littleEndianPoint = view.getUint8(offset) === 1;\n offset++;\n\n // Assert point type\n if (view.getUint32(offset, littleEndianPoint) % 1000 !== 1) {\n throw new Error('WKB: Inner geometries of MultiPoint not of type Point');\n }\n\n offset += 4;\n\n const parsed = parsePoint(view, offset, dimension, littleEndianPoint);\n offset = parsed.offset;\n binaryPointGeometries.push(parsed.geometry);\n }\n\n return concatenateBinaryPointGeometries(binaryPointGeometries, dimension);\n}\n\nfunction parseMultiLineString(\n view: DataView,\n offset: number,\n dimension: number,\n littleEndian: boolean\n): BinaryLineGeometry {\n const nLines = view.getUint32(offset, littleEndian);\n offset += 4;\n\n const binaryLineGeometries: BinaryLineGeometry[] = [];\n for (let i = 0; i < nLines; i++) {\n // Byte order for line\n const littleEndianLine = view.getUint8(offset) === 1;\n offset++;\n\n // Assert type LineString\n if (view.getUint32(offset, littleEndianLine) % 1000 !== 2) {\n throw new Error('WKB: Inner geometries of MultiLineString not of type LineString');\n }\n offset += 4;\n\n const parsed = parseLineString(view, offset, dimension, littleEndianLine);\n offset = parsed.offset;\n binaryLineGeometries.push(parsed.geometry);\n }\n\n return concatenateBinaryLineGeometries(binaryLineGeometries, dimension);\n}\n\nfunction parseMultiPolygon(\n view: DataView,\n offset: number,\n dimension: number,\n littleEndian: boolean\n): BinaryPolygonGeometry {\n const nPolygons = view.getUint32(offset, littleEndian);\n offset += 4;\n\n const binaryPolygonGeometries: BinaryPolygonGeometry[] = [];\n for (let i = 0; i < nPolygons; i++) {\n // Byte order for polygon\n const littleEndianPolygon = view.getUint8(offset) === 1;\n offset++;\n\n // Assert type Polygon\n if (view.getUint32(offset, littleEndianPolygon) % 1000 !== 3) {\n throw new Error('WKB: Inner geometries of MultiPolygon not of type Polygon');\n }\n offset += 4;\n\n const parsed = parsePolygon(view, offset, dimension, littleEndianPolygon);\n offset = parsed.offset;\n binaryPolygonGeometries.push(parsed.geometry);\n }\n\n return concatenateBinaryPolygonGeometries(binaryPolygonGeometries, dimension);\n}\n\n// TODO - move to loaders.gl/schema/gis\n\nfunction concatenateBinaryPointGeometries(\n binaryPointGeometries: BinaryPointGeometry[],\n dimension: number\n): BinaryPointGeometry {\n const positions: TypedArray[] = binaryPointGeometries.map((geometry) => geometry.positions.value);\n const concatenatedPositions = new Float64Array(concatTypedArrays(positions).buffer);\n\n return {\n type: 'Point',\n positions: {value: concatenatedPositions, size: dimension}\n };\n}\n\nfunction concatenateBinaryLineGeometries(\n binaryLineGeometries: BinaryLineGeometry[],\n dimension: number\n): BinaryLineGeometry {\n const lines: TypedArray[] = binaryLineGeometries.map((geometry) => geometry.positions.value);\n const concatenatedPositions = new Float64Array(concatTypedArrays(lines).buffer);\n const pathIndices = lines.map((line) => line.length / dimension).map(cumulativeSum(0));\n pathIndices.unshift(0);\n\n return {\n type: 'LineString',\n positions: {value: concatenatedPositions, size: dimension},\n pathIndices: {value: new Uint16Array(pathIndices), size: 1}\n };\n}\n\nfunction concatenateBinaryPolygonGeometries(\n binaryPolygonGeometries: BinaryPolygonGeometry[],\n dimension: number\n): BinaryPolygonGeometry {\n const polygons: TypedArray[] = [];\n const primitivePolygons: TypedArray[] = [];\n\n for (const binaryPolygon of binaryPolygonGeometries) {\n const {positions, primitivePolygonIndices} = binaryPolygon;\n polygons.push(positions.value);\n primitivePolygons.push(primitivePolygonIndices.value);\n }\n\n const concatenatedPositions = new Float64Array(concatTypedArrays(polygons).buffer);\n const polygonIndices = polygons.map((p) => p.length / dimension).map(cumulativeSum(0));\n polygonIndices.unshift(0);\n\n // Combine primitivePolygonIndices from each individual polygon\n const primitivePolygonIndices = [0];\n for (const primitivePolygon of primitivePolygons) {\n primitivePolygonIndices.push(\n ...primitivePolygon\n .filter((x: number) => x > 0)\n .map((x: number) => x + primitivePolygonIndices[primitivePolygonIndices.length - 1])\n );\n }\n\n return {\n type: 'Polygon',\n positions: {value: concatenatedPositions, size: dimension},\n polygonIndices: {value: new Uint16Array(polygonIndices), size: 1},\n primitivePolygonIndices: {value: new Uint16Array(primitivePolygonIndices), size: 1}\n };\n}\n\n// TODO: remove copy; import from typed-array-utils\n// modules/math/src/geometry/typed-arrays/typed-array-utils.js\nfunction concatTypedArrays(arrays: TypedArray[]): TypedArray {\n let byteLength = 0;\n for (let i = 0; i < arrays.length; ++i) {\n byteLength += arrays[i].byteLength;\n }\n const buffer = new Uint8Array(byteLength);\n\n let byteOffset = 0;\n for (let i = 0; i < arrays.length; ++i) {\n const data = new Uint8Array(arrays[i].buffer);\n byteLength = data.length;\n for (let j = 0; j < byteLength; ++j) {\n buffer[byteOffset++] = data[j];\n }\n }\n return buffer;\n}\n"],"mappings":"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"}
|
|
@@ -1,22 +1,20 @@
|
|
|
1
|
+
|
|
2
|
+
|
|
1
3
|
const numberRegexp = /[-+]?([0-9]*\.[0-9]+|[0-9]+)([eE][-+]?[0-9]+)?/;
|
|
2
4
|
const tuples = new RegExp('^' + numberRegexp.source + '(\\s' + numberRegexp.source + '){1,}');
|
|
5
|
+
|
|
3
6
|
export default function parseWKT(input) {
|
|
4
7
|
const parts = input.split(';');
|
|
5
|
-
|
|
6
8
|
let _ = parts.pop();
|
|
7
|
-
|
|
8
9
|
const srid = (parts.shift() || '').split('=').pop();
|
|
9
10
|
let i = 0;
|
|
10
|
-
|
|
11
11
|
function $(re) {
|
|
12
12
|
const match = _.substring(i).match(re);
|
|
13
|
-
|
|
14
13
|
if (!match) return null;else {
|
|
15
14
|
i += match[0].length;
|
|
16
15
|
return match[0];
|
|
17
16
|
}
|
|
18
17
|
}
|
|
19
|
-
|
|
20
18
|
function crs(obj) {
|
|
21
19
|
if (obj && srid.match(/\d+/)) {
|
|
22
20
|
obj.crs = {
|
|
@@ -26,14 +24,11 @@ export default function parseWKT(input) {
|
|
|
26
24
|
}
|
|
27
25
|
};
|
|
28
26
|
}
|
|
29
|
-
|
|
30
27
|
return obj;
|
|
31
28
|
}
|
|
32
|
-
|
|
33
29
|
function white() {
|
|
34
30
|
$(/^\s*/);
|
|
35
31
|
}
|
|
36
|
-
|
|
37
32
|
function multicoords() {
|
|
38
33
|
white();
|
|
39
34
|
let depth = 0;
|
|
@@ -41,7 +36,6 @@ export default function parseWKT(input) {
|
|
|
41
36
|
const stack = [rings];
|
|
42
37
|
let pointer = rings;
|
|
43
38
|
let elem;
|
|
44
|
-
|
|
45
39
|
while (elem = $(/^(\()/) || $(/^(\))/) || $(/^(,)/) || $(tuples)) {
|
|
46
40
|
if (elem === '(') {
|
|
47
41
|
stack.push(pointer);
|
|
@@ -50,6 +44,7 @@ export default function parseWKT(input) {
|
|
|
50
44
|
depth++;
|
|
51
45
|
} else if (elem === ')') {
|
|
52
46
|
if (pointer.length === 0) return null;
|
|
47
|
+
|
|
53
48
|
pointer = stack.pop();
|
|
54
49
|
if (!pointer) return null;
|
|
55
50
|
depth--;
|
|
@@ -62,19 +57,15 @@ export default function parseWKT(input) {
|
|
|
62
57
|
} else {
|
|
63
58
|
return null;
|
|
64
59
|
}
|
|
65
|
-
|
|
66
60
|
white();
|
|
67
61
|
}
|
|
68
|
-
|
|
69
62
|
if (depth !== 0) return null;
|
|
70
63
|
return rings;
|
|
71
64
|
}
|
|
72
|
-
|
|
73
65
|
function coords() {
|
|
74
66
|
const list = [];
|
|
75
67
|
let item;
|
|
76
68
|
let pt;
|
|
77
|
-
|
|
78
69
|
while (pt = $(tuples) || $(/^(,)/)) {
|
|
79
70
|
if (pt === ',') {
|
|
80
71
|
list.push(item);
|
|
@@ -83,14 +74,11 @@ export default function parseWKT(input) {
|
|
|
83
74
|
if (!item) item = [];
|
|
84
75
|
Array.prototype.push.apply(item, pt.split(/\s/g).map(parseFloat));
|
|
85
76
|
}
|
|
86
|
-
|
|
87
77
|
white();
|
|
88
78
|
}
|
|
89
|
-
|
|
90
79
|
if (item) list.push(item);else return null;
|
|
91
80
|
return list.length ? list : null;
|
|
92
81
|
}
|
|
93
|
-
|
|
94
82
|
function point() {
|
|
95
83
|
if (!$(/^(point(\sz)?)/i)) return null;
|
|
96
84
|
white();
|
|
@@ -104,13 +92,10 @@ export default function parseWKT(input) {
|
|
|
104
92
|
coordinates: c[0]
|
|
105
93
|
};
|
|
106
94
|
}
|
|
107
|
-
|
|
108
95
|
function multipoint() {
|
|
109
96
|
if (!$(/^(multipoint)/i)) return null;
|
|
110
97
|
white();
|
|
111
|
-
|
|
112
98
|
const newCoordsFormat = _.substring(_.indexOf('(') + 1, _.length - 1).replace(/\(/g, '').replace(/\)/g, '');
|
|
113
|
-
|
|
114
99
|
_ = 'MULTIPOINT (' + newCoordsFormat + ')';
|
|
115
100
|
const c = multicoords();
|
|
116
101
|
if (!c) return null;
|
|
@@ -120,7 +105,6 @@ export default function parseWKT(input) {
|
|
|
120
105
|
coordinates: c
|
|
121
106
|
};
|
|
122
107
|
}
|
|
123
|
-
|
|
124
108
|
function multilinestring() {
|
|
125
109
|
if (!$(/^(multilinestring)/i)) return null;
|
|
126
110
|
white();
|
|
@@ -132,7 +116,6 @@ export default function parseWKT(input) {
|
|
|
132
116
|
coordinates: c
|
|
133
117
|
};
|
|
134
118
|
}
|
|
135
|
-
|
|
136
119
|
function linestring() {
|
|
137
120
|
if (!$(/^(linestring(\sz)?)/i)) return null;
|
|
138
121
|
white();
|
|
@@ -145,7 +128,6 @@ export default function parseWKT(input) {
|
|
|
145
128
|
coordinates: c
|
|
146
129
|
};
|
|
147
130
|
}
|
|
148
|
-
|
|
149
131
|
function polygon() {
|
|
150
132
|
if (!$(/^(polygon(\sz)?)/i)) return null;
|
|
151
133
|
white();
|
|
@@ -156,7 +138,6 @@ export default function parseWKT(input) {
|
|
|
156
138
|
coordinates: c
|
|
157
139
|
};
|
|
158
140
|
}
|
|
159
|
-
|
|
160
141
|
function multipolygon() {
|
|
161
142
|
if (!$(/^(multipolygon)/i)) return null;
|
|
162
143
|
white();
|
|
@@ -167,32 +148,27 @@ export default function parseWKT(input) {
|
|
|
167
148
|
coordinates: c
|
|
168
149
|
};
|
|
169
150
|
}
|
|
170
|
-
|
|
171
151
|
function geometrycollection() {
|
|
172
152
|
const geometries = [];
|
|
173
153
|
let geometry;
|
|
174
154
|
if (!$(/^(geometrycollection)/i)) return null;
|
|
175
155
|
white();
|
|
176
156
|
if (!$(/^(\()/)) return null;
|
|
177
|
-
|
|
178
157
|
while (geometry = root()) {
|
|
179
158
|
geometries.push(geometry);
|
|
180
159
|
white();
|
|
181
160
|
$(/^(,)/);
|
|
182
161
|
white();
|
|
183
162
|
}
|
|
184
|
-
|
|
185
163
|
if (!$(/^(\))/)) return null;
|
|
186
164
|
return {
|
|
187
165
|
type: 'GeometryCollection',
|
|
188
166
|
geometries: geometries
|
|
189
167
|
};
|
|
190
168
|
}
|
|
191
|
-
|
|
192
169
|
function root() {
|
|
193
170
|
return point() || linestring() || polygon() || multipoint() || multilinestring() || multipolygon() || geometrycollection();
|
|
194
171
|
}
|
|
195
|
-
|
|
196
172
|
return crs(root());
|
|
197
173
|
}
|
|
198
174
|
//# sourceMappingURL=parse-wkt.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/lib/parse-wkt.ts"],"names":["numberRegexp","tuples","RegExp","source","parseWKT","input","parts","split","_","pop","srid","shift","i","$","re","match","substring","length","crs","obj","type","properties","name","white","multicoords","depth","rings","stack","pointer","elem","push","some","isNaN","Array","prototype","apply","map","parseFloat","coords","list","item","pt","point","c","coordinates","multipoint","newCoordsFormat","indexOf","replace","multilinestring","linestring","polygon","multipolygon","geometrycollection","geometries","geometry","root"],"mappings":"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","sourcesContent":["// Fork of https://github.com/mapbox/wellknown under ISC license (MIT/BSD-2-clause equivalent)\n\n/* eslint-disable */\n// @ts-nocheck\n\nconst numberRegexp = /[-+]?([0-9]*\\.[0-9]+|[0-9]+)([eE][-+]?[0-9]+)?/;\n// Matches sequences like '100 100' or '100 100 100'.\nconst tuples = new RegExp('^' + numberRegexp.source + '(\\\\s' + numberRegexp.source + '){1,}');\n\n/**\n * Parse WKT and return GeoJSON.\n *\n * @param {string} _ A WKT geometry\n * @return {?Object} A GeoJSON geometry object\n **/\nexport default function parseWKT(input) {\n const parts = input.split(';');\n let _ = parts.pop();\n const srid = (parts.shift() || '').split('=').pop();\n\n let i = 0;\n\n function $(re) {\n const match = _.substring(i).match(re);\n if (!match) return null;\n else {\n i += match[0].length;\n return match[0];\n }\n }\n\n function crs(obj) {\n if (obj && srid.match(/\\d+/)) {\n obj.crs = {\n type: 'name',\n properties: {\n name: 'urn:ogc:def:crs:EPSG::' + srid\n }\n };\n }\n\n return obj;\n }\n\n function white() {\n $(/^\\s*/);\n }\n\n function multicoords() {\n white();\n let depth = 0;\n const rings = [];\n const stack = [rings];\n let pointer = rings;\n let elem;\n\n while ((elem = $(/^(\\()/) || $(/^(\\))/) || $(/^(,)/) || $(tuples))) {\n if (elem === '(') {\n stack.push(pointer);\n pointer = [];\n stack[stack.length - 1].push(pointer);\n depth++;\n } else if (elem === ')') {\n // For the case: Polygon(), ...\n if (pointer.length === 0) return null;\n\n // @ts-ignore\n pointer = stack.pop();\n // the stack was empty, input was malformed\n if (!pointer) return null;\n depth--;\n if (depth === 0) break;\n } else if (elem === ',') {\n pointer = [];\n stack[stack.length - 1].push(pointer);\n } else if (!elem.split(/\\s/g).some(isNaN)) {\n Array.prototype.push.apply(pointer, elem.split(/\\s/g).map(parseFloat));\n } else {\n return null;\n }\n white();\n }\n\n if (depth !== 0) return null;\n\n return rings;\n }\n\n function coords() {\n const list = [];\n let item;\n let pt;\n while ((pt = $(tuples) || $(/^(,)/))) {\n if (pt === ',') {\n list.push(item);\n item = [];\n } else if (!pt.split(/\\s/g).some(isNaN)) {\n if (!item) item = [];\n Array.prototype.push.apply(item, pt.split(/\\s/g).map(parseFloat));\n }\n white();\n }\n\n if (item) list.push(item);\n else return null;\n\n return list.length ? list : null;\n }\n\n function point() {\n if (!$(/^(point(\\sz)?)/i)) return null;\n white();\n if (!$(/^(\\()/)) return null;\n const c = coords();\n if (!c) return null;\n white();\n if (!$(/^(\\))/)) return null;\n return {\n type: 'Point',\n coordinates: c[0]\n };\n }\n\n function multipoint() {\n if (!$(/^(multipoint)/i)) return null;\n white();\n const newCoordsFormat = _.substring(_.indexOf('(') + 1, _.length - 1)\n .replace(/\\(/g, '')\n .replace(/\\)/g, '');\n _ = 'MULTIPOINT (' + newCoordsFormat + ')';\n const c = multicoords();\n if (!c) return null;\n white();\n return {\n type: 'MultiPoint',\n coordinates: c\n };\n }\n\n function multilinestring() {\n if (!$(/^(multilinestring)/i)) return null;\n white();\n const c = multicoords();\n if (!c) return null;\n white();\n return {\n type: 'MultiLineString',\n coordinates: c\n };\n }\n\n function linestring() {\n if (!$(/^(linestring(\\sz)?)/i)) return null;\n white();\n if (!$(/^(\\()/)) return null;\n const c = coords();\n if (!c) return null;\n if (!$(/^(\\))/)) return null;\n return {\n type: 'LineString',\n coordinates: c\n };\n }\n\n function polygon() {\n if (!$(/^(polygon(\\sz)?)/i)) return null;\n white();\n const c = multicoords();\n if (!c) return null;\n return {\n type: 'Polygon',\n coordinates: c\n };\n }\n\n function multipolygon() {\n if (!$(/^(multipolygon)/i)) return null;\n white();\n const c = multicoords();\n if (!c) return null;\n return {\n type: 'MultiPolygon',\n coordinates: c\n };\n }\n\n function geometrycollection() {\n const geometries = [];\n let geometry;\n\n if (!$(/^(geometrycollection)/i)) return null;\n white();\n\n if (!$(/^(\\()/)) return null;\n while ((geometry = root())) {\n geometries.push(geometry);\n white();\n $(/^(,)/);\n white();\n }\n if (!$(/^(\\))/)) return null;\n\n return {\n type: 'GeometryCollection',\n geometries: geometries\n };\n }\n\n function root() {\n return (\n point() ||\n linestring() ||\n polygon() ||\n multipoint() ||\n multilinestring() ||\n multipolygon() ||\n geometrycollection()\n );\n }\n\n return crs(root());\n}\n"],"file":"parse-wkt.js"}
|
|
1
|
+
{"version":3,"file":"parse-wkt.js","names":["numberRegexp","tuples","RegExp","source","parseWKT","input","parts","split","_","pop","srid","shift","i","$","re","match","substring","length","crs","obj","type","properties","name","white","multicoords","depth","rings","stack","pointer","elem","push","some","isNaN","Array","prototype","apply","map","parseFloat","coords","list","item","pt","point","c","coordinates","multipoint","newCoordsFormat","indexOf","replace","multilinestring","linestring","polygon","multipolygon","geometrycollection","geometries","geometry","root"],"sources":["../../../src/lib/parse-wkt.ts"],"sourcesContent":["// Fork of https://github.com/mapbox/wellknown under ISC license (MIT/BSD-2-clause equivalent)\n\n/* eslint-disable */\n// @ts-nocheck\n\nconst numberRegexp = /[-+]?([0-9]*\\.[0-9]+|[0-9]+)([eE][-+]?[0-9]+)?/;\n// Matches sequences like '100 100' or '100 100 100'.\nconst tuples = new RegExp('^' + numberRegexp.source + '(\\\\s' + numberRegexp.source + '){1,}');\n\n/**\n * Parse WKT and return GeoJSON.\n *\n * @param {string} _ A WKT geometry\n * @return {?Object} A GeoJSON geometry object\n **/\nexport default function parseWKT(input) {\n const parts = input.split(';');\n let _ = parts.pop();\n const srid = (parts.shift() || '').split('=').pop();\n\n let i = 0;\n\n function $(re) {\n const match = _.substring(i).match(re);\n if (!match) return null;\n else {\n i += match[0].length;\n return match[0];\n }\n }\n\n function crs(obj) {\n if (obj && srid.match(/\\d+/)) {\n obj.crs = {\n type: 'name',\n properties: {\n name: 'urn:ogc:def:crs:EPSG::' + srid\n }\n };\n }\n\n return obj;\n }\n\n function white() {\n $(/^\\s*/);\n }\n\n function multicoords() {\n white();\n let depth = 0;\n const rings = [];\n const stack = [rings];\n let pointer = rings;\n let elem;\n\n while ((elem = $(/^(\\()/) || $(/^(\\))/) || $(/^(,)/) || $(tuples))) {\n if (elem === '(') {\n stack.push(pointer);\n pointer = [];\n stack[stack.length - 1].push(pointer);\n depth++;\n } else if (elem === ')') {\n // For the case: Polygon(), ...\n if (pointer.length === 0) return null;\n\n // @ts-ignore\n pointer = stack.pop();\n // the stack was empty, input was malformed\n if (!pointer) return null;\n depth--;\n if (depth === 0) break;\n } else if (elem === ',') {\n pointer = [];\n stack[stack.length - 1].push(pointer);\n } else if (!elem.split(/\\s/g).some(isNaN)) {\n Array.prototype.push.apply(pointer, elem.split(/\\s/g).map(parseFloat));\n } else {\n return null;\n }\n white();\n }\n\n if (depth !== 0) return null;\n\n return rings;\n }\n\n function coords() {\n const list = [];\n let item;\n let pt;\n while ((pt = $(tuples) || $(/^(,)/))) {\n if (pt === ',') {\n list.push(item);\n item = [];\n } else if (!pt.split(/\\s/g).some(isNaN)) {\n if (!item) item = [];\n Array.prototype.push.apply(item, pt.split(/\\s/g).map(parseFloat));\n }\n white();\n }\n\n if (item) list.push(item);\n else return null;\n\n return list.length ? list : null;\n }\n\n function point() {\n if (!$(/^(point(\\sz)?)/i)) return null;\n white();\n if (!$(/^(\\()/)) return null;\n const c = coords();\n if (!c) return null;\n white();\n if (!$(/^(\\))/)) return null;\n return {\n type: 'Point',\n coordinates: c[0]\n };\n }\n\n function multipoint() {\n if (!$(/^(multipoint)/i)) return null;\n white();\n const newCoordsFormat = _.substring(_.indexOf('(') + 1, _.length - 1)\n .replace(/\\(/g, '')\n .replace(/\\)/g, '');\n _ = 'MULTIPOINT (' + newCoordsFormat + ')';\n const c = multicoords();\n if (!c) return null;\n white();\n return {\n type: 'MultiPoint',\n coordinates: c\n };\n }\n\n function multilinestring() {\n if (!$(/^(multilinestring)/i)) return null;\n white();\n const c = multicoords();\n if (!c) return null;\n white();\n return {\n type: 'MultiLineString',\n coordinates: c\n };\n }\n\n function linestring() {\n if (!$(/^(linestring(\\sz)?)/i)) return null;\n white();\n if (!$(/^(\\()/)) return null;\n const c = coords();\n if (!c) return null;\n if (!$(/^(\\))/)) return null;\n return {\n type: 'LineString',\n coordinates: c\n };\n }\n\n function polygon() {\n if (!$(/^(polygon(\\sz)?)/i)) return null;\n white();\n const c = multicoords();\n if (!c) return null;\n return {\n type: 'Polygon',\n coordinates: c\n };\n }\n\n function multipolygon() {\n if (!$(/^(multipolygon)/i)) return null;\n white();\n const c = multicoords();\n if (!c) return null;\n return {\n type: 'MultiPolygon',\n coordinates: c\n };\n }\n\n function geometrycollection() {\n const geometries = [];\n let geometry;\n\n if (!$(/^(geometrycollection)/i)) return null;\n white();\n\n if (!$(/^(\\()/)) return null;\n while ((geometry = root())) {\n geometries.push(geometry);\n white();\n $(/^(,)/);\n white();\n }\n if (!$(/^(\\))/)) return null;\n\n return {\n type: 'GeometryCollection',\n geometries: geometries\n };\n }\n\n function root() {\n return (\n point() ||\n linestring() ||\n polygon() ||\n multipoint() ||\n multilinestring() ||\n multipolygon() ||\n geometrycollection()\n );\n }\n\n return crs(root());\n}\n"],"mappings":"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"}
|