@loaders.gl/gis 3.4.13 → 3.4.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,77 +1,61 @@
1
1
  "use strict";
2
2
 
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
3
  Object.defineProperty(exports, "__esModule", {
5
4
  value: true
6
5
  });
7
6
  exports.TEST_EXPORTS = void 0;
8
7
  exports.flatGeojsonToBinary = flatGeojsonToBinary;
9
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
10
8
  var _polygon = require("@math.gl/polygon");
11
- function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
12
- function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
13
- function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
14
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
15
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
16
9
  function flatGeojsonToBinary(features, geometryInfo, options) {
17
- var propArrayTypes = extractNumericPropTypes(features);
18
- var numericPropKeys = Object.keys(propArrayTypes).filter(function (k) {
19
- return propArrayTypes[k] !== Array;
20
- });
21
- return fillArrays(features, _objectSpread({
22
- propArrayTypes: propArrayTypes
23
- }, geometryInfo), {
10
+ const propArrayTypes = extractNumericPropTypes(features);
11
+ const numericPropKeys = Object.keys(propArrayTypes).filter(k => propArrayTypes[k] !== Array);
12
+ return fillArrays(features, {
13
+ propArrayTypes,
14
+ ...geometryInfo
15
+ }, {
24
16
  numericPropKeys: options && options.numericPropKeys || numericPropKeys,
25
17
  PositionDataType: options ? options.PositionDataType : Float32Array,
26
18
  triangulate: options ? options.triangulate : true
27
19
  });
28
20
  }
29
- var TEST_EXPORTS = {
30
- extractNumericPropTypes: extractNumericPropTypes
21
+ const TEST_EXPORTS = {
22
+ extractNumericPropTypes
31
23
  };
32
24
  exports.TEST_EXPORTS = TEST_EXPORTS;
33
25
  function extractNumericPropTypes(features) {
34
- var propArrayTypes = {};
35
- var _iterator = _createForOfIteratorHelper(features),
36
- _step;
37
- try {
38
- for (_iterator.s(); !(_step = _iterator.n()).done;) {
39
- var feature = _step.value;
40
- if (feature.properties) {
41
- for (var _key in feature.properties) {
42
- var val = feature.properties[_key];
43
- propArrayTypes[_key] = deduceArrayType(val, propArrayTypes[_key]);
44
- }
26
+ const propArrayTypes = {};
27
+ for (const feature of features) {
28
+ if (feature.properties) {
29
+ for (const key in feature.properties) {
30
+ const val = feature.properties[key];
31
+ propArrayTypes[key] = deduceArrayType(val, propArrayTypes[key]);
45
32
  }
46
33
  }
47
- } catch (err) {
48
- _iterator.e(err);
49
- } finally {
50
- _iterator.f();
51
34
  }
52
35
  return propArrayTypes;
53
36
  }
54
37
  function fillArrays(features, geometryInfo, options) {
55
- var pointPositionsCount = geometryInfo.pointPositionsCount,
56
- pointFeaturesCount = geometryInfo.pointFeaturesCount,
57
- linePositionsCount = geometryInfo.linePositionsCount,
58
- linePathsCount = geometryInfo.linePathsCount,
59
- lineFeaturesCount = geometryInfo.lineFeaturesCount,
60
- polygonPositionsCount = geometryInfo.polygonPositionsCount,
61
- polygonObjectsCount = geometryInfo.polygonObjectsCount,
62
- polygonRingsCount = geometryInfo.polygonRingsCount,
63
- polygonFeaturesCount = geometryInfo.polygonFeaturesCount,
64
- propArrayTypes = geometryInfo.propArrayTypes,
65
- coordLength = geometryInfo.coordLength;
66
- var _options$numericPropK = options.numericPropKeys,
67
- numericPropKeys = _options$numericPropK === void 0 ? [] : _options$numericPropK,
68
- _options$PositionData = options.PositionDataType,
69
- PositionDataType = _options$PositionData === void 0 ? Float32Array : _options$PositionData,
70
- _options$triangulate = options.triangulate,
71
- triangulate = _options$triangulate === void 0 ? true : _options$triangulate;
72
- var hasGlobalId = features[0] && 'id' in features[0];
73
- var GlobalFeatureIdsDataType = features.length > 65535 ? Uint32Array : Uint16Array;
74
- var points = {
38
+ const {
39
+ pointPositionsCount,
40
+ pointFeaturesCount,
41
+ linePositionsCount,
42
+ linePathsCount,
43
+ lineFeaturesCount,
44
+ polygonPositionsCount,
45
+ polygonObjectsCount,
46
+ polygonRingsCount,
47
+ polygonFeaturesCount,
48
+ propArrayTypes,
49
+ coordLength
50
+ } = geometryInfo;
51
+ const {
52
+ numericPropKeys = [],
53
+ PositionDataType = Float32Array,
54
+ triangulate = true
55
+ } = options;
56
+ const hasGlobalId = features[0] && 'id' in features[0];
57
+ const GlobalFeatureIdsDataType = features.length > 65535 ? Uint32Array : Uint16Array;
58
+ const points = {
75
59
  type: 'Point',
76
60
  positions: new PositionDataType(pointPositionsCount * coordLength),
77
61
  globalFeatureIds: new GlobalFeatureIdsDataType(pointPositionsCount),
@@ -80,7 +64,7 @@ function fillArrays(features, geometryInfo, options) {
80
64
  properties: [],
81
65
  fields: []
82
66
  };
83
- var lines = {
67
+ const lines = {
84
68
  type: 'LineString',
85
69
  pathIndices: linePositionsCount > 65535 ? new Uint32Array(linePathsCount + 1) : new Uint16Array(linePathsCount + 1),
86
70
  positions: new PositionDataType(linePositionsCount * coordLength),
@@ -90,7 +74,7 @@ function fillArrays(features, geometryInfo, options) {
90
74
  properties: [],
91
75
  fields: []
92
76
  };
93
- var polygons = {
77
+ const polygons = {
94
78
  type: 'Polygon',
95
79
  polygonIndices: polygonPositionsCount > 65535 ? new Uint32Array(polygonObjectsCount + 1) : new Uint16Array(polygonObjectsCount + 1),
96
80
  primitivePolygonIndices: polygonPositionsCount > 65535 ? new Uint32Array(polygonRingsCount + 1) : new Uint16Array(polygonRingsCount + 1),
@@ -104,26 +88,16 @@ function fillArrays(features, geometryInfo, options) {
104
88
  if (triangulate) {
105
89
  polygons.triangles = [];
106
90
  }
107
- for (var _i = 0, _arr = [points, lines, polygons]; _i < _arr.length; _i++) {
108
- var object = _arr[_i];
109
- var _iterator2 = _createForOfIteratorHelper(numericPropKeys),
110
- _step2;
111
- try {
112
- for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
113
- var propName = _step2.value;
114
- var T = propArrayTypes[propName];
115
- object.numericProps[propName] = new T(object.positions.length / coordLength);
116
- }
117
- } catch (err) {
118
- _iterator2.e(err);
119
- } finally {
120
- _iterator2.f();
91
+ for (const object of [points, lines, polygons]) {
92
+ for (const propName of numericPropKeys) {
93
+ const T = propArrayTypes[propName];
94
+ object.numericProps[propName] = new T(object.positions.length / coordLength);
121
95
  }
122
96
  }
123
97
  lines.pathIndices[linePathsCount] = linePositionsCount;
124
98
  polygons.polygonIndices[polygonObjectsCount] = polygonPositionsCount;
125
99
  polygons.primitivePolygonIndices[polygonRingsCount] = polygonPositionsCount;
126
- var indexMap = {
100
+ const indexMap = {
127
101
  pointPosition: 0,
128
102
  pointFeature: 0,
129
103
  linePosition: 0,
@@ -135,59 +109,50 @@ function fillArrays(features, geometryInfo, options) {
135
109
  polygonFeature: 0,
136
110
  feature: 0
137
111
  };
138
- var _iterator3 = _createForOfIteratorHelper(features),
139
- _step3;
140
- try {
141
- for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
142
- var feature = _step3.value;
143
- var geometry = feature.geometry;
144
- var properties = feature.properties || {};
145
- switch (geometry.type) {
146
- case 'Point':
147
- handlePoint(geometry, points, indexMap, coordLength, properties);
148
- points.properties.push(keepStringProperties(properties, numericPropKeys));
149
- if (hasGlobalId) {
150
- points.fields.push({
151
- id: feature.id
152
- });
153
- }
154
- indexMap.pointFeature++;
155
- break;
156
- case 'LineString':
157
- handleLineString(geometry, lines, indexMap, coordLength, properties);
158
- lines.properties.push(keepStringProperties(properties, numericPropKeys));
159
- if (hasGlobalId) {
160
- lines.fields.push({
161
- id: feature.id
162
- });
163
- }
164
- indexMap.lineFeature++;
165
- break;
166
- case 'Polygon':
167
- handlePolygon(geometry, polygons, indexMap, coordLength, properties);
168
- polygons.properties.push(keepStringProperties(properties, numericPropKeys));
169
- if (hasGlobalId) {
170
- polygons.fields.push({
171
- id: feature.id
172
- });
173
- }
174
- indexMap.polygonFeature++;
175
- break;
176
- default:
177
- throw new Error('Invalid geometry type');
178
- }
179
- indexMap.feature++;
112
+ for (const feature of features) {
113
+ const geometry = feature.geometry;
114
+ const properties = feature.properties || {};
115
+ switch (geometry.type) {
116
+ case 'Point':
117
+ handlePoint(geometry, points, indexMap, coordLength, properties);
118
+ points.properties.push(keepStringProperties(properties, numericPropKeys));
119
+ if (hasGlobalId) {
120
+ points.fields.push({
121
+ id: feature.id
122
+ });
123
+ }
124
+ indexMap.pointFeature++;
125
+ break;
126
+ case 'LineString':
127
+ handleLineString(geometry, lines, indexMap, coordLength, properties);
128
+ lines.properties.push(keepStringProperties(properties, numericPropKeys));
129
+ if (hasGlobalId) {
130
+ lines.fields.push({
131
+ id: feature.id
132
+ });
133
+ }
134
+ indexMap.lineFeature++;
135
+ break;
136
+ case 'Polygon':
137
+ handlePolygon(geometry, polygons, indexMap, coordLength, properties);
138
+ polygons.properties.push(keepStringProperties(properties, numericPropKeys));
139
+ if (hasGlobalId) {
140
+ polygons.fields.push({
141
+ id: feature.id
142
+ });
143
+ }
144
+ indexMap.polygonFeature++;
145
+ break;
146
+ default:
147
+ throw new Error('Invalid geometry type');
180
148
  }
181
- } catch (err) {
182
- _iterator3.e(err);
183
- } finally {
184
- _iterator3.f();
149
+ indexMap.feature++;
185
150
  }
186
151
  return makeAccessorObjects(points, lines, polygons, coordLength);
187
152
  }
188
153
  function handlePoint(geometry, points, indexMap, coordLength, properties) {
189
154
  points.positions.set(geometry.data, indexMap.pointPosition * coordLength);
190
- var nPositions = geometry.data.length / coordLength;
155
+ const nPositions = geometry.data.length / coordLength;
191
156
  fillNumericProperties(points, properties, indexMap.pointPosition, nPositions);
192
157
  points.globalFeatureIds.fill(indexMap.feature, indexMap.pointPosition, indexMap.pointPosition + nPositions);
193
158
  points.featureIds.fill(indexMap.pointFeature, indexMap.pointPosition, indexMap.pointPosition + nPositions);
@@ -195,75 +160,76 @@ function handlePoint(geometry, points, indexMap, coordLength, properties) {
195
160
  }
196
161
  function handleLineString(geometry, lines, indexMap, coordLength, properties) {
197
162
  lines.positions.set(geometry.data, indexMap.linePosition * coordLength);
198
- var nPositions = geometry.data.length / coordLength;
163
+ const nPositions = geometry.data.length / coordLength;
199
164
  fillNumericProperties(lines, properties, indexMap.linePosition, nPositions);
200
165
  lines.globalFeatureIds.fill(indexMap.feature, indexMap.linePosition, indexMap.linePosition + nPositions);
201
166
  lines.featureIds.fill(indexMap.lineFeature, indexMap.linePosition, indexMap.linePosition + nPositions);
202
- for (var i = 0, il = geometry.indices.length; i < il; ++i) {
203
- var start = geometry.indices[i];
204
- var end = i === il - 1 ? geometry.data.length : geometry.indices[i + 1];
167
+ for (let i = 0, il = geometry.indices.length; i < il; ++i) {
168
+ const start = geometry.indices[i];
169
+ const end = i === il - 1 ? geometry.data.length : geometry.indices[i + 1];
205
170
  lines.pathIndices[indexMap.linePath++] = indexMap.linePosition;
206
171
  indexMap.linePosition += (end - start) / coordLength;
207
172
  }
208
173
  }
209
174
  function handlePolygon(geometry, polygons, indexMap, coordLength, properties) {
210
175
  polygons.positions.set(geometry.data, indexMap.polygonPosition * coordLength);
211
- var nPositions = geometry.data.length / coordLength;
176
+ const nPositions = geometry.data.length / coordLength;
212
177
  fillNumericProperties(polygons, properties, indexMap.polygonPosition, nPositions);
213
178
  polygons.globalFeatureIds.fill(indexMap.feature, indexMap.polygonPosition, indexMap.polygonPosition + nPositions);
214
179
  polygons.featureIds.fill(indexMap.polygonFeature, indexMap.polygonPosition, indexMap.polygonPosition + nPositions);
215
- for (var l = 0, ll = geometry.indices.length; l < ll; ++l) {
216
- var startPosition = indexMap.polygonPosition;
180
+ for (let l = 0, ll = geometry.indices.length; l < ll; ++l) {
181
+ const startPosition = indexMap.polygonPosition;
217
182
  polygons.polygonIndices[indexMap.polygonObject++] = startPosition;
218
- var areas = geometry.areas[l];
219
- var indices = geometry.indices[l];
220
- var nextIndices = geometry.indices[l + 1];
221
- for (var i = 0, il = indices.length; i < il; ++i) {
222
- var start = indices[i];
223
- var end = i === il - 1 ? nextIndices === undefined ? geometry.data.length : nextIndices[0] : indices[i + 1];
183
+ const areas = geometry.areas[l];
184
+ const indices = geometry.indices[l];
185
+ const nextIndices = geometry.indices[l + 1];
186
+ for (let i = 0, il = indices.length; i < il; ++i) {
187
+ const start = indices[i];
188
+ const end = i === il - 1 ? nextIndices === undefined ? geometry.data.length : nextIndices[0] : indices[i + 1];
224
189
  polygons.primitivePolygonIndices[indexMap.polygonRing++] = indexMap.polygonPosition;
225
190
  indexMap.polygonPosition += (end - start) / coordLength;
226
191
  }
227
- var endPosition = indexMap.polygonPosition;
192
+ const endPosition = indexMap.polygonPosition;
228
193
  triangulatePolygon(polygons, areas, indices, {
229
- startPosition: startPosition,
230
- endPosition: endPosition,
231
- coordLength: coordLength
194
+ startPosition,
195
+ endPosition,
196
+ coordLength
232
197
  });
233
198
  }
234
199
  }
235
200
  function triangulatePolygon(polygons, areas, indices, _ref) {
236
- var startPosition = _ref.startPosition,
237
- endPosition = _ref.endPosition,
238
- coordLength = _ref.coordLength;
201
+ let {
202
+ startPosition,
203
+ endPosition,
204
+ coordLength
205
+ } = _ref;
239
206
  if (!polygons.triangles) {
240
207
  return;
241
208
  }
242
- var start = startPosition * coordLength;
243
- var end = endPosition * coordLength;
244
- var polygonPositions = polygons.positions.subarray(start, end);
245
- var offset = indices[0];
246
- var holes = indices.slice(1).map(function (n) {
247
- return (n - offset) / coordLength;
248
- });
249
- var triangles = (0, _polygon.earcut)(polygonPositions, holes, coordLength, areas);
250
- for (var t = 0, tl = triangles.length; t < tl; ++t) {
209
+ const start = startPosition * coordLength;
210
+ const end = endPosition * coordLength;
211
+ const polygonPositions = polygons.positions.subarray(start, end);
212
+ const offset = indices[0];
213
+ const holes = indices.slice(1).map(n => (n - offset) / coordLength);
214
+ const triangles = (0, _polygon.earcut)(polygonPositions, holes, coordLength, areas);
215
+ for (let t = 0, tl = triangles.length; t < tl; ++t) {
251
216
  polygons.triangles.push(startPosition + triangles[t]);
252
217
  }
253
218
  }
254
219
  function wrapProps(obj, size) {
255
- var returnObj = {};
256
- for (var _key2 in obj) {
257
- returnObj[_key2] = {
258
- value: obj[_key2],
259
- size: size
220
+ const returnObj = {};
221
+ for (const key in obj) {
222
+ returnObj[key] = {
223
+ value: obj[key],
224
+ size
260
225
  };
261
226
  }
262
227
  return returnObj;
263
228
  }
264
229
  function makeAccessorObjects(points, lines, polygons, coordLength) {
265
- var binaryFeatures = {
266
- points: _objectSpread(_objectSpread({}, points), {}, {
230
+ const binaryFeatures = {
231
+ points: {
232
+ ...points,
267
233
  positions: {
268
234
  value: points.positions,
269
235
  size: coordLength
@@ -277,8 +243,9 @@ function makeAccessorObjects(points, lines, polygons, coordLength) {
277
243
  size: 1
278
244
  },
279
245
  numericProps: wrapProps(points.numericProps, 1)
280
- }),
281
- lines: _objectSpread(_objectSpread({}, lines), {}, {
246
+ },
247
+ lines: {
248
+ ...lines,
282
249
  positions: {
283
250
  value: lines.positions,
284
251
  size: coordLength
@@ -296,8 +263,9 @@ function makeAccessorObjects(points, lines, polygons, coordLength) {
296
263
  size: 1
297
264
  },
298
265
  numericProps: wrapProps(lines.numericProps, 1)
299
- }),
300
- polygons: _objectSpread(_objectSpread({}, polygons), {}, {
266
+ },
267
+ polygons: {
268
+ ...polygons,
301
269
  positions: {
302
270
  value: polygons.positions,
303
271
  size: coordLength
@@ -319,7 +287,7 @@ function makeAccessorObjects(points, lines, polygons, coordLength) {
319
287
  size: 1
320
288
  },
321
289
  numericProps: wrapProps(polygons.numericProps, 1)
322
- })
290
+ }
323
291
  };
324
292
  if (polygons.triangles) {
325
293
  binaryFeatures.polygons.triangles = {
@@ -330,18 +298,18 @@ function makeAccessorObjects(points, lines, polygons, coordLength) {
330
298
  return binaryFeatures;
331
299
  }
332
300
  function fillNumericProperties(object, properties, index, length) {
333
- for (var numericPropName in object.numericProps) {
301
+ for (const numericPropName in object.numericProps) {
334
302
  if (numericPropName in properties) {
335
- var value = properties[numericPropName];
303
+ const value = properties[numericPropName];
336
304
  object.numericProps[numericPropName].fill(value, index, index + length);
337
305
  }
338
306
  }
339
307
  }
340
308
  function keepStringProperties(properties, numericKeys) {
341
- var props = {};
342
- for (var _key3 in properties) {
343
- if (!numericKeys.includes(_key3)) {
344
- props[_key3] = properties[_key3];
309
+ const props = {};
310
+ for (const key in properties) {
311
+ if (!numericKeys.includes(key)) {
312
+ props[key] = properties[key];
345
313
  }
346
314
  }
347
315
  return props;
@@ -1 +1 @@
1
- {"version":3,"file":"flat-geojson-to-binary.js","names":["_polygon","require","_createForOfIteratorHelper","o","allowArrayLike","it","Symbol","iterator","Array","isArray","_unsupportedIterableToArray","length","i","F","s","n","done","value","e","_e","f","TypeError","normalCompletion","didErr","err","call","step","next","_e2","return","minLen","_arrayLikeToArray","Object","prototype","toString","slice","constructor","name","from","test","arr","len","arr2","ownKeys","object","enumerableOnly","keys","getOwnPropertySymbols","symbols","filter","sym","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","target","arguments","source","forEach","key","_defineProperty2","default","getOwnPropertyDescriptors","defineProperties","defineProperty","flatGeojsonToBinary","features","geometryInfo","options","propArrayTypes","extractNumericPropTypes","numericPropKeys","k","fillArrays","PositionDataType","Float32Array","triangulate","TEST_EXPORTS","exports","_iterator","_step","feature","properties","val","deduceArrayType","pointPositionsCount","pointFeaturesCount","linePositionsCount","linePathsCount","lineFeaturesCount","polygonPositionsCount","polygonObjectsCount","polygonRingsCount","polygonFeaturesCount","coordLength","_options$numericPropK","_options$PositionData","_options$triangulate","hasGlobalId","GlobalFeatureIdsDataType","Uint32Array","Uint16Array","points","type","positions","globalFeatureIds","featureIds","numericProps","fields","lines","pathIndices","polygons","polygonIndices","primitivePolygonIndices","triangles","_i","_arr","_iterator2","_step2","propName","T","indexMap","pointPosition","pointFeature","linePosition","linePath","lineFeature","polygonPosition","polygonObject","polygonRing","polygonFeature","_iterator3","_step3","geometry","handlePoint","keepStringProperties","id","handleLineString","handlePolygon","Error","makeAccessorObjects","set","data","nPositions","fillNumericProperties","fill","il","indices","start","end","l","ll","startPosition","areas","nextIndices","undefined","endPosition","triangulatePolygon","_ref","polygonPositions","subarray","offset","holes","map","earcut","t","tl","wrapProps","obj","size","returnObj","binaryFeatures","index","numericPropName","numericKeys","props","includes","x","Number","isFinite","Float64Array","Math","fround"],"sources":["../../../src/lib/flat-geojson-to-binary.ts"],"sourcesContent":["/* eslint-disable indent */\nimport {earcut} from '@math.gl/polygon';\nimport type {\n BinaryAttribute,\n BinaryFeatures,\n BinaryPolygonFeatures,\n FlatFeature,\n FlatPoint,\n FlatLineString,\n FlatPolygon,\n GeojsonGeometryInfo,\n TypedArray\n} from '@loaders.gl/schema';\nimport {PropArrayConstructor, Lines, Points, Polygons} from './flat-geojson-to-binary-types';\n\n/**\n * Convert binary features to flat binary arrays. Similar to\n * `geojsonToBinary` helper function, except that it expects\n * a binary representation of the feature data, which enables\n * 2X-3X speed increase in parse speed, compared to using\n * geoJSON. See `binary-vector-tile/VectorTileFeature` for\n * data format detais\n *\n * @param features\n * @param geometryInfo\n * @param options\n * @returns filled arrays\n */\nexport function flatGeojsonToBinary(\n features: FlatFeature[],\n geometryInfo: GeojsonGeometryInfo,\n options?: FlatGeojsonToBinaryOptions\n) {\n const propArrayTypes = extractNumericPropTypes(features);\n const numericPropKeys = Object.keys(propArrayTypes).filter((k) => propArrayTypes[k] !== Array);\n return fillArrays(\n features,\n {\n propArrayTypes,\n ...geometryInfo\n },\n {\n numericPropKeys: (options && options.numericPropKeys) || numericPropKeys,\n PositionDataType: options ? options.PositionDataType : Float32Array,\n triangulate: options ? options.triangulate : true\n }\n );\n}\n\n/**\n * Options for `flatGeojsonToBinary`\n */\nexport type FlatGeojsonToBinaryOptions = {\n numericPropKeys?: string[];\n PositionDataType?: Float32ArrayConstructor | Float64ArrayConstructor;\n triangulate?: boolean;\n};\n\nexport const TEST_EXPORTS = {\n extractNumericPropTypes\n};\n\n/**\n * Extracts properties that are always numeric\n *\n * @param features\n * @returns object with numeric types\n */\nfunction extractNumericPropTypes(features: FlatFeature[]): {\n [key: string]: PropArrayConstructor;\n} {\n const propArrayTypes = {};\n for (const feature of features) {\n if (feature.properties) {\n for (const key in feature.properties) {\n // If property has not been seen before, or if property has been numeric\n // in all previous features, check if numeric in this feature\n // If not numeric, Array is stored to prevent rechecking in the future\n // Additionally, detects if 64 bit precision is required\n const val = feature.properties[key];\n propArrayTypes[key] = deduceArrayType(val, propArrayTypes[key]);\n }\n }\n }\n\n return propArrayTypes;\n}\n\n/**\n * Fills coordinates into pre-allocated typed arrays\n *\n * @param features\n * @param geometryInfo\n * @param options\n * @returns an accessor object with value and size keys\n */\n// eslint-disable-next-line complexity\nfunction fillArrays(\n features: FlatFeature[],\n geometryInfo: GeojsonGeometryInfo & {\n propArrayTypes: {[key: string]: PropArrayConstructor};\n },\n options: FlatGeojsonToBinaryOptions\n) {\n const {\n pointPositionsCount,\n pointFeaturesCount,\n linePositionsCount,\n linePathsCount,\n lineFeaturesCount,\n polygonPositionsCount,\n polygonObjectsCount,\n polygonRingsCount,\n polygonFeaturesCount,\n propArrayTypes,\n coordLength\n } = geometryInfo;\n const {numericPropKeys = [], PositionDataType = Float32Array, triangulate = true} = options;\n const hasGlobalId = features[0] && 'id' in features[0];\n const GlobalFeatureIdsDataType = features.length > 65535 ? Uint32Array : Uint16Array;\n const points: Points = {\n type: 'Point',\n positions: new PositionDataType(pointPositionsCount * coordLength),\n globalFeatureIds: new GlobalFeatureIdsDataType(pointPositionsCount),\n featureIds:\n pointFeaturesCount > 65535\n ? new Uint32Array(pointPositionsCount)\n : new Uint16Array(pointPositionsCount),\n numericProps: {},\n properties: [],\n fields: []\n };\n const lines: Lines = {\n type: 'LineString',\n pathIndices:\n linePositionsCount > 65535\n ? new Uint32Array(linePathsCount + 1)\n : new Uint16Array(linePathsCount + 1),\n positions: new PositionDataType(linePositionsCount * coordLength),\n globalFeatureIds: new GlobalFeatureIdsDataType(linePositionsCount),\n featureIds:\n lineFeaturesCount > 65535\n ? new Uint32Array(linePositionsCount)\n : new Uint16Array(linePositionsCount),\n numericProps: {},\n properties: [],\n fields: []\n };\n const polygons: Polygons = {\n type: 'Polygon',\n polygonIndices:\n polygonPositionsCount > 65535\n ? new Uint32Array(polygonObjectsCount + 1)\n : new Uint16Array(polygonObjectsCount + 1),\n primitivePolygonIndices:\n polygonPositionsCount > 65535\n ? new Uint32Array(polygonRingsCount + 1)\n : new Uint16Array(polygonRingsCount + 1),\n positions: new PositionDataType(polygonPositionsCount * coordLength),\n globalFeatureIds: new GlobalFeatureIdsDataType(polygonPositionsCount),\n featureIds:\n polygonFeaturesCount > 65535\n ? new Uint32Array(polygonPositionsCount)\n : new Uint16Array(polygonPositionsCount),\n numericProps: {},\n properties: [],\n fields: []\n };\n\n if (triangulate) {\n polygons.triangles = [];\n }\n\n // Instantiate numeric properties arrays; one value per vertex\n for (const object of [points, lines, polygons]) {\n for (const propName of numericPropKeys) {\n // If property has been numeric in all previous features in which the property existed, check\n // if numeric in this feature\n const T = propArrayTypes[propName];\n object.numericProps[propName] = new T(object.positions.length / coordLength) as TypedArray;\n }\n }\n\n // Set last element of path/polygon indices as positions length\n lines.pathIndices[linePathsCount] = linePositionsCount;\n polygons.polygonIndices[polygonObjectsCount] = polygonPositionsCount;\n polygons.primitivePolygonIndices[polygonRingsCount] = polygonPositionsCount;\n\n const indexMap = {\n pointPosition: 0,\n pointFeature: 0,\n linePosition: 0,\n linePath: 0,\n lineFeature: 0,\n polygonPosition: 0,\n polygonObject: 0,\n polygonRing: 0,\n polygonFeature: 0,\n feature: 0\n };\n\n for (const feature of features) {\n const geometry = feature.geometry;\n const properties = feature.properties || {};\n\n switch (geometry.type) {\n case 'Point':\n handlePoint(geometry, points, indexMap, coordLength, properties);\n points.properties.push(keepStringProperties(properties, numericPropKeys));\n if (hasGlobalId) {\n points.fields.push({id: feature.id});\n }\n indexMap.pointFeature++;\n break;\n case 'LineString':\n handleLineString(geometry, lines, indexMap, coordLength, properties);\n lines.properties.push(keepStringProperties(properties, numericPropKeys));\n if (hasGlobalId) {\n lines.fields.push({id: feature.id});\n }\n indexMap.lineFeature++;\n break;\n case 'Polygon':\n handlePolygon(geometry, polygons, indexMap, coordLength, properties);\n polygons.properties.push(keepStringProperties(properties, numericPropKeys));\n if (hasGlobalId) {\n polygons.fields.push({id: feature.id});\n }\n indexMap.polygonFeature++;\n break;\n default:\n throw new Error('Invalid geometry type');\n }\n\n indexMap.feature++;\n }\n\n // Wrap each array in an accessor object with value and size keys\n return makeAccessorObjects(points, lines, polygons, coordLength);\n}\n\n/**\n * Fills (Multi)Point coordinates into points object of arrays\n *\n * @param geometry\n * @param points\n * @param indexMap\n * @param coordLength\n * @param properties\n */\nfunction handlePoint(\n geometry: FlatPoint,\n points: Points,\n indexMap: {\n pointPosition: number;\n pointFeature: number;\n linePosition?: number;\n linePath?: number;\n lineFeature?: number;\n polygonPosition?: number;\n polygonObject?: number;\n polygonRing?: number;\n polygonFeature?: number;\n feature: number;\n },\n coordLength: number,\n properties: {[x: string]: string | number | boolean | null}\n): void {\n points.positions.set(geometry.data, indexMap.pointPosition * coordLength);\n\n const nPositions = geometry.data.length / coordLength;\n fillNumericProperties(points, properties, indexMap.pointPosition, nPositions);\n points.globalFeatureIds.fill(\n indexMap.feature,\n indexMap.pointPosition,\n indexMap.pointPosition + nPositions\n );\n points.featureIds.fill(\n indexMap.pointFeature,\n indexMap.pointPosition,\n indexMap.pointPosition + nPositions\n );\n\n indexMap.pointPosition += nPositions;\n}\n\n/**\n * Fills (Multi)LineString coordinates into lines object of arrays\n *\n * @param geometry\n * @param lines\n * @param indexMap\n * @param coordLength\n * @param properties\n */\nfunction handleLineString(\n geometry: FlatLineString,\n lines: Lines,\n indexMap: {\n pointPosition?: number;\n pointFeature?: number;\n linePosition: number;\n linePath: number;\n lineFeature: number;\n polygonPosition?: number;\n polygonObject?: number;\n polygonRing?: number;\n polygonFeature?: number;\n feature: number;\n },\n coordLength: number,\n properties: {[x: string]: string | number | boolean | null}\n): void {\n lines.positions.set(geometry.data, indexMap.linePosition * coordLength);\n\n const nPositions = geometry.data.length / coordLength;\n fillNumericProperties(lines, properties, indexMap.linePosition, nPositions);\n\n lines.globalFeatureIds.fill(\n indexMap.feature,\n indexMap.linePosition,\n indexMap.linePosition + nPositions\n );\n lines.featureIds.fill(\n indexMap.lineFeature,\n indexMap.linePosition,\n indexMap.linePosition + nPositions\n );\n\n for (let i = 0, il = geometry.indices.length; i < il; ++i) {\n // Extract range of data we are working with, defined by start\n // and end indices (these index into the geometry.data array)\n const start = geometry.indices[i];\n const end =\n i === il - 1\n ? geometry.data.length // last line, so read to end of data\n : geometry.indices[i + 1]; // start index for next line\n\n lines.pathIndices[indexMap.linePath++] = indexMap.linePosition;\n indexMap.linePosition += (end - start) / coordLength;\n }\n}\n\n/**\n * Fills (Multi)Polygon coordinates into polygons object of arrays\n *\n * @param geometry\n * @param polygons\n * @param indexMap\n * @param coordLength\n * @param properties\n */\nfunction handlePolygon(\n geometry: FlatPolygon,\n polygons: Polygons,\n indexMap: {\n pointPosition?: number;\n pointFeature?: number;\n linePosition?: number;\n linePath?: number;\n lineFeature?: number;\n polygonPosition: number;\n polygonObject: number;\n polygonRing: number;\n polygonFeature: number;\n feature: number;\n },\n coordLength: number,\n properties: {[x: string]: string | number | boolean | null}\n): void {\n polygons.positions.set(geometry.data, indexMap.polygonPosition * coordLength);\n\n const nPositions = geometry.data.length / coordLength;\n fillNumericProperties(polygons, properties, indexMap.polygonPosition, nPositions);\n polygons.globalFeatureIds.fill(\n indexMap.feature,\n indexMap.polygonPosition,\n indexMap.polygonPosition + nPositions\n );\n polygons.featureIds.fill(\n indexMap.polygonFeature,\n indexMap.polygonPosition,\n indexMap.polygonPosition + nPositions\n );\n\n // Unlike Point & LineString geometry.indices is a 2D array\n for (let l = 0, ll = geometry.indices.length; l < ll; ++l) {\n const startPosition = indexMap.polygonPosition;\n polygons.polygonIndices[indexMap.polygonObject++] = startPosition;\n\n const areas = geometry.areas[l];\n const indices = geometry.indices[l];\n const nextIndices = geometry.indices[l + 1];\n\n for (let i = 0, il = indices.length; i < il; ++i) {\n const start = indices[i];\n const end =\n i === il - 1\n ? // last line, so either read to:\n nextIndices === undefined\n ? geometry.data.length // end of data (no next indices)\n : nextIndices[0] // start of first line in nextIndices\n : indices[i + 1]; // start index for next line\n\n polygons.primitivePolygonIndices[indexMap.polygonRing++] = indexMap.polygonPosition;\n indexMap.polygonPosition += (end - start) / coordLength;\n }\n\n const endPosition = indexMap.polygonPosition;\n triangulatePolygon(polygons, areas, indices, {startPosition, endPosition, coordLength});\n }\n}\n\n/**\n * Triangulate polygon using earcut\n *\n * @param polygons\n * @param areas\n * @param indices\n * @param param3\n */\nfunction triangulatePolygon(\n polygons: Polygons,\n areas: number[],\n indices: number[],\n {\n startPosition,\n endPosition,\n coordLength\n }: {startPosition: number; endPosition: number; coordLength: number}\n): void {\n if (!polygons.triangles) {\n return;\n }\n\n const start = startPosition * coordLength;\n const end = endPosition * coordLength;\n\n // Extract positions and holes for just this polygon\n const polygonPositions = polygons.positions.subarray(start, end);\n\n // Holes are referenced relative to outer polygon\n const offset = indices[0];\n const holes = indices.slice(1).map((n: number) => (n - offset) / coordLength);\n\n // Compute triangulation\n // @ts-expect-error TODO can earcut handle binary arrays? Add tests?\n const triangles = earcut(polygonPositions, holes, coordLength, areas);\n\n // Indices returned by triangulation are relative to start\n // of polygon, so we need to offset\n for (let t = 0, tl = triangles.length; t < tl; ++t) {\n polygons.triangles.push(startPosition + triangles[t]);\n }\n}\n\n/**\n * Wraps an object containing array into accessors\n *\n * @param obj\n * @param size\n */\nfunction wrapProps(\n obj: {[key: string]: TypedArray},\n size: number\n): {[key: string]: BinaryAttribute} {\n const returnObj = {};\n for (const key in obj) {\n returnObj[key] = {value: obj[key], size};\n }\n return returnObj;\n}\n\n/**\n * Wrap each array in an accessor object with value and size keys\n *\n * @param points\n * @param lines\n * @param polygons\n * @param coordLength\n * @returns object\n */\nfunction makeAccessorObjects(\n points: Points,\n lines: Lines,\n polygons: Polygons,\n coordLength: number\n): BinaryFeatures {\n const binaryFeatures = {\n points: {\n ...points,\n positions: {value: points.positions, size: coordLength},\n globalFeatureIds: {value: points.globalFeatureIds, size: 1},\n featureIds: {value: points.featureIds, size: 1},\n numericProps: wrapProps(points.numericProps, 1)\n },\n lines: {\n ...lines,\n positions: {value: lines.positions, size: coordLength},\n pathIndices: {value: lines.pathIndices, size: 1},\n globalFeatureIds: {value: lines.globalFeatureIds, size: 1},\n featureIds: {value: lines.featureIds, size: 1},\n numericProps: wrapProps(lines.numericProps, 1)\n },\n polygons: {\n ...polygons,\n positions: {value: polygons.positions, size: coordLength},\n polygonIndices: {value: polygons.polygonIndices, size: 1},\n primitivePolygonIndices: {value: polygons.primitivePolygonIndices, size: 1},\n globalFeatureIds: {value: polygons.globalFeatureIds, size: 1},\n featureIds: {value: polygons.featureIds, size: 1},\n numericProps: wrapProps(polygons.numericProps, 1)\n } as BinaryPolygonFeatures\n };\n\n if (polygons.triangles) {\n binaryFeatures.polygons.triangles = {value: new Uint32Array(polygons.triangles), size: 1};\n }\n\n return binaryFeatures;\n}\n\n/**\n * Add numeric properties to object\n *\n * @param object\n * @param properties\n * @param index\n * @param length\n */\nfunction fillNumericProperties(\n object: Points | Lines | Polygons,\n properties: {[x: string]: string | number | boolean | null},\n index: number,\n length: number\n): void {\n for (const numericPropName in object.numericProps) {\n if (numericPropName in properties) {\n const value = properties[numericPropName] as number;\n object.numericProps[numericPropName].fill(value, index, index + length);\n }\n }\n}\n\n/**\n * Keep string properties in object\n *\n * @param properties\n * @param numericKeys\n * @returns object\n */\nfunction keepStringProperties(\n properties: {[x: string]: string | number | boolean | null},\n numericKeys: string[]\n) {\n const props = {};\n for (const key in properties) {\n if (!numericKeys.includes(key)) {\n props[key] = properties[key];\n }\n }\n return props;\n}\n\n/**\n *\n * Deduce correct array constructor to use for a given value\n *\n * @param x value to test\n * @param constructor previous constructor deduced\n * @returns PropArrayConstructor\n */\nfunction deduceArrayType(x: any, constructor: PropArrayConstructor): PropArrayConstructor {\n if (constructor === Array || !Number.isFinite(x)) {\n return Array;\n }\n\n // If this or previous value required 64bits use Float64Array\n return constructor === Float64Array || Math.fround(x) !== x ? Float64Array : Float32Array;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"flat-geojson-to-binary.js","names":["_polygon","require","flatGeojsonToBinary","features","geometryInfo","options","propArrayTypes","extractNumericPropTypes","numericPropKeys","Object","keys","filter","k","Array","fillArrays","PositionDataType","Float32Array","triangulate","TEST_EXPORTS","exports","feature","properties","key","val","deduceArrayType","pointPositionsCount","pointFeaturesCount","linePositionsCount","linePathsCount","lineFeaturesCount","polygonPositionsCount","polygonObjectsCount","polygonRingsCount","polygonFeaturesCount","coordLength","hasGlobalId","GlobalFeatureIdsDataType","length","Uint32Array","Uint16Array","points","type","positions","globalFeatureIds","featureIds","numericProps","fields","lines","pathIndices","polygons","polygonIndices","primitivePolygonIndices","triangles","object","propName","T","indexMap","pointPosition","pointFeature","linePosition","linePath","lineFeature","polygonPosition","polygonObject","polygonRing","polygonFeature","geometry","handlePoint","push","keepStringProperties","id","handleLineString","handlePolygon","Error","makeAccessorObjects","set","data","nPositions","fillNumericProperties","fill","i","il","indices","start","end","l","ll","startPosition","areas","nextIndices","undefined","endPosition","triangulatePolygon","_ref","polygonPositions","subarray","offset","holes","slice","map","n","earcut","t","tl","wrapProps","obj","size","returnObj","value","binaryFeatures","index","numericPropName","numericKeys","props","includes","x","constructor","Number","isFinite","Float64Array","Math","fround"],"sources":["../../../src/lib/flat-geojson-to-binary.ts"],"sourcesContent":["/* eslint-disable indent */\nimport {earcut} from '@math.gl/polygon';\nimport type {\n BinaryAttribute,\n BinaryFeatures,\n BinaryPolygonFeatures,\n FlatFeature,\n FlatPoint,\n FlatLineString,\n FlatPolygon,\n GeojsonGeometryInfo,\n TypedArray\n} from '@loaders.gl/schema';\nimport {PropArrayConstructor, Lines, Points, Polygons} from './flat-geojson-to-binary-types';\n\n/**\n * Convert binary features to flat binary arrays. Similar to\n * `geojsonToBinary` helper function, except that it expects\n * a binary representation of the feature data, which enables\n * 2X-3X speed increase in parse speed, compared to using\n * geoJSON. See `binary-vector-tile/VectorTileFeature` for\n * data format detais\n *\n * @param features\n * @param geometryInfo\n * @param options\n * @returns filled arrays\n */\nexport function flatGeojsonToBinary(\n features: FlatFeature[],\n geometryInfo: GeojsonGeometryInfo,\n options?: FlatGeojsonToBinaryOptions\n) {\n const propArrayTypes = extractNumericPropTypes(features);\n const numericPropKeys = Object.keys(propArrayTypes).filter((k) => propArrayTypes[k] !== Array);\n return fillArrays(\n features,\n {\n propArrayTypes,\n ...geometryInfo\n },\n {\n numericPropKeys: (options && options.numericPropKeys) || numericPropKeys,\n PositionDataType: options ? options.PositionDataType : Float32Array,\n triangulate: options ? options.triangulate : true\n }\n );\n}\n\n/**\n * Options for `flatGeojsonToBinary`\n */\nexport type FlatGeojsonToBinaryOptions = {\n numericPropKeys?: string[];\n PositionDataType?: Float32ArrayConstructor | Float64ArrayConstructor;\n triangulate?: boolean;\n};\n\nexport const TEST_EXPORTS = {\n extractNumericPropTypes\n};\n\n/**\n * Extracts properties that are always numeric\n *\n * @param features\n * @returns object with numeric types\n */\nfunction extractNumericPropTypes(features: FlatFeature[]): {\n [key: string]: PropArrayConstructor;\n} {\n const propArrayTypes = {};\n for (const feature of features) {\n if (feature.properties) {\n for (const key in feature.properties) {\n // If property has not been seen before, or if property has been numeric\n // in all previous features, check if numeric in this feature\n // If not numeric, Array is stored to prevent rechecking in the future\n // Additionally, detects if 64 bit precision is required\n const val = feature.properties[key];\n propArrayTypes[key] = deduceArrayType(val, propArrayTypes[key]);\n }\n }\n }\n\n return propArrayTypes;\n}\n\n/**\n * Fills coordinates into pre-allocated typed arrays\n *\n * @param features\n * @param geometryInfo\n * @param options\n * @returns an accessor object with value and size keys\n */\n// eslint-disable-next-line complexity\nfunction fillArrays(\n features: FlatFeature[],\n geometryInfo: GeojsonGeometryInfo & {\n propArrayTypes: {[key: string]: PropArrayConstructor};\n },\n options: FlatGeojsonToBinaryOptions\n) {\n const {\n pointPositionsCount,\n pointFeaturesCount,\n linePositionsCount,\n linePathsCount,\n lineFeaturesCount,\n polygonPositionsCount,\n polygonObjectsCount,\n polygonRingsCount,\n polygonFeaturesCount,\n propArrayTypes,\n coordLength\n } = geometryInfo;\n const {numericPropKeys = [], PositionDataType = Float32Array, triangulate = true} = options;\n const hasGlobalId = features[0] && 'id' in features[0];\n const GlobalFeatureIdsDataType = features.length > 65535 ? Uint32Array : Uint16Array;\n const points: Points = {\n type: 'Point',\n positions: new PositionDataType(pointPositionsCount * coordLength),\n globalFeatureIds: new GlobalFeatureIdsDataType(pointPositionsCount),\n featureIds:\n pointFeaturesCount > 65535\n ? new Uint32Array(pointPositionsCount)\n : new Uint16Array(pointPositionsCount),\n numericProps: {},\n properties: [],\n fields: []\n };\n const lines: Lines = {\n type: 'LineString',\n pathIndices:\n linePositionsCount > 65535\n ? new Uint32Array(linePathsCount + 1)\n : new Uint16Array(linePathsCount + 1),\n positions: new PositionDataType(linePositionsCount * coordLength),\n globalFeatureIds: new GlobalFeatureIdsDataType(linePositionsCount),\n featureIds:\n lineFeaturesCount > 65535\n ? new Uint32Array(linePositionsCount)\n : new Uint16Array(linePositionsCount),\n numericProps: {},\n properties: [],\n fields: []\n };\n const polygons: Polygons = {\n type: 'Polygon',\n polygonIndices:\n polygonPositionsCount > 65535\n ? new Uint32Array(polygonObjectsCount + 1)\n : new Uint16Array(polygonObjectsCount + 1),\n primitivePolygonIndices:\n polygonPositionsCount > 65535\n ? new Uint32Array(polygonRingsCount + 1)\n : new Uint16Array(polygonRingsCount + 1),\n positions: new PositionDataType(polygonPositionsCount * coordLength),\n globalFeatureIds: new GlobalFeatureIdsDataType(polygonPositionsCount),\n featureIds:\n polygonFeaturesCount > 65535\n ? new Uint32Array(polygonPositionsCount)\n : new Uint16Array(polygonPositionsCount),\n numericProps: {},\n properties: [],\n fields: []\n };\n\n if (triangulate) {\n polygons.triangles = [];\n }\n\n // Instantiate numeric properties arrays; one value per vertex\n for (const object of [points, lines, polygons]) {\n for (const propName of numericPropKeys) {\n // If property has been numeric in all previous features in which the property existed, check\n // if numeric in this feature\n const T = propArrayTypes[propName];\n object.numericProps[propName] = new T(object.positions.length / coordLength) as TypedArray;\n }\n }\n\n // Set last element of path/polygon indices as positions length\n lines.pathIndices[linePathsCount] = linePositionsCount;\n polygons.polygonIndices[polygonObjectsCount] = polygonPositionsCount;\n polygons.primitivePolygonIndices[polygonRingsCount] = polygonPositionsCount;\n\n const indexMap = {\n pointPosition: 0,\n pointFeature: 0,\n linePosition: 0,\n linePath: 0,\n lineFeature: 0,\n polygonPosition: 0,\n polygonObject: 0,\n polygonRing: 0,\n polygonFeature: 0,\n feature: 0\n };\n\n for (const feature of features) {\n const geometry = feature.geometry;\n const properties = feature.properties || {};\n\n switch (geometry.type) {\n case 'Point':\n handlePoint(geometry, points, indexMap, coordLength, properties);\n points.properties.push(keepStringProperties(properties, numericPropKeys));\n if (hasGlobalId) {\n points.fields.push({id: feature.id});\n }\n indexMap.pointFeature++;\n break;\n case 'LineString':\n handleLineString(geometry, lines, indexMap, coordLength, properties);\n lines.properties.push(keepStringProperties(properties, numericPropKeys));\n if (hasGlobalId) {\n lines.fields.push({id: feature.id});\n }\n indexMap.lineFeature++;\n break;\n case 'Polygon':\n handlePolygon(geometry, polygons, indexMap, coordLength, properties);\n polygons.properties.push(keepStringProperties(properties, numericPropKeys));\n if (hasGlobalId) {\n polygons.fields.push({id: feature.id});\n }\n indexMap.polygonFeature++;\n break;\n default:\n throw new Error('Invalid geometry type');\n }\n\n indexMap.feature++;\n }\n\n // Wrap each array in an accessor object with value and size keys\n return makeAccessorObjects(points, lines, polygons, coordLength);\n}\n\n/**\n * Fills (Multi)Point coordinates into points object of arrays\n *\n * @param geometry\n * @param points\n * @param indexMap\n * @param coordLength\n * @param properties\n */\nfunction handlePoint(\n geometry: FlatPoint,\n points: Points,\n indexMap: {\n pointPosition: number;\n pointFeature: number;\n linePosition?: number;\n linePath?: number;\n lineFeature?: number;\n polygonPosition?: number;\n polygonObject?: number;\n polygonRing?: number;\n polygonFeature?: number;\n feature: number;\n },\n coordLength: number,\n properties: {[x: string]: string | number | boolean | null}\n): void {\n points.positions.set(geometry.data, indexMap.pointPosition * coordLength);\n\n const nPositions = geometry.data.length / coordLength;\n fillNumericProperties(points, properties, indexMap.pointPosition, nPositions);\n points.globalFeatureIds.fill(\n indexMap.feature,\n indexMap.pointPosition,\n indexMap.pointPosition + nPositions\n );\n points.featureIds.fill(\n indexMap.pointFeature,\n indexMap.pointPosition,\n indexMap.pointPosition + nPositions\n );\n\n indexMap.pointPosition += nPositions;\n}\n\n/**\n * Fills (Multi)LineString coordinates into lines object of arrays\n *\n * @param geometry\n * @param lines\n * @param indexMap\n * @param coordLength\n * @param properties\n */\nfunction handleLineString(\n geometry: FlatLineString,\n lines: Lines,\n indexMap: {\n pointPosition?: number;\n pointFeature?: number;\n linePosition: number;\n linePath: number;\n lineFeature: number;\n polygonPosition?: number;\n polygonObject?: number;\n polygonRing?: number;\n polygonFeature?: number;\n feature: number;\n },\n coordLength: number,\n properties: {[x: string]: string | number | boolean | null}\n): void {\n lines.positions.set(geometry.data, indexMap.linePosition * coordLength);\n\n const nPositions = geometry.data.length / coordLength;\n fillNumericProperties(lines, properties, indexMap.linePosition, nPositions);\n\n lines.globalFeatureIds.fill(\n indexMap.feature,\n indexMap.linePosition,\n indexMap.linePosition + nPositions\n );\n lines.featureIds.fill(\n indexMap.lineFeature,\n indexMap.linePosition,\n indexMap.linePosition + nPositions\n );\n\n for (let i = 0, il = geometry.indices.length; i < il; ++i) {\n // Extract range of data we are working with, defined by start\n // and end indices (these index into the geometry.data array)\n const start = geometry.indices[i];\n const end =\n i === il - 1\n ? geometry.data.length // last line, so read to end of data\n : geometry.indices[i + 1]; // start index for next line\n\n lines.pathIndices[indexMap.linePath++] = indexMap.linePosition;\n indexMap.linePosition += (end - start) / coordLength;\n }\n}\n\n/**\n * Fills (Multi)Polygon coordinates into polygons object of arrays\n *\n * @param geometry\n * @param polygons\n * @param indexMap\n * @param coordLength\n * @param properties\n */\nfunction handlePolygon(\n geometry: FlatPolygon,\n polygons: Polygons,\n indexMap: {\n pointPosition?: number;\n pointFeature?: number;\n linePosition?: number;\n linePath?: number;\n lineFeature?: number;\n polygonPosition: number;\n polygonObject: number;\n polygonRing: number;\n polygonFeature: number;\n feature: number;\n },\n coordLength: number,\n properties: {[x: string]: string | number | boolean | null}\n): void {\n polygons.positions.set(geometry.data, indexMap.polygonPosition * coordLength);\n\n const nPositions = geometry.data.length / coordLength;\n fillNumericProperties(polygons, properties, indexMap.polygonPosition, nPositions);\n polygons.globalFeatureIds.fill(\n indexMap.feature,\n indexMap.polygonPosition,\n indexMap.polygonPosition + nPositions\n );\n polygons.featureIds.fill(\n indexMap.polygonFeature,\n indexMap.polygonPosition,\n indexMap.polygonPosition + nPositions\n );\n\n // Unlike Point & LineString geometry.indices is a 2D array\n for (let l = 0, ll = geometry.indices.length; l < ll; ++l) {\n const startPosition = indexMap.polygonPosition;\n polygons.polygonIndices[indexMap.polygonObject++] = startPosition;\n\n const areas = geometry.areas[l];\n const indices = geometry.indices[l];\n const nextIndices = geometry.indices[l + 1];\n\n for (let i = 0, il = indices.length; i < il; ++i) {\n const start = indices[i];\n const end =\n i === il - 1\n ? // last line, so either read to:\n nextIndices === undefined\n ? geometry.data.length // end of data (no next indices)\n : nextIndices[0] // start of first line in nextIndices\n : indices[i + 1]; // start index for next line\n\n polygons.primitivePolygonIndices[indexMap.polygonRing++] = indexMap.polygonPosition;\n indexMap.polygonPosition += (end - start) / coordLength;\n }\n\n const endPosition = indexMap.polygonPosition;\n triangulatePolygon(polygons, areas, indices, {startPosition, endPosition, coordLength});\n }\n}\n\n/**\n * Triangulate polygon using earcut\n *\n * @param polygons\n * @param areas\n * @param indices\n * @param param3\n */\nfunction triangulatePolygon(\n polygons: Polygons,\n areas: number[],\n indices: number[],\n {\n startPosition,\n endPosition,\n coordLength\n }: {startPosition: number; endPosition: number; coordLength: number}\n): void {\n if (!polygons.triangles) {\n return;\n }\n\n const start = startPosition * coordLength;\n const end = endPosition * coordLength;\n\n // Extract positions and holes for just this polygon\n const polygonPositions = polygons.positions.subarray(start, end);\n\n // Holes are referenced relative to outer polygon\n const offset = indices[0];\n const holes = indices.slice(1).map((n: number) => (n - offset) / coordLength);\n\n // Compute triangulation\n // @ts-expect-error TODO can earcut handle binary arrays? Add tests?\n const triangles = earcut(polygonPositions, holes, coordLength, areas);\n\n // Indices returned by triangulation are relative to start\n // of polygon, so we need to offset\n for (let t = 0, tl = triangles.length; t < tl; ++t) {\n polygons.triangles.push(startPosition + triangles[t]);\n }\n}\n\n/**\n * Wraps an object containing array into accessors\n *\n * @param obj\n * @param size\n */\nfunction wrapProps(\n obj: {[key: string]: TypedArray},\n size: number\n): {[key: string]: BinaryAttribute} {\n const returnObj = {};\n for (const key in obj) {\n returnObj[key] = {value: obj[key], size};\n }\n return returnObj;\n}\n\n/**\n * Wrap each array in an accessor object with value and size keys\n *\n * @param points\n * @param lines\n * @param polygons\n * @param coordLength\n * @returns object\n */\nfunction makeAccessorObjects(\n points: Points,\n lines: Lines,\n polygons: Polygons,\n coordLength: number\n): BinaryFeatures {\n const binaryFeatures = {\n points: {\n ...points,\n positions: {value: points.positions, size: coordLength},\n globalFeatureIds: {value: points.globalFeatureIds, size: 1},\n featureIds: {value: points.featureIds, size: 1},\n numericProps: wrapProps(points.numericProps, 1)\n },\n lines: {\n ...lines,\n positions: {value: lines.positions, size: coordLength},\n pathIndices: {value: lines.pathIndices, size: 1},\n globalFeatureIds: {value: lines.globalFeatureIds, size: 1},\n featureIds: {value: lines.featureIds, size: 1},\n numericProps: wrapProps(lines.numericProps, 1)\n },\n polygons: {\n ...polygons,\n positions: {value: polygons.positions, size: coordLength},\n polygonIndices: {value: polygons.polygonIndices, size: 1},\n primitivePolygonIndices: {value: polygons.primitivePolygonIndices, size: 1},\n globalFeatureIds: {value: polygons.globalFeatureIds, size: 1},\n featureIds: {value: polygons.featureIds, size: 1},\n numericProps: wrapProps(polygons.numericProps, 1)\n } as BinaryPolygonFeatures\n };\n\n if (polygons.triangles) {\n binaryFeatures.polygons.triangles = {value: new Uint32Array(polygons.triangles), size: 1};\n }\n\n return binaryFeatures;\n}\n\n/**\n * Add numeric properties to object\n *\n * @param object\n * @param properties\n * @param index\n * @param length\n */\nfunction fillNumericProperties(\n object: Points | Lines | Polygons,\n properties: {[x: string]: string | number | boolean | null},\n index: number,\n length: number\n): void {\n for (const numericPropName in object.numericProps) {\n if (numericPropName in properties) {\n const value = properties[numericPropName] as number;\n object.numericProps[numericPropName].fill(value, index, index + length);\n }\n }\n}\n\n/**\n * Keep string properties in object\n *\n * @param properties\n * @param numericKeys\n * @returns object\n */\nfunction keepStringProperties(\n properties: {[x: string]: string | number | boolean | null},\n numericKeys: string[]\n) {\n const props = {};\n for (const key in properties) {\n if (!numericKeys.includes(key)) {\n props[key] = properties[key];\n }\n }\n return props;\n}\n\n/**\n *\n * Deduce correct array constructor to use for a given value\n *\n * @param x value to test\n * @param constructor previous constructor deduced\n * @returns PropArrayConstructor\n */\nfunction deduceArrayType(x: any, constructor: PropArrayConstructor): PropArrayConstructor {\n if (constructor === Array || !Number.isFinite(x)) {\n return Array;\n }\n\n // If this or previous value required 64bits use Float64Array\n return constructor === Float64Array || Math.fround(x) !== x ? Float64Array : Float32Array;\n}\n"],"mappings":"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"}
@@ -8,16 +8,18 @@ var _extractGeometryInfo = require("./extract-geometry-info");
8
8
  var _geojsonToFlatGeojson = require("./geojson-to-flat-geojson");
9
9
  var _flatGeojsonToBinary = require("./flat-geojson-to-binary");
10
10
  function geojsonToBinary(features) {
11
- var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {
11
+ let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {
12
12
  fixRingWinding: true,
13
13
  triangulate: true
14
14
  };
15
- var geometryInfo = (0, _extractGeometryInfo.extractGeometryInfo)(features);
16
- var coordLength = geometryInfo.coordLength;
17
- var fixRingWinding = options.fixRingWinding;
18
- var flatFeatures = (0, _geojsonToFlatGeojson.geojsonToFlatGeojson)(features, {
19
- coordLength: coordLength,
20
- fixRingWinding: fixRingWinding
15
+ const geometryInfo = (0, _extractGeometryInfo.extractGeometryInfo)(features);
16
+ const coordLength = geometryInfo.coordLength;
17
+ const {
18
+ fixRingWinding
19
+ } = options;
20
+ const flatFeatures = (0, _geojsonToFlatGeojson.geojsonToFlatGeojson)(features, {
21
+ coordLength,
22
+ fixRingWinding
21
23
  });
22
24
  return (0, _flatGeojsonToBinary.flatGeojsonToBinary)(flatFeatures, geometryInfo, {
23
25
  numericPropKeys: options.numericPropKeys,