@loaders.gl/wkt 4.0.0-alpha.5 → 4.0.0-alpha.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (93) hide show
  1. package/dist/bundle.js +2 -2
  2. package/dist/dist.min.js +9 -3
  3. package/dist/es5/bundle.js +6 -0
  4. package/dist/es5/bundle.js.map +1 -0
  5. package/dist/es5/index.js +46 -0
  6. package/dist/es5/index.js.map +1 -0
  7. package/dist/es5/lib/encode-wkb.js +374 -0
  8. package/dist/es5/lib/encode-wkb.js.map +1 -0
  9. package/dist/es5/lib/encode-wkt.js +45 -0
  10. package/dist/es5/lib/encode-wkt.js.map +1 -0
  11. package/dist/es5/lib/parse-wkb.js +290 -0
  12. package/dist/es5/lib/parse-wkb.js.map +1 -0
  13. package/dist/es5/lib/parse-wkt.js +176 -0
  14. package/dist/es5/lib/parse-wkt.js.map +1 -0
  15. package/dist/es5/lib/utils/binary-writer.js +161 -0
  16. package/dist/es5/lib/utils/binary-writer.js.map +1 -0
  17. package/dist/es5/lib/utils/version.js +9 -0
  18. package/dist/es5/lib/utils/version.js.map +1 -0
  19. package/dist/es5/wkb-loader.js +54 -0
  20. package/dist/es5/wkb-loader.js.map +1 -0
  21. package/dist/es5/wkb-writer.js +25 -0
  22. package/dist/es5/wkb-writer.js.map +1 -0
  23. package/dist/es5/wkt-loader.js +51 -0
  24. package/dist/es5/wkt-loader.js.map +1 -0
  25. package/dist/es5/wkt-writer.js +22 -0
  26. package/dist/es5/wkt-writer.js.map +1 -0
  27. package/dist/es5/workers/wkb-worker.js +6 -0
  28. package/dist/es5/workers/wkb-worker.js.map +1 -0
  29. package/dist/es5/workers/wkt-worker.js +6 -0
  30. package/dist/es5/workers/wkt-worker.js.map +1 -0
  31. package/dist/esm/bundle.js +4 -0
  32. package/dist/esm/bundle.js.map +1 -0
  33. package/dist/esm/index.js +5 -0
  34. package/dist/esm/index.js.map +1 -0
  35. package/dist/esm/lib/encode-wkb.js +253 -0
  36. package/dist/esm/lib/encode-wkb.js.map +1 -0
  37. package/dist/esm/lib/encode-wkt.js +39 -0
  38. package/dist/esm/lib/encode-wkt.js.map +1 -0
  39. package/dist/esm/lib/parse-wkb.js +255 -0
  40. package/dist/esm/lib/parse-wkb.js.map +1 -0
  41. package/dist/esm/lib/parse-wkt.js +170 -0
  42. package/dist/esm/lib/parse-wkt.js.map +1 -0
  43. package/dist/esm/lib/utils/binary-writer.js +114 -0
  44. package/dist/esm/lib/utils/binary-writer.js.map +1 -0
  45. package/dist/esm/lib/utils/version.js +2 -0
  46. package/dist/esm/lib/utils/version.js.map +1 -0
  47. package/dist/esm/wkb-loader.js +23 -0
  48. package/dist/esm/wkb-loader.js.map +1 -0
  49. package/dist/esm/wkb-writer.js +17 -0
  50. package/dist/esm/wkb-writer.js.map +1 -0
  51. package/dist/esm/wkt-loader.js +22 -0
  52. package/dist/esm/wkt-loader.js.map +1 -0
  53. package/dist/esm/wkt-writer.js +14 -0
  54. package/dist/esm/wkt-writer.js.map +1 -0
  55. package/dist/esm/workers/wkb-worker.js +4 -0
  56. package/dist/esm/workers/wkb-worker.js.map +1 -0
  57. package/dist/esm/workers/wkt-worker.js +4 -0
  58. package/dist/esm/workers/wkt-worker.js.map +1 -0
  59. package/dist/index.js +13 -5
  60. package/dist/lib/encode-wkb.d.ts +6 -1
  61. package/dist/lib/encode-wkb.d.ts.map +1 -1
  62. package/dist/lib/encode-wkb.js +250 -278
  63. package/dist/lib/encode-wkt.js +35 -41
  64. package/dist/lib/parse-wkb.js +208 -276
  65. package/dist/lib/parse-wkt.js +218 -189
  66. package/dist/lib/utils/binary-writer.js +117 -150
  67. package/dist/lib/utils/version.js +7 -2
  68. package/dist/wkb-loader.js +32 -20
  69. package/dist/wkb-writer.d.ts +1 -1
  70. package/dist/wkb-writer.d.ts.map +1 -1
  71. package/dist/wkb-writer.js +25 -13
  72. package/dist/wkt-loader.js +31 -19
  73. package/dist/wkt-worker.js +48 -16
  74. package/dist/wkt-writer.js +22 -13
  75. package/dist/workers/wkb-worker.js +5 -4
  76. package/dist/workers/wkt-worker.js +5 -4
  77. package/package.json +6 -6
  78. package/src/lib/encode-wkb.ts +12 -1
  79. package/src/wkb-writer.ts +6 -3
  80. package/dist/bundle.js.map +0 -1
  81. package/dist/index.js.map +0 -1
  82. package/dist/lib/encode-wkb.js.map +0 -1
  83. package/dist/lib/encode-wkt.js.map +0 -1
  84. package/dist/lib/parse-wkb.js.map +0 -1
  85. package/dist/lib/parse-wkt.js.map +0 -1
  86. package/dist/lib/utils/binary-writer.js.map +0 -1
  87. package/dist/lib/utils/version.js.map +0 -1
  88. package/dist/wkb-loader.js.map +0 -1
  89. package/dist/wkb-writer.js.map +0 -1
  90. package/dist/wkt-loader.js.map +0 -1
  91. package/dist/wkt-writer.js.map +0 -1
  92. package/dist/workers/wkb-worker.js.map +0 -1
  93. package/dist/workers/wkt-worker.js.map +0 -1
