@loaders.gl/mvt 3.1.0-beta.7 → 3.1.0
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 +1 -1
- package/dist/es5/bundle.js.map +1 -1
- package/dist/es5/helpers/binary-util-functions.js +18 -18
- package/dist/es5/helpers/binary-util-functions.js.map +1 -1
- package/dist/es5/helpers/mapbox-util-functions.js +11 -11
- package/dist/es5/helpers/mapbox-util-functions.js.map +1 -1
- package/dist/es5/index.js +2 -2
- package/dist/es5/lib/binary-vector-tile/features-to-binary.js +180 -133
- package/dist/es5/lib/binary-vector-tile/features-to-binary.js.map +1 -1
- package/dist/es5/lib/binary-vector-tile/vector-tile-feature.js +131 -104
- package/dist/es5/lib/binary-vector-tile/vector-tile-feature.js.map +1 -1
- package/dist/es5/lib/binary-vector-tile/vector-tile-layer.js +23 -15
- package/dist/es5/lib/binary-vector-tile/vector-tile-layer.js.map +1 -1
- package/dist/es5/lib/binary-vector-tile/vector-tile.js +8 -8
- package/dist/es5/lib/binary-vector-tile/vector-tile.js.map +1 -1
- package/dist/es5/lib/mapbox-vector-tile/vector-tile-feature.js +157 -147
- package/dist/es5/lib/mapbox-vector-tile/vector-tile-feature.js.map +1 -1
- package/dist/es5/lib/mapbox-vector-tile/vector-tile-layer.js +23 -15
- package/dist/es5/lib/mapbox-vector-tile/vector-tile-layer.js.map +1 -1
- package/dist/es5/lib/mapbox-vector-tile/vector-tile.js +8 -8
- package/dist/es5/lib/mapbox-vector-tile/vector-tile.js.map +1 -1
- package/dist/es5/lib/parse-mvt.js +35 -33
- package/dist/es5/lib/parse-mvt.js.map +1 -1
- package/dist/es5/mvt-loader.js +38 -5
- package/dist/es5/mvt-loader.js.map +1 -1
- package/dist/esm/mvt-loader.js +1 -1
- package/dist/esm/mvt-loader.js.map +1 -1
- package/package.json +4 -4
|
@@ -1,64 +1,88 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
3
5
|
Object.defineProperty(exports, "__esModule", {
|
|
4
6
|
value: true
|
|
5
7
|
});
|
|
6
8
|
exports.featuresToBinary = featuresToBinary;
|
|
7
9
|
exports.TEST_EXPORTS = void 0;
|
|
8
10
|
|
|
11
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
12
|
+
|
|
9
13
|
var _polygon = require("@math.gl/polygon");
|
|
10
14
|
|
|
15
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
|
|
16
|
+
|
|
17
|
+
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; }
|
|
18
|
+
|
|
19
|
+
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; } } }; }
|
|
20
|
+
|
|
21
|
+
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); }
|
|
22
|
+
|
|
23
|
+
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; }
|
|
24
|
+
|
|
11
25
|
function featuresToBinary(features, firstPassData, options) {
|
|
12
|
-
|
|
13
|
-
|
|
26
|
+
var propArrayTypes = extractNumericPropTypes(features);
|
|
27
|
+
var numericPropKeys = Object.keys(propArrayTypes).filter(function (k) {
|
|
28
|
+
return propArrayTypes[k] !== Array;
|
|
29
|
+
});
|
|
14
30
|
return fillArrays(features, firstPassData, {
|
|
15
31
|
numericPropKeys: options ? options.numericPropKeys : numericPropKeys,
|
|
16
|
-
propArrayTypes,
|
|
32
|
+
propArrayTypes: propArrayTypes,
|
|
17
33
|
PositionDataType: options ? options.PositionDataType : Float32Array
|
|
18
34
|
});
|
|
19
35
|
}
|
|
20
36
|
|
|
21
|
-
|
|
22
|
-
fillArrays
|
|
37
|
+
var TEST_EXPORTS = {
|
|
38
|
+
fillArrays: fillArrays
|
|
23
39
|
};
|
|
24
40
|
exports.TEST_EXPORTS = TEST_EXPORTS;
|
|
25
41
|
|
|
26
42
|
function extractNumericPropTypes(features) {
|
|
27
|
-
|
|
43
|
+
var propArrayTypes = {};
|
|
28
44
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
45
|
+
var _iterator = _createForOfIteratorHelper(features),
|
|
46
|
+
_step;
|
|
47
|
+
|
|
48
|
+
try {
|
|
49
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
50
|
+
var feature = _step.value;
|
|
51
|
+
|
|
52
|
+
if (feature.properties) {
|
|
53
|
+
for (var _key in feature.properties) {
|
|
54
|
+
var val = feature.properties[_key];
|
|
55
|
+
propArrayTypes[_key] = deduceArrayType(val, propArrayTypes[_key]);
|
|
56
|
+
}
|
|
34
57
|
}
|
|
35
58
|
}
|
|
59
|
+
} catch (err) {
|
|
60
|
+
_iterator.e(err);
|
|
61
|
+
} finally {
|
|
62
|
+
_iterator.f();
|
|
36
63
|
}
|
|
37
64
|
|
|
38
65
|
return propArrayTypes;
|
|
39
66
|
}
|
|
40
67
|
|
|
41
68
|
function fillArrays(features, firstPassData, options) {
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
const coordLength = 2;
|
|
60
|
-
const GlobalFeatureIdsDataType = features.length > 65535 ? Uint32Array : Uint16Array;
|
|
61
|
-
const points = {
|
|
69
|
+
var pointPositionsCount = firstPassData.pointPositionsCount,
|
|
70
|
+
pointFeaturesCount = firstPassData.pointFeaturesCount,
|
|
71
|
+
linePositionsCount = firstPassData.linePositionsCount,
|
|
72
|
+
linePathsCount = firstPassData.linePathsCount,
|
|
73
|
+
lineFeaturesCount = firstPassData.lineFeaturesCount,
|
|
74
|
+
polygonPositionsCount = firstPassData.polygonPositionsCount,
|
|
75
|
+
polygonObjectsCount = firstPassData.polygonObjectsCount,
|
|
76
|
+
polygonRingsCount = firstPassData.polygonRingsCount,
|
|
77
|
+
polygonFeaturesCount = firstPassData.polygonFeaturesCount;
|
|
78
|
+
var numericPropKeys = options.numericPropKeys,
|
|
79
|
+
propArrayTypes = options.propArrayTypes,
|
|
80
|
+
_options$PositionData = options.PositionDataType,
|
|
81
|
+
PositionDataType = _options$PositionData === void 0 ? Float32Array : _options$PositionData;
|
|
82
|
+
var hasGlobalId = features[0] && 'id' in features[0];
|
|
83
|
+
var coordLength = 2;
|
|
84
|
+
var GlobalFeatureIdsDataType = features.length > 65535 ? Uint32Array : Uint16Array;
|
|
85
|
+
var points = {
|
|
62
86
|
positions: new PositionDataType(pointPositionsCount * coordLength),
|
|
63
87
|
globalFeatureIds: new GlobalFeatureIdsDataType(pointPositionsCount),
|
|
64
88
|
featureIds: pointFeaturesCount > 65535 ? new Uint32Array(pointPositionsCount) : new Uint16Array(pointPositionsCount),
|
|
@@ -66,7 +90,7 @@ function fillArrays(features, firstPassData, options) {
|
|
|
66
90
|
properties: [],
|
|
67
91
|
fields: []
|
|
68
92
|
};
|
|
69
|
-
|
|
93
|
+
var lines = {
|
|
70
94
|
pathIndices: linePositionsCount > 65535 ? new Uint32Array(linePathsCount + 1) : new Uint16Array(linePathsCount + 1),
|
|
71
95
|
positions: new PositionDataType(linePositionsCount * coordLength),
|
|
72
96
|
globalFeatureIds: new GlobalFeatureIdsDataType(linePositionsCount),
|
|
@@ -75,7 +99,7 @@ function fillArrays(features, firstPassData, options) {
|
|
|
75
99
|
properties: [],
|
|
76
100
|
fields: []
|
|
77
101
|
};
|
|
78
|
-
|
|
102
|
+
var polygons = {
|
|
79
103
|
polygonIndices: polygonPositionsCount > 65535 ? new Uint32Array(polygonObjectsCount + 1) : new Uint16Array(polygonObjectsCount + 1),
|
|
80
104
|
primitivePolygonIndices: polygonPositionsCount > 65535 ? new Uint32Array(polygonRingsCount + 1) : new Uint16Array(polygonRingsCount + 1),
|
|
81
105
|
positions: new PositionDataType(polygonPositionsCount * coordLength),
|
|
@@ -87,17 +111,29 @@ function fillArrays(features, firstPassData, options) {
|
|
|
87
111
|
fields: []
|
|
88
112
|
};
|
|
89
113
|
|
|
90
|
-
for (
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
114
|
+
for (var _i = 0, _arr = [points, lines, polygons]; _i < _arr.length; _i++) {
|
|
115
|
+
var object = _arr[_i];
|
|
116
|
+
|
|
117
|
+
var _iterator2 = _createForOfIteratorHelper(numericPropKeys),
|
|
118
|
+
_step2;
|
|
119
|
+
|
|
120
|
+
try {
|
|
121
|
+
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
|
|
122
|
+
var propName = _step2.value;
|
|
123
|
+
var TypedArray = propArrayTypes[propName];
|
|
124
|
+
object.numericProps[propName] = new TypedArray(object.positions.length / coordLength);
|
|
125
|
+
}
|
|
126
|
+
} catch (err) {
|
|
127
|
+
_iterator2.e(err);
|
|
128
|
+
} finally {
|
|
129
|
+
_iterator2.f();
|
|
94
130
|
}
|
|
95
131
|
}
|
|
96
132
|
|
|
97
133
|
lines.pathIndices[linePathsCount] = linePositionsCount;
|
|
98
134
|
polygons.polygonIndices[polygonObjectsCount] = polygonPositionsCount;
|
|
99
135
|
polygons.primitivePolygonIndices[polygonRingsCount] = polygonPositionsCount;
|
|
100
|
-
|
|
136
|
+
var indexMap = {
|
|
101
137
|
pointPosition: 0,
|
|
102
138
|
pointFeature: 0,
|
|
103
139
|
linePosition: 0,
|
|
@@ -110,58 +146,68 @@ function fillArrays(features, firstPassData, options) {
|
|
|
110
146
|
feature: 0
|
|
111
147
|
};
|
|
112
148
|
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
149
|
+
var _iterator3 = _createForOfIteratorHelper(features),
|
|
150
|
+
_step3;
|
|
151
|
+
|
|
152
|
+
try {
|
|
153
|
+
for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
|
|
154
|
+
var feature = _step3.value;
|
|
155
|
+
var geometry = feature.geometry;
|
|
156
|
+
var properties = feature.properties || {};
|
|
157
|
+
|
|
158
|
+
switch (geometry.type) {
|
|
159
|
+
case 'Point':
|
|
160
|
+
case 'MultiPoint':
|
|
161
|
+
handlePoint(geometry, points, indexMap, coordLength, properties);
|
|
162
|
+
points.properties.push(keepStringProperties(properties, numericPropKeys));
|
|
163
|
+
|
|
164
|
+
if (hasGlobalId) {
|
|
165
|
+
points.fields.push({
|
|
166
|
+
id: feature.id
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
indexMap.pointFeature++;
|
|
171
|
+
break;
|
|
172
|
+
|
|
173
|
+
case 'LineString':
|
|
174
|
+
case 'MultiLineString':
|
|
175
|
+
handleLineString(geometry, lines, indexMap, coordLength, properties);
|
|
176
|
+
lines.properties.push(keepStringProperties(properties, numericPropKeys));
|
|
177
|
+
|
|
178
|
+
if (hasGlobalId) {
|
|
179
|
+
lines.fields.push({
|
|
180
|
+
id: feature.id
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
indexMap.lineFeature++;
|
|
185
|
+
break;
|
|
186
|
+
|
|
187
|
+
case 'Polygon':
|
|
188
|
+
case 'MultiPolygon':
|
|
189
|
+
handlePolygon(geometry, polygons, indexMap, coordLength, properties);
|
|
190
|
+
polygons.properties.push(keepStringProperties(properties, numericPropKeys));
|
|
191
|
+
|
|
192
|
+
if (hasGlobalId) {
|
|
193
|
+
polygons.fields.push({
|
|
194
|
+
id: feature.id
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
indexMap.polygonFeature++;
|
|
199
|
+
break;
|
|
200
|
+
|
|
201
|
+
default:
|
|
202
|
+
throw new Error('Invalid geometry type');
|
|
203
|
+
}
|
|
159
204
|
|
|
160
|
-
|
|
161
|
-
throw new Error('Invalid geometry type');
|
|
205
|
+
indexMap.feature++;
|
|
162
206
|
}
|
|
163
|
-
|
|
164
|
-
|
|
207
|
+
} catch (err) {
|
|
208
|
+
_iterator3.e(err);
|
|
209
|
+
} finally {
|
|
210
|
+
_iterator3.f();
|
|
165
211
|
}
|
|
166
212
|
|
|
167
213
|
return makeAccessorObjects(points, lines, polygons, coordLength);
|
|
@@ -169,7 +215,7 @@ function fillArrays(features, firstPassData, options) {
|
|
|
169
215
|
|
|
170
216
|
function handlePoint(geometry, points, indexMap, coordLength, properties) {
|
|
171
217
|
points.positions.set(geometry.data, indexMap.pointPosition * coordLength);
|
|
172
|
-
|
|
218
|
+
var nPositions = geometry.data.length / coordLength;
|
|
173
219
|
fillNumericProperties(points, properties, indexMap.pointPosition, nPositions);
|
|
174
220
|
points.globalFeatureIds.fill(indexMap.feature, indexMap.pointPosition, indexMap.pointPosition + nPositions);
|
|
175
221
|
points.featureIds.fill(indexMap.pointFeature, indexMap.pointPosition, indexMap.pointPosition + nPositions);
|
|
@@ -178,14 +224,14 @@ function handlePoint(geometry, points, indexMap, coordLength, properties) {
|
|
|
178
224
|
|
|
179
225
|
function handleLineString(geometry, lines, indexMap, coordLength, properties) {
|
|
180
226
|
lines.positions.set(geometry.data, indexMap.linePosition * coordLength);
|
|
181
|
-
|
|
227
|
+
var nPositions = geometry.data.length / coordLength;
|
|
182
228
|
fillNumericProperties(lines, properties, indexMap.linePosition, nPositions);
|
|
183
229
|
lines.globalFeatureIds.fill(indexMap.feature, indexMap.linePosition, indexMap.linePosition + nPositions);
|
|
184
230
|
lines.featureIds.fill(indexMap.lineFeature, indexMap.linePosition, indexMap.linePosition + nPositions);
|
|
185
231
|
|
|
186
|
-
for (
|
|
187
|
-
|
|
188
|
-
|
|
232
|
+
for (var i = 0, il = geometry.lines.length; i < il; ++i) {
|
|
233
|
+
var start = geometry.lines[i];
|
|
234
|
+
var end = i === il - 1 ? geometry.data.length : geometry.lines[i + 1];
|
|
189
235
|
lines.pathIndices[indexMap.linePath++] = indexMap.linePosition;
|
|
190
236
|
indexMap.linePosition += (end - start) / coordLength;
|
|
191
237
|
}
|
|
@@ -193,54 +239,55 @@ function handleLineString(geometry, lines, indexMap, coordLength, properties) {
|
|
|
193
239
|
|
|
194
240
|
function handlePolygon(geometry, polygons, indexMap, coordLength, properties) {
|
|
195
241
|
polygons.positions.set(geometry.data, indexMap.polygonPosition * coordLength);
|
|
196
|
-
|
|
242
|
+
var nPositions = geometry.data.length / coordLength;
|
|
197
243
|
fillNumericProperties(polygons, properties, indexMap.polygonPosition, nPositions);
|
|
198
244
|
polygons.globalFeatureIds.fill(indexMap.feature, indexMap.polygonPosition, indexMap.polygonPosition + nPositions);
|
|
199
245
|
polygons.featureIds.fill(indexMap.polygonFeature, indexMap.polygonPosition, indexMap.polygonPosition + nPositions);
|
|
200
246
|
|
|
201
|
-
for (
|
|
202
|
-
|
|
247
|
+
for (var l = 0, ll = geometry.lines.length; l < ll; ++l) {
|
|
248
|
+
var startPosition = indexMap.polygonPosition;
|
|
203
249
|
polygons.polygonIndices[indexMap.polygonObject++] = startPosition;
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
250
|
+
var areas = geometry.areas[l];
|
|
251
|
+
var lines = geometry.lines[l];
|
|
252
|
+
var nextLines = geometry.lines[l + 1];
|
|
207
253
|
|
|
208
|
-
for (
|
|
209
|
-
|
|
210
|
-
|
|
254
|
+
for (var i = 0, il = lines.length; i < il; ++i) {
|
|
255
|
+
var start = lines[i];
|
|
256
|
+
var end = i === il - 1 ? nextLines === undefined ? geometry.data.length : nextLines[0] : lines[i + 1];
|
|
211
257
|
polygons.primitivePolygonIndices[indexMap.polygonRing++] = indexMap.polygonPosition;
|
|
212
258
|
indexMap.polygonPosition += (end - start) / coordLength;
|
|
213
259
|
}
|
|
214
260
|
|
|
215
|
-
|
|
261
|
+
var endPosition = indexMap.polygonPosition;
|
|
216
262
|
triangulatePolygon(polygons, areas, lines, {
|
|
217
|
-
startPosition,
|
|
218
|
-
endPosition,
|
|
219
|
-
coordLength
|
|
263
|
+
startPosition: startPosition,
|
|
264
|
+
endPosition: endPosition,
|
|
265
|
+
coordLength: coordLength
|
|
220
266
|
});
|
|
221
267
|
}
|
|
222
268
|
}
|
|
223
269
|
|
|
224
|
-
function triangulatePolygon(polygons, areas, lines, {
|
|
225
|
-
startPosition,
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
270
|
+
function triangulatePolygon(polygons, areas, lines, _ref) {
|
|
271
|
+
var startPosition = _ref.startPosition,
|
|
272
|
+
endPosition = _ref.endPosition,
|
|
273
|
+
coordLength = _ref.coordLength;
|
|
274
|
+
var start = startPosition * coordLength;
|
|
275
|
+
var end = endPosition * coordLength;
|
|
276
|
+
var polygonPositions = polygons.positions.subarray(start, end);
|
|
277
|
+
var offset = lines[0];
|
|
278
|
+
var holes = lines.slice(1).map(function (n) {
|
|
279
|
+
return (n - offset) / coordLength;
|
|
280
|
+
});
|
|
281
|
+
var indices = (0, _polygon.earcut)(polygonPositions, holes, coordLength, areas);
|
|
282
|
+
|
|
283
|
+
for (var t = 0, tl = indices.length; t < tl; ++t) {
|
|
237
284
|
polygons.triangles.push(startPosition + indices[t]);
|
|
238
285
|
}
|
|
239
286
|
}
|
|
240
287
|
|
|
241
288
|
function makeAccessorObjects(points, lines, polygons, coordLength) {
|
|
242
|
-
|
|
243
|
-
points: {
|
|
289
|
+
var returnObj = {
|
|
290
|
+
points: _objectSpread(_objectSpread({}, points), {}, {
|
|
244
291
|
positions: {
|
|
245
292
|
value: points.positions,
|
|
246
293
|
size: coordLength
|
|
@@ -253,8 +300,8 @@ function makeAccessorObjects(points, lines, polygons, coordLength) {
|
|
|
253
300
|
value: points.featureIds,
|
|
254
301
|
size: 1
|
|
255
302
|
}
|
|
256
|
-
},
|
|
257
|
-
lines: {
|
|
303
|
+
}),
|
|
304
|
+
lines: _objectSpread(_objectSpread({}, lines), {}, {
|
|
258
305
|
pathIndices: {
|
|
259
306
|
value: lines.pathIndices,
|
|
260
307
|
size: 1
|
|
@@ -271,8 +318,8 @@ function makeAccessorObjects(points, lines, polygons, coordLength) {
|
|
|
271
318
|
value: lines.featureIds,
|
|
272
319
|
size: 1
|
|
273
320
|
}
|
|
274
|
-
},
|
|
275
|
-
polygons: {
|
|
321
|
+
}),
|
|
322
|
+
polygons: _objectSpread(_objectSpread({}, polygons), {}, {
|
|
276
323
|
polygonIndices: {
|
|
277
324
|
value: polygons.polygonIndices,
|
|
278
325
|
size: 1
|
|
@@ -297,11 +344,11 @@ function makeAccessorObjects(points, lines, polygons, coordLength) {
|
|
|
297
344
|
value: polygons.featureIds,
|
|
298
345
|
size: 1
|
|
299
346
|
}
|
|
300
|
-
}
|
|
347
|
+
})
|
|
301
348
|
};
|
|
302
349
|
|
|
303
|
-
for (
|
|
304
|
-
for (
|
|
350
|
+
for (var geomType in returnObj) {
|
|
351
|
+
for (var numericProp in returnObj[geomType].numericProps) {
|
|
305
352
|
returnObj[geomType].numericProps[numericProp] = {
|
|
306
353
|
value: returnObj[geomType].numericProps[numericProp],
|
|
307
354
|
size: 1
|
|
@@ -313,7 +360,7 @@ function makeAccessorObjects(points, lines, polygons, coordLength) {
|
|
|
313
360
|
}
|
|
314
361
|
|
|
315
362
|
function fillNumericProperties(object, properties, index, length) {
|
|
316
|
-
for (
|
|
363
|
+
for (var numericPropName in object.numericProps) {
|
|
317
364
|
if (numericPropName in properties) {
|
|
318
365
|
object.numericProps[numericPropName].fill(properties[numericPropName], index, index + length);
|
|
319
366
|
}
|
|
@@ -321,11 +368,11 @@ function fillNumericProperties(object, properties, index, length) {
|
|
|
321
368
|
}
|
|
322
369
|
|
|
323
370
|
function keepStringProperties(properties, numericKeys) {
|
|
324
|
-
|
|
371
|
+
var props = {};
|
|
325
372
|
|
|
326
|
-
for (
|
|
327
|
-
if (!numericKeys.includes(
|
|
328
|
-
props[
|
|
373
|
+
for (var _key2 in properties) {
|
|
374
|
+
if (!numericKeys.includes(_key2)) {
|
|
375
|
+
props[_key2] = properties[_key2];
|
|
329
376
|
}
|
|
330
377
|
}
|
|
331
378
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/lib/binary-vector-tile/features-to-binary.ts"],"names":["featuresToBinary","features","firstPassData","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","hasGlobalId","coordLength","GlobalFeatureIdsDataType","length","Uint32Array","Uint16Array","points","positions","globalFeatureIds","featureIds","numericProps","fields","lines","pathIndices","polygons","polygonIndices","primitivePolygonIndices","triangles","object","propName","TypedArray","indexMap","pointPosition","pointFeature","linePosition","linePath","lineFeature","polygonPosition","polygonObject","polygonRing","polygonFeature","geometry","type","handlePoint","push","keepStringProperties","id","handleLineString","handlePolygon","Error","makeAccessorObjects","set","data","nPositions","fillNumericProperties","fill","i","il","start","end","l","ll","startPosition","areas","nextLines","undefined","endPosition","triangulatePolygon","polygonPositions","subarray","offset","holes","slice","map","n","indices","t","tl","returnObj","value","size","geomType","numericProp","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 {\n MvtBinaryCoordinates,\n MvtBinaryGeometry,\n MvtBinaryOptions,\n MvtPropArrayConstructor,\n MvtFirstPassedData,\n MvtLines,\n MvtPoints,\n MvtPolygons\n} from '../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 firstPassData\n * @param options\n * @returns filled arrays\n */\nexport function featuresToBinary(\n features: MvtBinaryCoordinates[],\n firstPassData: MvtFirstPassedData,\n options?: MvtBinaryOptions\n) {\n const propArrayTypes = extractNumericPropTypes(features);\n const numericPropKeys = Object.keys(propArrayTypes).filter((k) => propArrayTypes[k] !== Array);\n return fillArrays(features, firstPassData, {\n numericPropKeys: options ? options.numericPropKeys : numericPropKeys,\n propArrayTypes,\n PositionDataType: options ? options.PositionDataType : Float32Array\n });\n}\n\nexport const TEST_EXPORTS = {\n fillArrays\n};\n\n/**\n * Extracts properties that are always numeric\n *\n * @param features\n * @returns object with numeric types\n */\nfunction extractNumericPropTypes(features: MvtBinaryCoordinates[]): {\n [key: string]: MvtPropArrayConstructor;\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 firstPassData\n * @param options\n * @returns an accessor object with value and size keys\n */\n// eslint-disable-next-line complexity\nfunction fillArrays(\n features: MvtBinaryCoordinates[],\n firstPassData: MvtFirstPassedData,\n options: MvtBinaryOptions\n) {\n const {\n pointPositionsCount,\n pointFeaturesCount,\n linePositionsCount,\n linePathsCount,\n lineFeaturesCount,\n polygonPositionsCount,\n polygonObjectsCount,\n polygonRingsCount,\n polygonFeaturesCount\n } = firstPassData;\n const {numericPropKeys, propArrayTypes, PositionDataType = Float32Array} = options;\n const hasGlobalId = features[0] && 'id' in features[0];\n const coordLength = 2;\n const GlobalFeatureIdsDataType = features.length > 65535 ? Uint32Array : Uint16Array;\n const points: MvtPoints = {\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: MvtLines = {\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: MvtPolygons = {\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 TypedArray = propArrayTypes[propName];\n object.numericProps[propName] = new TypedArray(object.positions.length / coordLength);\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 case 'MultiPoint':\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 case 'MultiLineString':\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 case 'MultiPolygon':\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: MvtBinaryGeometry,\n points: MvtPoints,\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: MvtBinaryGeometry,\n lines: MvtLines,\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.lines.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.lines[i];\n const end =\n i === il - 1\n ? geometry.data.length // last line, so read to end of data\n : geometry.lines[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: MvtBinaryGeometry,\n polygons: MvtPolygons,\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.lines is a 2D array\n for (let l = 0, ll = geometry.lines.length; l < ll; ++l) {\n const startPosition = indexMap.polygonPosition;\n polygons.polygonIndices[indexMap.polygonObject++] = startPosition;\n\n const areas = geometry.areas![l];\n const lines = geometry.lines[l];\n const nextLines = geometry.lines[l + 1];\n\n for (let i = 0, il = lines.length; i < il; ++i) {\n const start = lines[i];\n const end =\n i === il - 1\n ? // last line, so either read to:\n nextLines === undefined\n ? geometry.data.length // end of data (no next lines)\n : nextLines[0] // start of first line in nextLines\n : lines[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, lines, {startPosition, endPosition, coordLength});\n }\n}\n\n/**\n * Triangulate polygon using earcut\n *\n * @param polygons\n * @param areas\n * @param lines\n * @param param3\n */\nfunction triangulatePolygon(\n polygons: MvtPolygons,\n areas: number,\n lines: 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 = lines[0];\n const holes = lines.slice(1).map((n: number) => (n - offset) / coordLength);\n\n // Compute triangulation\n const indices = 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 = indices.length; t < tl; ++t) {\n polygons.triangles.push(startPosition + indices[t]);\n }\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: MvtPoints,\n lines: MvtLines,\n polygons: MvtPolygons,\n coordLength: number\n) {\n const returnObj = {\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 },\n lines: {\n ...lines,\n pathIndices: {value: lines.pathIndices, size: 1},\n positions: {value: lines.positions, size: coordLength},\n globalFeatureIds: {value: lines.globalFeatureIds, size: 1},\n featureIds: {value: lines.featureIds, size: 1}\n },\n polygons: {\n ...polygons,\n polygonIndices: {value: polygons.polygonIndices, size: 1},\n primitivePolygonIndices: {value: polygons.primitivePolygonIndices, size: 1},\n positions: {value: polygons.positions, size: coordLength},\n triangles: {value: new Uint32Array(polygons.triangles), size: 1},\n globalFeatureIds: {value: polygons.globalFeatureIds, size: 1},\n featureIds: {value: polygons.featureIds, size: 1}\n }\n };\n\n for (const geomType in returnObj) {\n for (const numericProp in returnObj[geomType].numericProps) {\n returnObj[geomType].numericProps[numericProp] = {\n value: returnObj[geomType].numericProps[numericProp],\n size: 1\n };\n }\n }\n return returnObj;\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: MvtPoints,\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 object.numericProps[numericPropName].fill(properties[numericPropName], 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\nfunction deduceArrayType(x: any, constructor: MvtPropArrayConstructor): MvtPropArrayConstructor {\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":"features-to-binary.js"}
|
|
1
|
+
{"version":3,"sources":["../../../../src/lib/binary-vector-tile/features-to-binary.ts"],"names":["featuresToBinary","features","firstPassData","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","hasGlobalId","coordLength","GlobalFeatureIdsDataType","length","Uint32Array","Uint16Array","points","positions","globalFeatureIds","featureIds","numericProps","fields","lines","pathIndices","polygons","polygonIndices","primitivePolygonIndices","triangles","object","propName","TypedArray","indexMap","pointPosition","pointFeature","linePosition","linePath","lineFeature","polygonPosition","polygonObject","polygonRing","polygonFeature","geometry","type","handlePoint","push","keepStringProperties","id","handleLineString","handlePolygon","Error","makeAccessorObjects","set","data","nPositions","fillNumericProperties","fill","i","il","start","end","l","ll","startPosition","areas","nextLines","undefined","endPosition","triangulatePolygon","polygonPositions","subarray","offset","holes","slice","map","n","indices","t","tl","returnObj","value","size","geomType","numericProp","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 {\n MvtBinaryCoordinates,\n MvtBinaryGeometry,\n MvtBinaryOptions,\n MvtPropArrayConstructor,\n MvtFirstPassedData,\n MvtLines,\n MvtPoints,\n MvtPolygons\n} from '../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 firstPassData\n * @param options\n * @returns filled arrays\n */\nexport function featuresToBinary(\n features: MvtBinaryCoordinates[],\n firstPassData: MvtFirstPassedData,\n options?: MvtBinaryOptions\n) {\n const propArrayTypes = extractNumericPropTypes(features);\n const numericPropKeys = Object.keys(propArrayTypes).filter((k) => propArrayTypes[k] !== Array);\n return fillArrays(features, firstPassData, {\n numericPropKeys: options ? options.numericPropKeys : numericPropKeys,\n propArrayTypes,\n PositionDataType: options ? options.PositionDataType : Float32Array\n });\n}\n\nexport const TEST_EXPORTS = {\n fillArrays\n};\n\n/**\n * Extracts properties that are always numeric\n *\n * @param features\n * @returns object with numeric types\n */\nfunction extractNumericPropTypes(features: MvtBinaryCoordinates[]): {\n [key: string]: MvtPropArrayConstructor;\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 firstPassData\n * @param options\n * @returns an accessor object with value and size keys\n */\n// eslint-disable-next-line complexity\nfunction fillArrays(\n features: MvtBinaryCoordinates[],\n firstPassData: MvtFirstPassedData,\n options: MvtBinaryOptions\n) {\n const {\n pointPositionsCount,\n pointFeaturesCount,\n linePositionsCount,\n linePathsCount,\n lineFeaturesCount,\n polygonPositionsCount,\n polygonObjectsCount,\n polygonRingsCount,\n polygonFeaturesCount\n } = firstPassData;\n const {numericPropKeys, propArrayTypes, PositionDataType = Float32Array} = options;\n const hasGlobalId = features[0] && 'id' in features[0];\n const coordLength = 2;\n const GlobalFeatureIdsDataType = features.length > 65535 ? Uint32Array : Uint16Array;\n const points: MvtPoints = {\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: MvtLines = {\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: MvtPolygons = {\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 TypedArray = propArrayTypes[propName];\n object.numericProps[propName] = new TypedArray(object.positions.length / coordLength);\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 case 'MultiPoint':\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 case 'MultiLineString':\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 case 'MultiPolygon':\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: MvtBinaryGeometry,\n points: MvtPoints,\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: MvtBinaryGeometry,\n lines: MvtLines,\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.lines.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.lines[i];\n const end =\n i === il - 1\n ? geometry.data.length // last line, so read to end of data\n : geometry.lines[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: MvtBinaryGeometry,\n polygons: MvtPolygons,\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.lines is a 2D array\n for (let l = 0, ll = geometry.lines.length; l < ll; ++l) {\n const startPosition = indexMap.polygonPosition;\n polygons.polygonIndices[indexMap.polygonObject++] = startPosition;\n\n const areas = geometry.areas![l];\n const lines = geometry.lines[l];\n const nextLines = geometry.lines[l + 1];\n\n for (let i = 0, il = lines.length; i < il; ++i) {\n const start = lines[i];\n const end =\n i === il - 1\n ? // last line, so either read to:\n nextLines === undefined\n ? geometry.data.length // end of data (no next lines)\n : nextLines[0] // start of first line in nextLines\n : lines[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, lines, {startPosition, endPosition, coordLength});\n }\n}\n\n/**\n * Triangulate polygon using earcut\n *\n * @param polygons\n * @param areas\n * @param lines\n * @param param3\n */\nfunction triangulatePolygon(\n polygons: MvtPolygons,\n areas: number,\n lines: 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 = lines[0];\n const holes = lines.slice(1).map((n: number) => (n - offset) / coordLength);\n\n // Compute triangulation\n const indices = 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 = indices.length; t < tl; ++t) {\n polygons.triangles.push(startPosition + indices[t]);\n }\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: MvtPoints,\n lines: MvtLines,\n polygons: MvtPolygons,\n coordLength: number\n) {\n const returnObj = {\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 },\n lines: {\n ...lines,\n pathIndices: {value: lines.pathIndices, size: 1},\n positions: {value: lines.positions, size: coordLength},\n globalFeatureIds: {value: lines.globalFeatureIds, size: 1},\n featureIds: {value: lines.featureIds, size: 1}\n },\n polygons: {\n ...polygons,\n polygonIndices: {value: polygons.polygonIndices, size: 1},\n primitivePolygonIndices: {value: polygons.primitivePolygonIndices, size: 1},\n positions: {value: polygons.positions, size: coordLength},\n triangles: {value: new Uint32Array(polygons.triangles), size: 1},\n globalFeatureIds: {value: polygons.globalFeatureIds, size: 1},\n featureIds: {value: polygons.featureIds, size: 1}\n }\n };\n\n for (const geomType in returnObj) {\n for (const numericProp in returnObj[geomType].numericProps) {\n returnObj[geomType].numericProps[numericProp] = {\n value: returnObj[geomType].numericProps[numericProp],\n size: 1\n };\n }\n }\n return returnObj;\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: MvtPoints,\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 object.numericProps[numericPropName].fill(properties[numericPropName], 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\nfunction deduceArrayType(x: any, constructor: MvtPropArrayConstructor): MvtPropArrayConstructor {\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":"features-to-binary.js"}
|