@loaders.gl/gis 3.3.0-alpha.5 → 3.3.0-alpha.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/es5/bundle.js +0 -1
- package/dist/es5/bundle.js.map +1 -1
- package/dist/es5/index.js +12 -17
- package/dist/es5/index.js.map +1 -1
- package/dist/es5/lib/binary-to-geojson.js +5 -62
- package/dist/es5/lib/binary-to-geojson.js.map +1 -1
- package/dist/es5/lib/extract-geometry-info.js +8 -43
- package/dist/es5/lib/extract-geometry-info.js.map +1 -1
- package/dist/es5/lib/flat-geojson-to-binary-types.js.map +1 -1
- package/dist/es5/lib/flat-geojson-to-binary.js +30 -59
- package/dist/es5/lib/flat-geojson-to-binary.js.map +1 -1
- package/dist/es5/lib/geojson-to-binary.js +0 -4
- package/dist/es5/lib/geojson-to-binary.js.map +1 -1
- package/dist/es5/lib/geojson-to-flat-geojson.js +4 -30
- package/dist/es5/lib/geojson-to-flat-geojson.js.map +1 -1
- package/dist/es5/lib/transform.js +1 -15
- package/dist/es5/lib/transform.js.map +1 -1
- package/dist/esm/bundle.js +1 -1
- package/dist/esm/bundle.js.map +1 -1
- package/dist/esm/index.js +2 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/lib/binary-to-geojson.js +17 -49
- package/dist/esm/lib/binary-to-geojson.js.map +1 -1
- package/dist/esm/lib/extract-geometry-info.js +1 -19
- package/dist/esm/lib/extract-geometry-info.js.map +1 -1
- package/dist/esm/lib/flat-geojson-to-binary-types.js.map +1 -1
- package/dist/esm/lib/flat-geojson-to-binary.js +21 -30
- package/dist/esm/lib/flat-geojson-to-binary.js.map +1 -1
- package/dist/esm/lib/geojson-to-binary.js +5 -3
- package/dist/esm/lib/geojson-to-binary.js.map +1 -1
- package/dist/esm/lib/geojson-to-flat-geojson.js +7 -19
- package/dist/esm/lib/geojson-to-flat-geojson.js.map +1 -1
- package/dist/esm/lib/transform.js +1 -8
- package/dist/esm/lib/transform.js.map +1 -1
- package/dist/lib/flat-geojson-to-binary.js +1 -0
- package/package.json +4 -4
- package/src/lib/flat-geojson-to-binary.ts +1 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"extract-geometry-info.js","names":["extractGeometryInfo","features","pointPositionsCount","pointFeaturesCount","linePositionsCount","linePathsCount","lineFeaturesCount","polygonPositionsCount","polygonObjectsCount","polygonRingsCount","polygonFeaturesCount","coordLengths","Set","feature","geometry","type","add","coordinates","length","point","coord","line","flattened","flat","polygon","Error","coordLength","size","Math","max"],"sources":["../../../src/lib/extract-geometry-info.ts"],"sourcesContent":["import {Feature, GeojsonGeometryInfo} from '@loaders.gl/schema';\n\n/**\n * Initial scan over GeoJSON features\n * Counts number of coordinates of each geometry type and\n * keeps track of the max coordinate dimensions\n */\n// eslint-disable-next-line complexity, max-statements\nexport function extractGeometryInfo(features: Feature[]): GeojsonGeometryInfo {\n // Counts the number of _positions_, so [x, y, z] counts as one\n let pointPositionsCount = 0;\n let pointFeaturesCount = 0;\n let linePositionsCount = 0;\n let linePathsCount = 0;\n let lineFeaturesCount = 0;\n let polygonPositionsCount = 0;\n let polygonObjectsCount = 0;\n let polygonRingsCount = 0;\n let polygonFeaturesCount = 0;\n const coordLengths = new Set<number>();\n\n for (const feature of features) {\n const geometry = feature.geometry;\n switch (geometry.type) {\n case 'Point':\n pointFeaturesCount++;\n pointPositionsCount++;\n coordLengths.add(geometry.coordinates.length);\n break;\n case 'MultiPoint':\n pointFeaturesCount++;\n pointPositionsCount += geometry.coordinates.length;\n for (const point of geometry.coordinates) {\n coordLengths.add(point.length);\n }\n break;\n case 'LineString':\n lineFeaturesCount++;\n linePositionsCount += geometry.coordinates.length;\n linePathsCount++;\n\n for (const coord of geometry.coordinates) {\n coordLengths.add(coord.length);\n }\n break;\n case 'MultiLineString':\n lineFeaturesCount++;\n for (const line of geometry.coordinates) {\n linePositionsCount += line.length;\n linePathsCount++;\n\n // eslint-disable-next-line max-depth\n for (const coord of line) {\n coordLengths.add(coord.length);\n }\n }\n break;\n case 'Polygon':\n polygonFeaturesCount++;\n polygonObjectsCount++;\n polygonRingsCount += geometry.coordinates.length;\n const flattened = geometry.coordinates.flat();\n polygonPositionsCount += flattened.length;\n\n for (const coord of flattened) {\n coordLengths.add(coord.length);\n }\n break;\n case 'MultiPolygon':\n polygonFeaturesCount++;\n for (const polygon of geometry.coordinates) {\n polygonObjectsCount++;\n polygonRingsCount += polygon.length;\n const flattened = polygon.flat();\n polygonPositionsCount += flattened.length;\n\n // eslint-disable-next-line max-depth\n for (const coord of flattened) {\n coordLengths.add(coord.length);\n }\n }\n break;\n default:\n throw new Error(`Unsupported geometry type: ${geometry.type}`);\n }\n }\n\n return {\n coordLength: coordLengths.size > 0 ? Math.max(...coordLengths) : 2,\n\n pointPositionsCount,\n pointFeaturesCount,\n linePositionsCount,\n linePathsCount,\n lineFeaturesCount,\n polygonPositionsCount,\n polygonObjectsCount,\n polygonRingsCount,\n polygonFeaturesCount\n };\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"flat-geojson-to-binary-types.js","names":[],"sources":["../../../src/lib/flat-geojson-to-binary-types.ts"],"sourcesContent":["import type {TypedArray} from '@loaders.gl/schema';\n\n/**\n * Permissable constructor for numeric props\n */\nexport type PropArrayConstructor =\n | Float32ArrayConstructor\n | Float64ArrayConstructor\n | ArrayConstructor;\n\n/**\n * Collection type for holding intermediate binary data before conversion to `BinaryPointGeometry`\n */\nexport type Points = {\n type: 'Point';\n positions: Float32Array | Float64Array;\n globalFeatureIds: Uint16Array | Uint32Array;\n featureIds: Uint16Array | Uint32Array;\n numericProps: {[key: string]: TypedArray};\n properties: {}[];\n fields: {\n id?: string | number;\n }[];\n};\n\n/**\n * Collection type for holding intermediate binary data before conversion to `BinaryLineStringGeometry`\n */\nexport type Lines = {\n type: 'LineString';\n positions: Float32Array | Float64Array;\n pathIndices: Uint16Array | Uint32Array;\n globalFeatureIds: Uint16Array | Uint32Array;\n featureIds: Uint16Array | Uint32Array;\n numericProps: {[key: string]: TypedArray};\n properties: {}[];\n fields: {\n id?: string | number;\n }[];\n};\n\n/**\n * Collection type for holding intermediate binary data before conversion to `BinaryPolygonGeometry`\n */\nexport type Polygons = {\n type: 'Polygon';\n positions: Float32Array | Float64Array;\n polygonIndices: Uint16Array | Uint32Array;\n primitivePolygonIndices: Uint16Array | Uint32Array;\n triangles: number[];\n globalFeatureIds: Uint16Array | Uint32Array;\n featureIds: Uint16Array | Uint32Array;\n numericProps: {[key: string]: TypedArray};\n properties: {}[];\n fields: {\n id?: string | number;\n }[];\n};\n"],"mappings":""}
|
|
@@ -1,27 +1,18 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
|
|
5
4
|
Object.defineProperty(exports, "__esModule", {
|
|
6
5
|
value: true
|
|
7
6
|
});
|
|
8
|
-
exports.flatGeojsonToBinary = flatGeojsonToBinary;
|
|
9
7
|
exports.TEST_EXPORTS = void 0;
|
|
10
|
-
|
|
8
|
+
exports.flatGeojsonToBinary = flatGeojsonToBinary;
|
|
11
9
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
12
|
-
|
|
13
10
|
var _polygon = require("@math.gl/polygon");
|
|
14
|
-
|
|
15
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; } } }; }
|
|
16
|
-
|
|
17
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); }
|
|
18
|
-
|
|
19
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; }
|
|
20
|
-
|
|
21
|
-
function
|
|
22
|
-
|
|
23
|
-
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
|
|
24
|
-
|
|
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; }
|
|
25
16
|
function flatGeojsonToBinary(features, geometryInfo, options) {
|
|
26
17
|
var propArrayTypes = extractNumericPropTypes(features);
|
|
27
18
|
var numericPropKeys = Object.keys(propArrayTypes).filter(function (k) {
|
|
@@ -38,18 +29,15 @@ function flatGeojsonToBinary(features, geometryInfo, options) {
|
|
|
38
29
|
var TEST_EXPORTS = {
|
|
39
30
|
extractNumericPropTypes: extractNumericPropTypes
|
|
40
31
|
};
|
|
41
|
-
exports.TEST_EXPORTS = TEST_EXPORTS;
|
|
42
32
|
|
|
33
|
+
exports.TEST_EXPORTS = TEST_EXPORTS;
|
|
43
34
|
function extractNumericPropTypes(features) {
|
|
44
35
|
var propArrayTypes = {};
|
|
45
|
-
|
|
46
36
|
var _iterator = _createForOfIteratorHelper(features),
|
|
47
|
-
|
|
48
|
-
|
|
37
|
+
_step;
|
|
49
38
|
try {
|
|
50
39
|
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
51
40
|
var feature = _step.value;
|
|
52
|
-
|
|
53
41
|
if (feature.properties) {
|
|
54
42
|
for (var _key in feature.properties) {
|
|
55
43
|
var val = feature.properties[_key];
|
|
@@ -62,26 +50,25 @@ function extractNumericPropTypes(features) {
|
|
|
62
50
|
} finally {
|
|
63
51
|
_iterator.f();
|
|
64
52
|
}
|
|
65
|
-
|
|
66
53
|
return propArrayTypes;
|
|
67
54
|
}
|
|
68
55
|
|
|
69
56
|
function fillArrays(features, geometryInfo, options) {
|
|
70
57
|
var pointPositionsCount = geometryInfo.pointPositionsCount,
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
58
|
+
pointFeaturesCount = geometryInfo.pointFeaturesCount,
|
|
59
|
+
linePositionsCount = geometryInfo.linePositionsCount,
|
|
60
|
+
linePathsCount = geometryInfo.linePathsCount,
|
|
61
|
+
lineFeaturesCount = geometryInfo.lineFeaturesCount,
|
|
62
|
+
polygonPositionsCount = geometryInfo.polygonPositionsCount,
|
|
63
|
+
polygonObjectsCount = geometryInfo.polygonObjectsCount,
|
|
64
|
+
polygonRingsCount = geometryInfo.polygonRingsCount,
|
|
65
|
+
polygonFeaturesCount = geometryInfo.polygonFeaturesCount,
|
|
66
|
+
propArrayTypes = geometryInfo.propArrayTypes,
|
|
67
|
+
coordLength = geometryInfo.coordLength;
|
|
81
68
|
var _options$numericPropK = options.numericPropKeys,
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
69
|
+
numericPropKeys = _options$numericPropK === void 0 ? [] : _options$numericPropK,
|
|
70
|
+
_options$PositionData = options.PositionDataType,
|
|
71
|
+
PositionDataType = _options$PositionData === void 0 ? Float32Array : _options$PositionData;
|
|
85
72
|
var hasGlobalId = features[0] && 'id' in features[0];
|
|
86
73
|
var GlobalFeatureIdsDataType = features.length > 65535 ? Uint32Array : Uint16Array;
|
|
87
74
|
var points = {
|
|
@@ -118,10 +105,8 @@ function fillArrays(features, geometryInfo, options) {
|
|
|
118
105
|
|
|
119
106
|
for (var _i = 0, _arr = [points, lines, polygons]; _i < _arr.length; _i++) {
|
|
120
107
|
var object = _arr[_i];
|
|
121
|
-
|
|
122
108
|
var _iterator2 = _createForOfIteratorHelper(numericPropKeys),
|
|
123
|
-
|
|
124
|
-
|
|
109
|
+
_step2;
|
|
125
110
|
try {
|
|
126
111
|
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
|
|
127
112
|
var propName = _step2.value;
|
|
@@ -150,68 +135,55 @@ function fillArrays(features, geometryInfo, options) {
|
|
|
150
135
|
polygonFeature: 0,
|
|
151
136
|
feature: 0
|
|
152
137
|
};
|
|
153
|
-
|
|
154
138
|
var _iterator3 = _createForOfIteratorHelper(features),
|
|
155
|
-
|
|
156
|
-
|
|
139
|
+
_step3;
|
|
157
140
|
try {
|
|
158
141
|
for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
|
|
159
142
|
var feature = _step3.value;
|
|
160
143
|
var geometry = feature.geometry;
|
|
161
144
|
var properties = feature.properties || {};
|
|
162
|
-
|
|
163
145
|
switch (geometry.type) {
|
|
164
146
|
case 'Point':
|
|
165
147
|
handlePoint(geometry, points, indexMap, coordLength, properties);
|
|
166
148
|
points.properties.push(keepStringProperties(properties, numericPropKeys));
|
|
167
|
-
|
|
168
149
|
if (hasGlobalId) {
|
|
169
150
|
points.fields.push({
|
|
170
151
|
id: feature.id
|
|
171
152
|
});
|
|
172
153
|
}
|
|
173
|
-
|
|
174
154
|
indexMap.pointFeature++;
|
|
175
155
|
break;
|
|
176
|
-
|
|
177
156
|
case 'LineString':
|
|
178
157
|
handleLineString(geometry, lines, indexMap, coordLength, properties);
|
|
179
158
|
lines.properties.push(keepStringProperties(properties, numericPropKeys));
|
|
180
|
-
|
|
181
159
|
if (hasGlobalId) {
|
|
182
160
|
lines.fields.push({
|
|
183
161
|
id: feature.id
|
|
184
162
|
});
|
|
185
163
|
}
|
|
186
|
-
|
|
187
164
|
indexMap.lineFeature++;
|
|
188
165
|
break;
|
|
189
|
-
|
|
190
166
|
case 'Polygon':
|
|
191
167
|
handlePolygon(geometry, polygons, indexMap, coordLength, properties);
|
|
192
168
|
polygons.properties.push(keepStringProperties(properties, numericPropKeys));
|
|
193
|
-
|
|
194
169
|
if (hasGlobalId) {
|
|
195
170
|
polygons.fields.push({
|
|
196
171
|
id: feature.id
|
|
197
172
|
});
|
|
198
173
|
}
|
|
199
|
-
|
|
200
174
|
indexMap.polygonFeature++;
|
|
201
175
|
break;
|
|
202
|
-
|
|
203
176
|
default:
|
|
204
177
|
throw new Error('Invalid geometry type');
|
|
205
178
|
}
|
|
206
|
-
|
|
207
179
|
indexMap.feature++;
|
|
208
180
|
}
|
|
181
|
+
|
|
209
182
|
} catch (err) {
|
|
210
183
|
_iterator3.e(err);
|
|
211
184
|
} finally {
|
|
212
185
|
_iterator3.f();
|
|
213
186
|
}
|
|
214
|
-
|
|
215
187
|
return makeAccessorObjects(points, lines, polygons, coordLength);
|
|
216
188
|
}
|
|
217
189
|
|
|
@@ -230,10 +202,10 @@ function handleLineString(geometry, lines, indexMap, coordLength, properties) {
|
|
|
230
202
|
fillNumericProperties(lines, properties, indexMap.linePosition, nPositions);
|
|
231
203
|
lines.globalFeatureIds.fill(indexMap.feature, indexMap.linePosition, indexMap.linePosition + nPositions);
|
|
232
204
|
lines.featureIds.fill(indexMap.lineFeature, indexMap.linePosition, indexMap.linePosition + nPositions);
|
|
233
|
-
|
|
234
205
|
for (var i = 0, il = geometry.indices.length; i < il; ++i) {
|
|
235
206
|
var start = geometry.indices[i];
|
|
236
207
|
var end = i === il - 1 ? geometry.data.length : geometry.indices[i + 1];
|
|
208
|
+
|
|
237
209
|
lines.pathIndices[indexMap.linePath++] = indexMap.linePosition;
|
|
238
210
|
indexMap.linePosition += (end - start) / coordLength;
|
|
239
211
|
}
|
|
@@ -252,14 +224,14 @@ function handlePolygon(geometry, polygons, indexMap, coordLength, properties) {
|
|
|
252
224
|
var areas = geometry.areas[l];
|
|
253
225
|
var indices = geometry.indices[l];
|
|
254
226
|
var nextIndices = geometry.indices[l + 1];
|
|
255
|
-
|
|
256
227
|
for (var i = 0, il = indices.length; i < il; ++i) {
|
|
257
228
|
var start = indices[i];
|
|
258
|
-
var end = i === il - 1 ?
|
|
229
|
+
var end = i === il - 1 ?
|
|
230
|
+
nextIndices === undefined ? geometry.data.length : nextIndices[0] : indices[i + 1];
|
|
231
|
+
|
|
259
232
|
polygons.primitivePolygonIndices[indexMap.polygonRing++] = indexMap.polygonPosition;
|
|
260
233
|
indexMap.polygonPosition += (end - start) / coordLength;
|
|
261
234
|
}
|
|
262
|
-
|
|
263
235
|
var endPosition = indexMap.polygonPosition;
|
|
264
236
|
triangulatePolygon(polygons, areas, indices, {
|
|
265
237
|
startPosition: startPosition,
|
|
@@ -271,15 +243,18 @@ function handlePolygon(geometry, polygons, indexMap, coordLength, properties) {
|
|
|
271
243
|
|
|
272
244
|
function triangulatePolygon(polygons, areas, indices, _ref) {
|
|
273
245
|
var startPosition = _ref.startPosition,
|
|
274
|
-
|
|
275
|
-
|
|
246
|
+
endPosition = _ref.endPosition,
|
|
247
|
+
coordLength = _ref.coordLength;
|
|
276
248
|
var start = startPosition * coordLength;
|
|
277
249
|
var end = endPosition * coordLength;
|
|
250
|
+
|
|
278
251
|
var polygonPositions = polygons.positions.subarray(start, end);
|
|
252
|
+
|
|
279
253
|
var offset = indices[0];
|
|
280
254
|
var holes = indices.slice(1).map(function (n) {
|
|
281
255
|
return (n - offset) / coordLength;
|
|
282
256
|
});
|
|
257
|
+
|
|
283
258
|
var triangles = (0, _polygon.earcut)(polygonPositions, holes, coordLength, areas);
|
|
284
259
|
|
|
285
260
|
for (var t = 0, tl = triangles.length; t < tl; ++t) {
|
|
@@ -289,14 +264,12 @@ function triangulatePolygon(polygons, areas, indices, _ref) {
|
|
|
289
264
|
|
|
290
265
|
function wrapProps(obj, size) {
|
|
291
266
|
var returnObj = {};
|
|
292
|
-
|
|
293
267
|
for (var _key2 in obj) {
|
|
294
268
|
returnObj[_key2] = {
|
|
295
269
|
value: obj[_key2],
|
|
296
270
|
size: size
|
|
297
271
|
};
|
|
298
272
|
}
|
|
299
|
-
|
|
300
273
|
return returnObj;
|
|
301
274
|
}
|
|
302
275
|
|
|
@@ -377,13 +350,11 @@ function fillNumericProperties(object, properties, index, length) {
|
|
|
377
350
|
|
|
378
351
|
function keepStringProperties(properties, numericKeys) {
|
|
379
352
|
var props = {};
|
|
380
|
-
|
|
381
353
|
for (var _key3 in properties) {
|
|
382
354
|
if (!numericKeys.includes(_key3)) {
|
|
383
355
|
props[_key3] = properties[_key3];
|
|
384
356
|
}
|
|
385
357
|
}
|
|
386
|
-
|
|
387
358
|
return props;
|
|
388
359
|
}
|
|
389
360
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/lib/flat-geojson-to-binary.ts"],"names":["flatGeojsonToBinary","features","geometryInfo","options","propArrayTypes","extractNumericPropTypes","numericPropKeys","Object","keys","filter","k","Array","fillArrays","PositionDataType","Float32Array","TEST_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","polygonPositions","subarray","offset","holes","slice","map","n","t","tl","wrapProps","obj","size","returnObj","value","index","numericPropName","numericKeys","props","includes","x","constructor","Number","isFinite","Float64Array","Math","fround"],"mappings":"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","sourcesContent":["/* eslint-disable indent */\nimport {earcut} from '@math.gl/polygon';\nimport type {\n BinaryAttribute,\n BinaryFeatures,\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 }\n );\n}\n\n/**\n * Options for `flatGeojsonToBinary`\n */\nexport type FlatGeojsonToBinaryOptions = {\n numericPropKeys?: string[];\n PositionDataType?: Float32ArrayConstructor | Float64ArrayConstructor;\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} = 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 triangles: [],\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 // 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 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 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 return {\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 triangles: {value: new Uint32Array(polygons.triangles), size: 1},\n globalFeatureIds: {value: polygons.globalFeatureIds, size: 1},\n featureIds: {value: polygons.featureIds, size: 1},\n numericProps: wrapProps(polygons.numericProps, 1)\n }\n };\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"],"file":"flat-geojson-to-binary.js"}
|
|
1
|
+
{"version":3,"file":"flat-geojson-to-binary.js","names":["flatGeojsonToBinary","features","geometryInfo","options","propArrayTypes","extractNumericPropTypes","numericPropKeys","Object","keys","filter","k","Array","fillArrays","PositionDataType","Float32Array","TEST_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","polygonPositions","subarray","offset","holes","slice","map","n","earcut","t","tl","wrapProps","obj","size","returnObj","value","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 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 }\n );\n}\n\n/**\n * Options for `flatGeojsonToBinary`\n */\nexport type FlatGeojsonToBinaryOptions = {\n numericPropKeys?: string[];\n PositionDataType?: Float32ArrayConstructor | Float64ArrayConstructor;\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} = 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 triangles: [],\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 // 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 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 return {\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 triangles: {value: new Uint32Array(polygons.triangles), size: 1},\n globalFeatureIds: {value: polygons.globalFeatureIds, size: 1},\n featureIds: {value: polygons.featureIds, size: 1},\n numericProps: wrapProps(polygons.numericProps, 1)\n }\n };\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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"}
|
|
@@ -4,13 +4,9 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.geojsonToBinary = geojsonToBinary;
|
|
7
|
-
|
|
8
7
|
var _extractGeometryInfo = require("./extract-geometry-info");
|
|
9
|
-
|
|
10
8
|
var _geojsonToFlatGeojson = require("./geojson-to-flat-geojson");
|
|
11
|
-
|
|
12
9
|
var _flatGeojsonToBinary = require("./flat-geojson-to-binary");
|
|
13
|
-
|
|
14
10
|
function geojsonToBinary(features) {
|
|
15
11
|
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {
|
|
16
12
|
fixRingWinding: true
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"geojson-to-binary.js","names":["geojsonToBinary","features","options","fixRingWinding","geometryInfo","extractGeometryInfo","coordLength","flatFeatures","geojsonToFlatGeojson","flatGeojsonToBinary","numericPropKeys","PositionDataType","Float32Array"],"sources":["../../../src/lib/geojson-to-binary.ts"],"sourcesContent":["import type {Feature} from '@loaders.gl/schema';\nimport type {BinaryFeatures} from '@loaders.gl/schema';\n\nimport {extractGeometryInfo} from './extract-geometry-info';\nimport {geojsonToFlatGeojson} from './geojson-to-flat-geojson';\nimport {flatGeojsonToBinary} from './flat-geojson-to-binary';\n\n/**\n * Options for `geojsonToBinary`\n */\nexport type GeojsonToBinaryOptions = {\n fixRingWinding: boolean;\n numericPropKeys?: string[];\n PositionDataType?: Float32ArrayConstructor | Float64ArrayConstructor;\n};\n\n/**\n * Convert GeoJSON features to flat binary arrays\n *\n * @param features\n * @param options\n * @returns features in binary format, grouped by geometry type\n */\nexport function geojsonToBinary(\n features: Feature[],\n options: GeojsonToBinaryOptions = {fixRingWinding: true}\n): BinaryFeatures {\n const geometryInfo = extractGeometryInfo(features);\n const coordLength = geometryInfo.coordLength;\n const {fixRingWinding} = options;\n const flatFeatures = geojsonToFlatGeojson(features, {coordLength, fixRingWinding});\n return flatGeojsonToBinary(flatFeatures, geometryInfo, {\n numericPropKeys: options.numericPropKeys,\n PositionDataType: options.PositionDataType || Float32Array\n });\n}\n"],"mappings":";;;;;;AAGA;AACA;AACA;AAkBO,SAASA,eAAe,CAC7BC,QAAmB,EAEH;EAAA,IADhBC,OAA+B,uEAAG;IAACC,cAAc,EAAE;EAAI,CAAC;EAExD,IAAMC,YAAY,GAAG,IAAAC,wCAAmB,EAACJ,QAAQ,CAAC;EAClD,IAAMK,WAAW,GAAGF,YAAY,CAACE,WAAW;EAC5C,IAAOH,cAAc,GAAID,OAAO,CAAzBC,cAAc;EACrB,IAAMI,YAAY,GAAG,IAAAC,0CAAoB,EAACP,QAAQ,EAAE;IAACK,WAAW,EAAXA,WAAW;IAAEH,cAAc,EAAdA;EAAc,CAAC,CAAC;EAClF,OAAO,IAAAM,wCAAmB,EAACF,YAAY,EAAEH,YAAY,EAAE;IACrDM,eAAe,EAAER,OAAO,CAACQ,eAAe;IACxCC,gBAAgB,EAAET,OAAO,CAACS,gBAAgB,IAAIC;EAChD,CAAC,CAAC;AACJ"}
|
|
@@ -1,28 +1,18 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
|
|
5
4
|
Object.defineProperty(exports, "__esModule", {
|
|
6
5
|
value: true
|
|
7
6
|
});
|
|
8
7
|
exports.geojsonToFlatGeojson = geojsonToFlatGeojson;
|
|
9
|
-
|
|
10
8
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
11
|
-
|
|
12
9
|
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
13
|
-
|
|
14
10
|
var _polygon = require("@math.gl/polygon");
|
|
15
|
-
|
|
16
|
-
function
|
|
17
|
-
|
|
18
|
-
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
|
|
19
|
-
|
|
11
|
+
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; }
|
|
12
|
+
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; }
|
|
20
13
|
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; } } }; }
|
|
21
|
-
|
|
22
14
|
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); }
|
|
23
|
-
|
|
24
15
|
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; }
|
|
25
|
-
|
|
26
16
|
function geojsonToFlatGeojson(features) {
|
|
27
17
|
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {
|
|
28
18
|
coordLength: 2,
|
|
@@ -44,10 +34,8 @@ function flattenPoint(coordinates, data, indices, options) {
|
|
|
44
34
|
|
|
45
35
|
function flattenLineString(coordinates, data, indices, options) {
|
|
46
36
|
indices.push(data.length);
|
|
47
|
-
|
|
48
37
|
var _iterator = _createForOfIteratorHelper(coordinates),
|
|
49
|
-
|
|
50
|
-
|
|
38
|
+
_step;
|
|
51
39
|
try {
|
|
52
40
|
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
53
41
|
var c = _step.value;
|
|
@@ -68,10 +56,8 @@ function flattenPolygon(coordinates, data, indices, areas, options) {
|
|
|
68
56
|
var count = 0;
|
|
69
57
|
var ringAreas = [];
|
|
70
58
|
var polygons = [];
|
|
71
|
-
|
|
72
59
|
var _iterator2 = _createForOfIteratorHelper(coordinates),
|
|
73
|
-
|
|
74
|
-
|
|
60
|
+
_step2;
|
|
75
61
|
try {
|
|
76
62
|
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
|
|
77
63
|
var lineString = _step2.value;
|
|
@@ -85,7 +71,6 @@ function flattenPolygon(coordinates, data, indices, areas, options) {
|
|
|
85
71
|
lineString.reverse();
|
|
86
72
|
area = -area;
|
|
87
73
|
}
|
|
88
|
-
|
|
89
74
|
ringAreas.push(area);
|
|
90
75
|
flattenLineString(lineString, data, polygons, options);
|
|
91
76
|
count++;
|
|
@@ -95,7 +80,6 @@ function flattenPolygon(coordinates, data, indices, areas, options) {
|
|
|
95
80
|
} finally {
|
|
96
81
|
_iterator2.f();
|
|
97
82
|
}
|
|
98
|
-
|
|
99
83
|
if (count > 0) {
|
|
100
84
|
areas.push(ringAreas);
|
|
101
85
|
indices.push(polygons);
|
|
@@ -104,47 +88,39 @@ function flattenPolygon(coordinates, data, indices, areas, options) {
|
|
|
104
88
|
|
|
105
89
|
function flattenFeature(feature, options) {
|
|
106
90
|
var geometry = feature.geometry;
|
|
107
|
-
|
|
108
91
|
if (geometry.type === 'GeometryCollection') {
|
|
109
92
|
throw new Error('GeometryCollection type not supported');
|
|
110
93
|
}
|
|
111
|
-
|
|
112
94
|
var data = [];
|
|
113
95
|
var indices = [];
|
|
114
96
|
var areas;
|
|
115
97
|
var type;
|
|
116
|
-
|
|
117
98
|
switch (geometry.type) {
|
|
118
99
|
case 'Point':
|
|
119
100
|
type = 'Point';
|
|
120
101
|
flattenPoint(geometry.coordinates, data, indices, options);
|
|
121
102
|
break;
|
|
122
|
-
|
|
123
103
|
case 'MultiPoint':
|
|
124
104
|
type = 'Point';
|
|
125
105
|
geometry.coordinates.map(function (c) {
|
|
126
106
|
return flattenPoint(c, data, indices, options);
|
|
127
107
|
});
|
|
128
108
|
break;
|
|
129
|
-
|
|
130
109
|
case 'LineString':
|
|
131
110
|
type = 'LineString';
|
|
132
111
|
flattenLineString(geometry.coordinates, data, indices, options);
|
|
133
112
|
break;
|
|
134
|
-
|
|
135
113
|
case 'MultiLineString':
|
|
136
114
|
type = 'LineString';
|
|
137
115
|
geometry.coordinates.map(function (c) {
|
|
138
116
|
return flattenLineString(c, data, indices, options);
|
|
139
117
|
});
|
|
140
118
|
break;
|
|
141
|
-
|
|
142
119
|
case 'Polygon':
|
|
143
120
|
type = 'Polygon';
|
|
144
121
|
areas = [];
|
|
145
122
|
flattenPolygon(geometry.coordinates, data, indices, areas, options);
|
|
146
123
|
break;
|
|
147
|
-
|
|
148
124
|
case 'MultiPolygon':
|
|
149
125
|
type = 'Polygon';
|
|
150
126
|
areas = [];
|
|
@@ -152,11 +128,9 @@ function flattenFeature(feature, options) {
|
|
|
152
128
|
return flattenPolygon(c, data, indices, areas, options);
|
|
153
129
|
});
|
|
154
130
|
break;
|
|
155
|
-
|
|
156
131
|
default:
|
|
157
132
|
throw new Error("Unknown type: ".concat(type));
|
|
158
133
|
}
|
|
159
|
-
|
|
160
134
|
return _objectSpread(_objectSpread({}, feature), {}, {
|
|
161
135
|
geometry: {
|
|
162
136
|
type: type,
|