@@ -1,304 +1,236 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
1
3
  const NUM_DIMENSIONS = {
2
- 0: 2,
3
- 1: 3,
4
- 2: 3,
5
- 3: 4
4
+ 0: 2,
5
+ 1: 3,
6
+ 2: 3,
7
+ 3: 4 // 4D (ZM)
6
8
  };
7
- export default function parseWKB(arrayBuffer) {
8
- const view = new DataView(arrayBuffer);
9
- let offset = 0;
10
- const littleEndian = view.getUint8(offset) === 1;
11
- offset++;
12
- const geometryCode = view.getUint32(offset, littleEndian);
13
- offset += 4;
14
- const geometryType = geometryCode % 1000;
15
- const type = (geometryCode - geometryType) / 1000;
16
- const dimension = NUM_DIMENSIONS[type];
17
-
18
- switch (geometryType) {
19
- case 1:
20
- const point = parsePoint(view, offset, dimension, littleEndian);
21
- return point.geometry;
22
-
23
- case 2:
24
- const line = parseLineString(view, offset, dimension, littleEndian);
25
- return line.geometry;
26
-
27
- case 3:
28
- const polygon = parsePolygon(view, offset, dimension, littleEndian);
29
- return polygon.geometry;
30
-
31
- case 4:
32
- const multiPoint = parseMultiPoint(view, offset, dimension, littleEndian);
33
- multiPoint.type = 'Point';
34
- return multiPoint;
35
-
36
- case 5:
37
- const multiLine = parseMultiLineString(view, offset, dimension, littleEndian);
38
- multiLine.type = 'LineString';
39
- return multiLine;
40
-
41
- case 6:
42
- const multiPolygon = parseMultiPolygon(view, offset, dimension, littleEndian);
43
- multiPolygon.type = 'Polygon';
44
- return multiPolygon;
45
-
46
- default:
47
- throw new Error("WKB: Unsupported geometry type: ".concat(geometryType));
48
- }
9
+ function parseWKB(arrayBuffer) {
10
+ const view = new DataView(arrayBuffer);
11
+ let offset = 0;
12
+ // Check endianness of data
13
+ const littleEndian = view.getUint8(offset) === 1;
14
+ offset++;
15
+ // 4-digit code representing dimension and type of geometry
16
+ const geometryCode = view.getUint32(offset, littleEndian);
17
+ offset += 4;
18
+ const geometryType = geometryCode % 1000;
19
+ const type = ((geometryCode - geometryType) / 1000);
20
+ const dimension = NUM_DIMENSIONS[type];
21
+ switch (geometryType) {
22
+ case 1:
23
+ const point = parsePoint(view, offset, dimension, littleEndian);
24
+ return point.geometry;
25
+ case 2:
26
+ const line = parseLineString(view, offset, dimension, littleEndian);
27
+ return line.geometry;
28
+ case 3:
29
+ const polygon = parsePolygon(view, offset, dimension, littleEndian);
30
+ return polygon.geometry;
31
+ case 4:
32
+ const multiPoint = parseMultiPoint(view, offset, dimension, littleEndian);
33
+ multiPoint.type = 'Point';
34
+ return multiPoint;
35
+ case 5:
36
+ const multiLine = parseMultiLineString(view, offset, dimension, littleEndian);
37
+ multiLine.type = 'LineString';
38
+ return multiLine;
39
+ case 6:
40
+ const multiPolygon = parseMultiPolygon(view, offset, dimension, littleEndian);
41
+ multiPolygon.type = 'Polygon';
42
+ return multiPolygon;
43
+ // case 7:
44
+ // TODO: handle GeometryCollections
45
+ // return parseGeometryCollection(view, offset, dimension, littleEndian);
46
+ default:
47
+ throw new Error(`WKB: Unsupported geometry type: ${geometryType}`);
48
+ }
49
49
  }
50
-
50
+ exports.default = parseWKB;
51
+ // Primitives; parse point and linear ring
51
52
  function parsePoint(view, offset, dimension, littleEndian) {
52
- const positions = new Float64Array(dimension);
53
-
54
- for (let i = 0; i < dimension; i++) {
55
- positions[i] = view.getFloat64(offset, littleEndian);
56
- offset += 8;
57
- }
58
-
59
- return {
60
- geometry: {
61
- type: 'Point',
62
- positions: {
63
- value: positions,
64
- size: dimension
65
- }
66
- },
67
- offset
68
- };
53
+ const positions = new Float64Array(dimension);
54
+ for (let i = 0; i < dimension; i++) {
55
+ positions[i] = view.getFloat64(offset, littleEndian);
56
+ offset += 8;
57
+ }
58
+ return {
59
+ geometry: { type: 'Point', positions: { value: positions, size: dimension } },
60
+ offset
61
+ };
69
62
  }
70
-
71
63
  function parseLineString(view, offset, dimension, littleEndian) {
72
- const nPoints = view.getUint32(offset, littleEndian);
73
- offset += 4;
74
- const positions = new Float64Array(nPoints * dimension);
75
-
76
- for (let i = 0; i < nPoints * dimension; i++) {
77
- positions[i] = view.getFloat64(offset, littleEndian);
78
- offset += 8;
79
- }
80
-
81
- const pathIndices = [0];
82
-
83
- if (nPoints > 0) {
84
- pathIndices.push(nPoints);
85
- }
86
-
87
- return {
88
- geometry: {
89
- type: 'LineString',
90
- positions: {
91
- value: positions,
92
- size: dimension
93
- },
94
- pathIndices: {
95
- value: new Uint16Array(pathIndices),
96
- size: 1
97
- }
98
- },
99
- offset
100
- };
64
+ const nPoints = view.getUint32(offset, littleEndian);
65
+ offset += 4;
66
+ // Instantiate array
67
+ const positions = new Float64Array(nPoints * dimension);
68
+ for (let i = 0; i < nPoints * dimension; i++) {
69
+ positions[i] = view.getFloat64(offset, littleEndian);
70
+ offset += 8;
71
+ }
72
+ const pathIndices = [0];
73
+ if (nPoints > 0) {
74
+ pathIndices.push(nPoints);
75
+ }
76
+ return {
77
+ geometry: {
78
+ type: 'LineString',
79
+ positions: { value: positions, size: dimension },
80
+ pathIndices: { value: new Uint16Array(pathIndices), size: 1 }
81
+ },
82
+ offset
83
+ };
101
84
  }
102
-
103
- const cumulativeSum = sum => value => sum += value;
104
-
85
+ // https://stackoverflow.com/a/55261098
86
+ const cumulativeSum = (sum) => (value) => (sum += value);
105
87
  function parsePolygon(view, offset, dimension, littleEndian) {
106
- const nRings = view.getUint32(offset, littleEndian);
107
- offset += 4;
108
- const rings = [];
109
-
110
- for (let i = 0; i < nRings; i++) {
111
- const parsed = parseLineString(view, offset, dimension, littleEndian);
112
- const {
113
- positions
114
- } = parsed.geometry;
115
- offset = parsed.offset;
116
- rings.push(positions.value);
117
- }
118
-
119
- const concatenatedPositions = new Float64Array(concatTypedArrays(rings).buffer);
120
- const polygonIndices = [0];
121
-
122
- if (concatenatedPositions.length > 0) {
123
- polygonIndices.push(concatenatedPositions.length / dimension);
124
- }
125
-
126
- const primitivePolygonIndices = rings.map(l => l.length / dimension).map(cumulativeSum(0));
127
- primitivePolygonIndices.unshift(0);
128
- return {
129
- geometry: {
130
- type: 'Polygon',
131
- positions: {
132
- value: concatenatedPositions,
133
- size: dimension
134
- },
135
- polygonIndices: {
136
- value: new Uint16Array(polygonIndices),
137
- size: 1
138
- },
139
- primitivePolygonIndices: {
140
- value: new Uint16Array(primitivePolygonIndices),
141
- size: 1
142
- }
143
- },
144
- offset
145
- };
88
+ const nRings = view.getUint32(offset, littleEndian);
89
+ offset += 4;
90
+ const rings = [];
91
+ for (let i = 0; i < nRings; i++) {
92
+ const parsed = parseLineString(view, offset, dimension, littleEndian);
93
+ const { positions } = parsed.geometry;
94
+ offset = parsed.offset;
95
+ rings.push(positions.value);
96
+ }
97
+ const concatenatedPositions = new Float64Array(concatTypedArrays(rings).buffer);
98
+ const polygonIndices = [0];
99
+ if (concatenatedPositions.length > 0) {
100
+ polygonIndices.push(concatenatedPositions.length / dimension);
101
+ }
102
+ const primitivePolygonIndices = rings.map((l) => l.length / dimension).map(cumulativeSum(0));
103
+ primitivePolygonIndices.unshift(0);
104
+ return {
105
+ geometry: {
106
+ type: 'Polygon',
107
+ positions: { value: concatenatedPositions, size: dimension },
108
+ polygonIndices: {
109
+ value: new Uint16Array(polygonIndices),
110
+ size: 1
111
+ },
112
+ primitivePolygonIndices: { value: new Uint16Array(primitivePolygonIndices), size: 1 }
113
+ },
114
+ offset
115
+ };
146
116
  }
147
-
148
117
  function parseMultiPoint(view, offset, dimension, littleEndian) {
149
- const nPoints = view.getUint32(offset, littleEndian);
150
- offset += 4;
151
- const binaryPointGeometries = [];
152
-
153
- for (let i = 0; i < nPoints; i++) {
154
- const littleEndianPoint = view.getUint8(offset) === 1;
155
- offset++;
156
-
157
- if (view.getUint32(offset, littleEndianPoint) % 1000 !== 1) {
158
- throw new Error('WKB: Inner geometries of MultiPoint not of type Point');
159
- }
160
-
118
+ const nPoints = view.getUint32(offset, littleEndian);
161
119
  offset += 4;
162
- const parsed = parsePoint(view, offset, dimension, littleEndianPoint);
163
- offset = parsed.offset;
164
- binaryPointGeometries.push(parsed.geometry);
165
- }
166
-
167
- return concatenateBinaryPointGeometries(binaryPointGeometries, dimension);
120
+ const binaryPointGeometries = [];
121
+ for (let i = 0; i < nPoints; i++) {
122
+ // Byte order for point
123
+ const littleEndianPoint = view.getUint8(offset) === 1;
124
+ offset++;
125
+ // Assert point type
126
+ if (view.getUint32(offset, littleEndianPoint) % 1000 !== 1) {
127
+ throw new Error('WKB: Inner geometries of MultiPoint not of type Point');
128
+ }
129
+ offset += 4;
130
+ const parsed = parsePoint(view, offset, dimension, littleEndianPoint);
131
+ offset = parsed.offset;
132
+ binaryPointGeometries.push(parsed.geometry);
133
+ }
134
+ return concatenateBinaryPointGeometries(binaryPointGeometries, dimension);
168
135
  }
169
-
170
136
  function parseMultiLineString(view, offset, dimension, littleEndian) {
171
- const nLines = view.getUint32(offset, littleEndian);
172
- offset += 4;
173
- const binaryLineGeometries = [];
174
-
175
- for (let i = 0; i < nLines; i++) {
176
- const littleEndianLine = view.getUint8(offset) === 1;
177
- offset++;
178
-
179
- if (view.getUint32(offset, littleEndianLine) % 1000 !== 2) {
180
- throw new Error('WKB: Inner geometries of MultiLineString not of type LineString');
181
- }
182
-
137
+ const nLines = view.getUint32(offset, littleEndian);
183
138
  offset += 4;
184
- const parsed = parseLineString(view, offset, dimension, littleEndianLine);
185
- offset = parsed.offset;
186
- binaryLineGeometries.push(parsed.geometry);
187
- }
188
-
189
- return concatenateBinaryLineGeometries(binaryLineGeometries, dimension);
139
+ const binaryLineGeometries = [];
140
+ for (let i = 0; i < nLines; i++) {
141
+ // Byte order for line
142
+ const littleEndianLine = view.getUint8(offset) === 1;
143
+ offset++;
144
+ // Assert type LineString
145
+ if (view.getUint32(offset, littleEndianLine) % 1000 !== 2) {
146
+ throw new Error('WKB: Inner geometries of MultiLineString not of type LineString');
147
+ }
148
+ offset += 4;
149
+ const parsed = parseLineString(view, offset, dimension, littleEndianLine);
150
+ offset = parsed.offset;
151
+ binaryLineGeometries.push(parsed.geometry);
152
+ }
153
+ return concatenateBinaryLineGeometries(binaryLineGeometries, dimension);
190
154
  }
191
-
192
155
  function parseMultiPolygon(view, offset, dimension, littleEndian) {
193
- const nPolygons = view.getUint32(offset, littleEndian);
194
- offset += 4;
195
- const binaryPolygonGeometries = [];
196
-
197
- for (let i = 0; i < nPolygons; i++) {
198
- const littleEndianPolygon = view.getUint8(offset) === 1;
199
- offset++;
200
-
201
- if (view.getUint32(offset, littleEndianPolygon) % 1000 !== 3) {
202
- throw new Error('WKB: Inner geometries of MultiPolygon not of type Polygon');
203
- }
204
-
156
+ const nPolygons = view.getUint32(offset, littleEndian);
205
157
  offset += 4;
206
- const parsed = parsePolygon(view, offset, dimension, littleEndianPolygon);
207
- offset = parsed.offset;
208
- binaryPolygonGeometries.push(parsed.geometry);
209
- }
210
-
211
- return concatenateBinaryPolygonGeometries(binaryPolygonGeometries, dimension);
158
+ const binaryPolygonGeometries = [];
159
+ for (let i = 0; i < nPolygons; i++) {
160
+ // Byte order for polygon
161
+ const littleEndianPolygon = view.getUint8(offset) === 1;
162
+ offset++;
163
+ // Assert type Polygon
164
+ if (view.getUint32(offset, littleEndianPolygon) % 1000 !== 3) {
165
+ throw new Error('WKB: Inner geometries of MultiPolygon not of type Polygon');
166
+ }
167
+ offset += 4;
168
+ const parsed = parsePolygon(view, offset, dimension, littleEndianPolygon);
169
+ offset = parsed.offset;
170
+ binaryPolygonGeometries.push(parsed.geometry);
171
+ }
172
+ return concatenateBinaryPolygonGeometries(binaryPolygonGeometries, dimension);
212
173
  }
213
-
174
+ // TODO - move to loaders.gl/schema/gis
214
175
  function concatenateBinaryPointGeometries(binaryPointGeometries, dimension) {
215
- const positions = binaryPointGeometries.map(geometry => geometry.positions.value);
216
- const concatenatedPositions = new Float64Array(concatTypedArrays(positions).buffer);
217
- return {
218
- type: 'Point',
219
- positions: {
220
- value: concatenatedPositions,
221
- size: dimension
222
- }
223
- };
176
+ const positions = binaryPointGeometries.map((geometry) => geometry.positions.value);
177
+ const concatenatedPositions = new Float64Array(concatTypedArrays(positions).buffer);
178
+ return {
179
+ type: 'Point',
180
+ positions: { value: concatenatedPositions, size: dimension }
181
+ };
224
182
  }
225
-
226
183
  function concatenateBinaryLineGeometries(binaryLineGeometries, dimension) {
227
- const lines = binaryLineGeometries.map(geometry => geometry.positions.value);
228
- const concatenatedPositions = new Float64Array(concatTypedArrays(lines).buffer);
229
- const pathIndices = lines.map(line => line.length / dimension).map(cumulativeSum(0));
230
- pathIndices.unshift(0);
231
- return {
232
- type: 'LineString',
233
- positions: {
234
- value: concatenatedPositions,
235
- size: dimension
236
- },
237
- pathIndices: {
238
- value: new Uint16Array(pathIndices),
239
- size: 1
240
- }
241
- };
184
+ const lines = binaryLineGeometries.map((geometry) => geometry.positions.value);
185
+ const concatenatedPositions = new Float64Array(concatTypedArrays(lines).buffer);
186
+ const pathIndices = lines.map((line) => line.length / dimension).map(cumulativeSum(0));
187
+ pathIndices.unshift(0);
188
+ return {
189
+ type: 'LineString',
190
+ positions: { value: concatenatedPositions, size: dimension },
191
+ pathIndices: { value: new Uint16Array(pathIndices), size: 1 }
192
+ };
242
193
  }
243
-
244
194
  function concatenateBinaryPolygonGeometries(binaryPolygonGeometries, dimension) {
245
- const polygons = [];
246
- const primitivePolygons = [];
247
-
248
- for (const binaryPolygon of binaryPolygonGeometries) {
249
- const {
250
- positions,
251
- primitivePolygonIndices
252
- } = binaryPolygon;
253
- polygons.push(positions.value);
254
- primitivePolygons.push(primitivePolygonIndices.value);
255
- }
256
-
257
- const concatenatedPositions = new Float64Array(concatTypedArrays(polygons).buffer);
258
- const polygonIndices = polygons.map(p => p.length / dimension).map(cumulativeSum(0));
259
- polygonIndices.unshift(0);
260
- const primitivePolygonIndices = [0];
261
-
262
- for (const primitivePolygon of primitivePolygons) {
263
- primitivePolygonIndices.push(...primitivePolygon.filter(x => x > 0).map(x => x + primitivePolygonIndices[primitivePolygonIndices.length - 1]));
264
- }
265
-
266
- return {
267
- type: 'Polygon',
268
- positions: {
269
- value: concatenatedPositions,
270
- size: dimension
271
- },
272
- polygonIndices: {
273
- value: new Uint16Array(polygonIndices),
274
- size: 1
275
- },
276
- primitivePolygonIndices: {
277
- value: new Uint16Array(primitivePolygonIndices),
278
- size: 1
195
+ const polygons = [];
196
+ const primitivePolygons = [];
197
+ for (const binaryPolygon of binaryPolygonGeometries) {
198
+ const { positions, primitivePolygonIndices } = binaryPolygon;
199
+ polygons.push(positions.value);
200
+ primitivePolygons.push(primitivePolygonIndices.value);
279
201
  }
280
- };
202
+ const concatenatedPositions = new Float64Array(concatTypedArrays(polygons).buffer);
203
+ const polygonIndices = polygons.map((p) => p.length / dimension).map(cumulativeSum(0));
204
+ polygonIndices.unshift(0);
205
+ // Combine primitivePolygonIndices from each individual polygon
206
+ const primitivePolygonIndices = [0];
207
+ for (const primitivePolygon of primitivePolygons) {
208
+ primitivePolygonIndices.push(...primitivePolygon
209
+ .filter((x) => x > 0)
210
+ .map((x) => x + primitivePolygonIndices[primitivePolygonIndices.length - 1]));
211
+ }
212
+ return {
213
+ type: 'Polygon',
214
+ positions: { value: concatenatedPositions, size: dimension },
215
+ polygonIndices: { value: new Uint16Array(polygonIndices), size: 1 },
216
+ primitivePolygonIndices: { value: new Uint16Array(primitivePolygonIndices), size: 1 }
217
+ };
281
218
  }
282
-
219
+ // TODO: remove copy; import from typed-array-utils
220
+ // modules/math/src/geometry/typed-arrays/typed-array-utils.js
283
221
  function concatTypedArrays(arrays) {
284
- let byteLength = 0;
285
-
286
- for (let i = 0; i < arrays.length; ++i) {
287
- byteLength += arrays[i].byteLength;
288
- }
289
-
290
- const buffer = new Uint8Array(byteLength);
291
- let byteOffset = 0;
292
-
293
- for (let i = 0; i < arrays.length; ++i) {
294
- const data = new Uint8Array(arrays[i].buffer);
295
- byteLength = data.length;
296
-
297
- for (let j = 0; j < byteLength; ++j) {
298
- buffer[byteOffset++] = data[j];
222
+ let byteLength = 0;
223
+ for (let i = 0; i < arrays.length; ++i) {
224
+ byteLength += arrays[i].byteLength;
225
+ }
226
+ const buffer = new Uint8Array(byteLength);
227
+ let byteOffset = 0;
228
+ for (let i = 0; i < arrays.length; ++i) {
229
+ const data = new Uint8Array(arrays[i].buffer);
230
+ byteLength = data.length;
231
+ for (let j = 0; j < byteLength; ++j) {
232
+ buffer[byteOffset++] = data[j];
233
+ }
299
234
  }
300
- }
301
-
302
- return buffer;
235
+ return buffer;
303
236
  }
304
- //# sourceMappingURL=parse-wkb.js.map