@loaders.gl/mvt 3.0.13 → 3.0.14
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/dist.es5.min.js +1 -1
- package/dist/dist.es5.min.js.map +1 -1
- package/dist/dist.min.js +1 -1
- package/dist/dist.min.js.map +1 -1
- package/dist/es5/bundle.js +2 -2
- package/dist/es5/bundle.js.map +1 -1
- package/dist/es5/index.js +2 -2
- package/dist/es5/lib/binary-vector-tile/features-to-binary.js +182 -132
- 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 +160 -133
- 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 +7 -7
- package/dist/es5/lib/binary-vector-tile/vector-tile.js.map +1 -1
- package/dist/es5/lib/mapbox-vector-tile/vector-tile-feature.js +169 -157
- 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 +7 -7
- package/dist/es5/lib/mapbox-vector-tile/vector-tile.js.map +1 -1
- package/dist/es5/lib/parse-mvt.js +39 -35
- 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/mvt-worker.js +1 -1
- package/dist/mvt-worker.js.map +1 -1
- package/package.json +4 -4
package/dist/es5/bundle.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
var moduleExports = require('./index');
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
var _global = typeof window === 'undefined' ? global : window;
|
|
6
6
|
|
|
7
7
|
_global.loaders = _global.loaders || {};
|
|
8
8
|
module.exports = Object.assign(_global.loaders, moduleExports);
|
package/dist/es5/bundle.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/bundle.ts"],"names":["moduleExports","require","_global","window","global","loaders","module","exports","Object","assign"],"mappings":";;AACA,
|
|
1
|
+
{"version":3,"sources":["../../src/bundle.ts"],"names":["moduleExports","require","_global","window","global","loaders","module","exports","Object","assign"],"mappings":";;AACA,IAAMA,aAAa,GAAGC,OAAO,CAAC,SAAD,CAA7B;;AACA,IAAMC,OAAO,GAAG,OAAOC,MAAP,KAAkB,WAAlB,GAAgCC,MAAhC,GAAyCD,MAAzD;;AACAD,OAAO,CAACG,OAAR,GAAkBH,OAAO,CAACG,OAAR,IAAmB,EAArC;AACAC,MAAM,CAACC,OAAP,GAAiBC,MAAM,CAACC,MAAP,CAAcP,OAAO,CAACG,OAAtB,EAA+BL,aAA/B,CAAjB","sourcesContent":["// @ts-nocheck\nconst moduleExports = require('./index');\nconst _global = typeof window === 'undefined' ? global : window;\n_global.loaders = _global.loaders || {};\nmodule.exports = Object.assign(_global.loaders, moduleExports);\n"],"file":"bundle.js"}
|
package/dist/es5/index.js
CHANGED
|
@@ -5,13 +5,13 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
Object.defineProperty(exports, "MVTLoader", {
|
|
7
7
|
enumerable: true,
|
|
8
|
-
get: function () {
|
|
8
|
+
get: function get() {
|
|
9
9
|
return _mvtLoader.MVTLoader;
|
|
10
10
|
}
|
|
11
11
|
});
|
|
12
12
|
Object.defineProperty(exports, "MVTWorkerLoader", {
|
|
13
13
|
enumerable: true,
|
|
14
|
-
get: function () {
|
|
14
|
+
get: function get() {
|
|
15
15
|
return _mvtLoader.MVTWorkerLoader;
|
|
16
16
|
}
|
|
17
17
|
});
|
|
@@ -1,65 +1,92 @@
|
|
|
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
|
|
|
11
|
-
function
|
|
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
|
+
|
|
25
|
+
function featuresToBinary(features, firstPassData) {
|
|
26
|
+
var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
|
|
12
27
|
return fillArrays(features, firstPassData, {
|
|
13
28
|
numericPropKeys: options.numericPropKeys || extractNumericPropKeys(features),
|
|
14
29
|
PositionDataType: options.PositionDataType || Float32Array
|
|
15
30
|
});
|
|
16
31
|
}
|
|
17
32
|
|
|
18
|
-
|
|
19
|
-
extractNumericPropKeys,
|
|
20
|
-
fillArrays
|
|
33
|
+
var TEST_EXPORTS = {
|
|
34
|
+
extractNumericPropKeys: extractNumericPropKeys,
|
|
35
|
+
fillArrays: fillArrays
|
|
21
36
|
};
|
|
22
37
|
exports.TEST_EXPORTS = TEST_EXPORTS;
|
|
23
38
|
|
|
24
39
|
function extractNumericPropKeys(features) {
|
|
25
|
-
|
|
40
|
+
var numericPropKeys = {};
|
|
41
|
+
|
|
42
|
+
var _iterator = _createForOfIteratorHelper(features),
|
|
43
|
+
_step;
|
|
26
44
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
const numericSoFar = numericPropKeys[key];
|
|
45
|
+
try {
|
|
46
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
47
|
+
var feature = _step.value;
|
|
31
48
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
numericPropKeys[key]
|
|
49
|
+
if (feature.properties) {
|
|
50
|
+
for (var key in feature.properties) {
|
|
51
|
+
var numericSoFar = numericPropKeys[key];
|
|
52
|
+
|
|
53
|
+
if (numericSoFar || numericSoFar === undefined) {
|
|
54
|
+
var val = feature.properties[key];
|
|
55
|
+
numericPropKeys[key] = isNumeric(val);
|
|
56
|
+
}
|
|
35
57
|
}
|
|
36
58
|
}
|
|
37
59
|
}
|
|
60
|
+
} catch (err) {
|
|
61
|
+
_iterator.e(err);
|
|
62
|
+
} finally {
|
|
63
|
+
_iterator.f();
|
|
38
64
|
}
|
|
39
65
|
|
|
40
|
-
return Object.keys(numericPropKeys).filter(
|
|
66
|
+
return Object.keys(numericPropKeys).filter(function (k) {
|
|
67
|
+
return numericPropKeys[k];
|
|
68
|
+
});
|
|
41
69
|
}
|
|
42
70
|
|
|
43
|
-
function fillArrays(features
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
const points = {
|
|
71
|
+
function fillArrays(features) {
|
|
72
|
+
var firstPassData = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
73
|
+
var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
|
|
74
|
+
var pointPositionsCount = firstPassData.pointPositionsCount,
|
|
75
|
+
pointFeaturesCount = firstPassData.pointFeaturesCount,
|
|
76
|
+
linePositionsCount = firstPassData.linePositionsCount,
|
|
77
|
+
linePathsCount = firstPassData.linePathsCount,
|
|
78
|
+
lineFeaturesCount = firstPassData.lineFeaturesCount,
|
|
79
|
+
polygonPositionsCount = firstPassData.polygonPositionsCount,
|
|
80
|
+
polygonObjectsCount = firstPassData.polygonObjectsCount,
|
|
81
|
+
polygonRingsCount = firstPassData.polygonRingsCount,
|
|
82
|
+
polygonFeaturesCount = firstPassData.polygonFeaturesCount;
|
|
83
|
+
var numericPropKeys = options.numericPropKeys,
|
|
84
|
+
_options$PositionData = options.PositionDataType,
|
|
85
|
+
PositionDataType = _options$PositionData === void 0 ? Float32Array : _options$PositionData;
|
|
86
|
+
var hasGlobalId = features[0] && 'id' in features[0];
|
|
87
|
+
var coordLength = 2;
|
|
88
|
+
var GlobalFeatureIdsDataType = features.length > 65535 ? Uint32Array : Uint16Array;
|
|
89
|
+
var points = {
|
|
63
90
|
positions: new PositionDataType(pointPositionsCount * coordLength),
|
|
64
91
|
globalFeatureIds: new GlobalFeatureIdsDataType(pointPositionsCount),
|
|
65
92
|
featureIds: pointFeaturesCount > 65535 ? new Uint32Array(pointPositionsCount) : new Uint16Array(pointPositionsCount),
|
|
@@ -67,7 +94,7 @@ function fillArrays(features, firstPassData = {}, options = {}) {
|
|
|
67
94
|
properties: [],
|
|
68
95
|
fields: []
|
|
69
96
|
};
|
|
70
|
-
|
|
97
|
+
var lines = {
|
|
71
98
|
pathIndices: linePositionsCount > 65535 ? new Uint32Array(linePathsCount + 1) : new Uint16Array(linePathsCount + 1),
|
|
72
99
|
positions: new PositionDataType(linePositionsCount * coordLength),
|
|
73
100
|
globalFeatureIds: new GlobalFeatureIdsDataType(linePositionsCount),
|
|
@@ -76,7 +103,7 @@ function fillArrays(features, firstPassData = {}, options = {}) {
|
|
|
76
103
|
properties: [],
|
|
77
104
|
fields: []
|
|
78
105
|
};
|
|
79
|
-
|
|
106
|
+
var polygons = {
|
|
80
107
|
polygonIndices: polygonPositionsCount > 65535 ? new Uint32Array(polygonObjectsCount + 1) : new Uint16Array(polygonObjectsCount + 1),
|
|
81
108
|
primitivePolygonIndices: polygonPositionsCount > 65535 ? new Uint32Array(polygonRingsCount + 1) : new Uint16Array(polygonRingsCount + 1),
|
|
82
109
|
positions: new PositionDataType(polygonPositionsCount * coordLength),
|
|
@@ -88,16 +115,28 @@ function fillArrays(features, firstPassData = {}, options = {}) {
|
|
|
88
115
|
fields: []
|
|
89
116
|
};
|
|
90
117
|
|
|
91
|
-
for (
|
|
92
|
-
|
|
93
|
-
|
|
118
|
+
for (var _i = 0, _arr = [points, lines, polygons]; _i < _arr.length; _i++) {
|
|
119
|
+
var object = _arr[_i];
|
|
120
|
+
|
|
121
|
+
var _iterator2 = _createForOfIteratorHelper(numericPropKeys),
|
|
122
|
+
_step2;
|
|
123
|
+
|
|
124
|
+
try {
|
|
125
|
+
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
|
|
126
|
+
var propName = _step2.value;
|
|
127
|
+
object.numericProps[propName] = new Float32Array(object.positions.length / coordLength);
|
|
128
|
+
}
|
|
129
|
+
} catch (err) {
|
|
130
|
+
_iterator2.e(err);
|
|
131
|
+
} finally {
|
|
132
|
+
_iterator2.f();
|
|
94
133
|
}
|
|
95
134
|
}
|
|
96
135
|
|
|
97
136
|
lines.pathIndices[linePathsCount] = linePositionsCount;
|
|
98
137
|
polygons.polygonIndices[polygonObjectsCount] = polygonPositionsCount;
|
|
99
138
|
polygons.primitivePolygonIndices[polygonRingsCount] = polygonPositionsCount;
|
|
100
|
-
|
|
139
|
+
var indexMap = {
|
|
101
140
|
pointPosition: 0,
|
|
102
141
|
pointFeature: 0,
|
|
103
142
|
linePosition: 0,
|
|
@@ -110,58 +149,68 @@ function fillArrays(features, firstPassData = {}, options = {}) {
|
|
|
110
149
|
feature: 0
|
|
111
150
|
};
|
|
112
151
|
|
|
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
|
-
|
|
152
|
+
var _iterator3 = _createForOfIteratorHelper(features),
|
|
153
|
+
_step3;
|
|
154
|
+
|
|
155
|
+
try {
|
|
156
|
+
for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
|
|
157
|
+
var feature = _step3.value;
|
|
158
|
+
var geometry = feature.geometry;
|
|
159
|
+
var properties = feature.properties || {};
|
|
160
|
+
|
|
161
|
+
switch (geometry.type) {
|
|
162
|
+
case 'Point':
|
|
163
|
+
case 'MultiPoint':
|
|
164
|
+
handlePoint(geometry, points, indexMap, coordLength, properties);
|
|
165
|
+
points.properties.push(keepStringProperties(properties, numericPropKeys));
|
|
166
|
+
|
|
167
|
+
if (hasGlobalId) {
|
|
168
|
+
points.fields.push({
|
|
169
|
+
id: feature.id
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
indexMap.pointFeature++;
|
|
174
|
+
break;
|
|
175
|
+
|
|
176
|
+
case 'LineString':
|
|
177
|
+
case 'MultiLineString':
|
|
178
|
+
handleLineString(geometry, lines, indexMap, coordLength, properties);
|
|
179
|
+
lines.properties.push(keepStringProperties(properties, numericPropKeys));
|
|
180
|
+
|
|
181
|
+
if (hasGlobalId) {
|
|
182
|
+
lines.fields.push({
|
|
183
|
+
id: feature.id
|
|
184
|
+
});
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
indexMap.lineFeature++;
|
|
188
|
+
break;
|
|
189
|
+
|
|
190
|
+
case 'Polygon':
|
|
191
|
+
case 'MultiPolygon':
|
|
192
|
+
handlePolygon(geometry, polygons, indexMap, coordLength, properties);
|
|
193
|
+
polygons.properties.push(keepStringProperties(properties, numericPropKeys));
|
|
194
|
+
|
|
195
|
+
if (hasGlobalId) {
|
|
196
|
+
polygons.fields.push({
|
|
197
|
+
id: feature.id
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
indexMap.polygonFeature++;
|
|
202
|
+
break;
|
|
203
|
+
|
|
204
|
+
default:
|
|
205
|
+
throw new Error('Invalid geometry type');
|
|
206
|
+
}
|
|
159
207
|
|
|
160
|
-
|
|
161
|
-
throw new Error('Invalid geometry type');
|
|
208
|
+
indexMap.feature++;
|
|
162
209
|
}
|
|
163
|
-
|
|
164
|
-
|
|
210
|
+
} catch (err) {
|
|
211
|
+
_iterator3.e(err);
|
|
212
|
+
} finally {
|
|
213
|
+
_iterator3.f();
|
|
165
214
|
}
|
|
166
215
|
|
|
167
216
|
return makeAccessorObjects(points, lines, polygons, coordLength);
|
|
@@ -169,7 +218,7 @@ function fillArrays(features, firstPassData = {}, options = {}) {
|
|
|
169
218
|
|
|
170
219
|
function handlePoint(geometry, points, indexMap, coordLength, properties) {
|
|
171
220
|
points.positions.set(geometry.data, indexMap.pointPosition * coordLength);
|
|
172
|
-
|
|
221
|
+
var nPositions = geometry.data.length / coordLength;
|
|
173
222
|
fillNumericProperties(points, properties, indexMap.pointPosition, nPositions);
|
|
174
223
|
points.globalFeatureIds.fill(indexMap.feature, indexMap.pointPosition, indexMap.pointPosition + nPositions);
|
|
175
224
|
points.featureIds.fill(indexMap.pointFeature, indexMap.pointPosition, indexMap.pointPosition + nPositions);
|
|
@@ -178,14 +227,14 @@ function handlePoint(geometry, points, indexMap, coordLength, properties) {
|
|
|
178
227
|
|
|
179
228
|
function handleLineString(geometry, lines, indexMap, coordLength, properties) {
|
|
180
229
|
lines.positions.set(geometry.data, indexMap.linePosition * coordLength);
|
|
181
|
-
|
|
230
|
+
var nPositions = geometry.data.length / coordLength;
|
|
182
231
|
fillNumericProperties(lines, properties, indexMap.linePosition, nPositions);
|
|
183
232
|
lines.globalFeatureIds.fill(indexMap.feature, indexMap.linePosition, indexMap.linePosition + nPositions);
|
|
184
233
|
lines.featureIds.fill(indexMap.lineFeature, indexMap.linePosition, indexMap.linePosition + nPositions);
|
|
185
234
|
|
|
186
|
-
for (
|
|
187
|
-
|
|
188
|
-
|
|
235
|
+
for (var i = 0, il = geometry.lines.length; i < il; ++i) {
|
|
236
|
+
var start = geometry.lines[i];
|
|
237
|
+
var end = i === il - 1 ? geometry.data.length : geometry.lines[i + 1];
|
|
189
238
|
lines.pathIndices[indexMap.linePath++] = indexMap.linePosition;
|
|
190
239
|
indexMap.linePosition += (end - start) / coordLength;
|
|
191
240
|
}
|
|
@@ -193,54 +242,55 @@ function handleLineString(geometry, lines, indexMap, coordLength, properties) {
|
|
|
193
242
|
|
|
194
243
|
function handlePolygon(geometry, polygons, indexMap, coordLength, properties) {
|
|
195
244
|
polygons.positions.set(geometry.data, indexMap.polygonPosition * coordLength);
|
|
196
|
-
|
|
245
|
+
var nPositions = geometry.data.length / coordLength;
|
|
197
246
|
fillNumericProperties(polygons, properties, indexMap.polygonPosition, nPositions);
|
|
198
247
|
polygons.globalFeatureIds.fill(indexMap.feature, indexMap.polygonPosition, indexMap.polygonPosition + nPositions);
|
|
199
248
|
polygons.featureIds.fill(indexMap.polygonFeature, indexMap.polygonPosition, indexMap.polygonPosition + nPositions);
|
|
200
249
|
|
|
201
|
-
for (
|
|
202
|
-
|
|
250
|
+
for (var l = 0, ll = geometry.lines.length; l < ll; ++l) {
|
|
251
|
+
var startPosition = indexMap.polygonPosition;
|
|
203
252
|
polygons.polygonIndices[indexMap.polygonObject++] = startPosition;
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
253
|
+
var areas = geometry.areas[l];
|
|
254
|
+
var lines = geometry.lines[l];
|
|
255
|
+
var nextLines = geometry.lines[l + 1];
|
|
207
256
|
|
|
208
|
-
for (
|
|
209
|
-
|
|
210
|
-
|
|
257
|
+
for (var i = 0, il = lines.length; i < il; ++i) {
|
|
258
|
+
var start = lines[i];
|
|
259
|
+
var end = i === il - 1 ? nextLines === undefined ? geometry.data.length : nextLines[0] : lines[i + 1];
|
|
211
260
|
polygons.primitivePolygonIndices[indexMap.polygonRing++] = indexMap.polygonPosition;
|
|
212
261
|
indexMap.polygonPosition += (end - start) / coordLength;
|
|
213
262
|
}
|
|
214
263
|
|
|
215
|
-
|
|
264
|
+
var endPosition = indexMap.polygonPosition;
|
|
216
265
|
triangulatePolygon(polygons, areas, lines, {
|
|
217
|
-
startPosition,
|
|
218
|
-
endPosition,
|
|
219
|
-
coordLength
|
|
266
|
+
startPosition: startPosition,
|
|
267
|
+
endPosition: endPosition,
|
|
268
|
+
coordLength: coordLength
|
|
220
269
|
});
|
|
221
270
|
}
|
|
222
271
|
}
|
|
223
272
|
|
|
224
|
-
function triangulatePolygon(polygons, areas, lines, {
|
|
225
|
-
startPosition,
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
273
|
+
function triangulatePolygon(polygons, areas, lines, _ref) {
|
|
274
|
+
var startPosition = _ref.startPosition,
|
|
275
|
+
endPosition = _ref.endPosition,
|
|
276
|
+
coordLength = _ref.coordLength;
|
|
277
|
+
var start = startPosition * coordLength;
|
|
278
|
+
var end = endPosition * coordLength;
|
|
279
|
+
var polygonPositions = polygons.positions.subarray(start, end);
|
|
280
|
+
var offset = lines[0];
|
|
281
|
+
var holes = lines.slice(1).map(function (n) {
|
|
282
|
+
return (n - offset) / coordLength;
|
|
283
|
+
});
|
|
284
|
+
var indices = (0, _polygon.earcut)(polygonPositions, holes, coordLength, areas);
|
|
285
|
+
|
|
286
|
+
for (var t = 0, tl = indices.length; t < tl; ++t) {
|
|
237
287
|
polygons.triangles.push(startPosition + indices[t]);
|
|
238
288
|
}
|
|
239
289
|
}
|
|
240
290
|
|
|
241
291
|
function makeAccessorObjects(points, lines, polygons, coordLength) {
|
|
242
|
-
|
|
243
|
-
points: {
|
|
292
|
+
var returnObj = {
|
|
293
|
+
points: _objectSpread(_objectSpread({}, points), {}, {
|
|
244
294
|
positions: {
|
|
245
295
|
value: points.positions,
|
|
246
296
|
size: coordLength
|
|
@@ -253,8 +303,8 @@ function makeAccessorObjects(points, lines, polygons, coordLength) {
|
|
|
253
303
|
value: points.featureIds,
|
|
254
304
|
size: 1
|
|
255
305
|
}
|
|
256
|
-
},
|
|
257
|
-
lines: {
|
|
306
|
+
}),
|
|
307
|
+
lines: _objectSpread(_objectSpread({}, lines), {}, {
|
|
258
308
|
pathIndices: {
|
|
259
309
|
value: lines.pathIndices,
|
|
260
310
|
size: 1
|
|
@@ -271,8 +321,8 @@ function makeAccessorObjects(points, lines, polygons, coordLength) {
|
|
|
271
321
|
value: lines.featureIds,
|
|
272
322
|
size: 1
|
|
273
323
|
}
|
|
274
|
-
},
|
|
275
|
-
polygons: {
|
|
324
|
+
}),
|
|
325
|
+
polygons: _objectSpread(_objectSpread({}, polygons), {}, {
|
|
276
326
|
polygonIndices: {
|
|
277
327
|
value: polygons.polygonIndices,
|
|
278
328
|
size: 1
|
|
@@ -297,11 +347,11 @@ function makeAccessorObjects(points, lines, polygons, coordLength) {
|
|
|
297
347
|
value: polygons.featureIds,
|
|
298
348
|
size: 1
|
|
299
349
|
}
|
|
300
|
-
}
|
|
350
|
+
})
|
|
301
351
|
};
|
|
302
352
|
|
|
303
|
-
for (
|
|
304
|
-
for (
|
|
353
|
+
for (var geomType in returnObj) {
|
|
354
|
+
for (var numericProp in returnObj[geomType].numericProps) {
|
|
305
355
|
returnObj[geomType].numericProps[numericProp] = {
|
|
306
356
|
value: returnObj[geomType].numericProps[numericProp],
|
|
307
357
|
size: 1
|
|
@@ -313,7 +363,7 @@ function makeAccessorObjects(points, lines, polygons, coordLength) {
|
|
|
313
363
|
}
|
|
314
364
|
|
|
315
365
|
function fillNumericProperties(object, properties, index, length) {
|
|
316
|
-
for (
|
|
366
|
+
for (var numericPropName in object.numericProps) {
|
|
317
367
|
if (numericPropName in properties) {
|
|
318
368
|
object.numericProps[numericPropName].fill(properties[numericPropName], index, index + length);
|
|
319
369
|
}
|
|
@@ -321,9 +371,9 @@ function fillNumericProperties(object, properties, index, length) {
|
|
|
321
371
|
}
|
|
322
372
|
|
|
323
373
|
function keepStringProperties(properties, numericKeys) {
|
|
324
|
-
|
|
374
|
+
var props = {};
|
|
325
375
|
|
|
326
|
-
for (
|
|
376
|
+
for (var key in properties) {
|
|
327
377
|
if (!numericKeys.includes(key)) {
|
|
328
378
|
props[key] = properties[key];
|
|
329
379
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/lib/binary-vector-tile/features-to-binary.js"],"names":["featuresToBinary","features","firstPassData","options","fillArrays","numericPropKeys","extractNumericPropKeys","PositionDataType","Float32Array","TEST_EXPORTS","feature","properties","key","numericSoFar","undefined","val","isNumeric","Object","keys","filter","k","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","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","endPosition","triangulatePolygon","polygonPositions","subarray","offset","holes","slice","map","n","indices","t","tl","returnObj","value","size","geomType","numericProp","index","numericPropName","numericKeys","props","includes","x","Number","isFinite"],"mappings":"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","sourcesContent":["// @ts-nocheck\nimport {earcut} from '@math.gl/polygon';\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 */\nexport function featuresToBinary(features, firstPassData, options = {}) {\n return fillArrays(features, firstPassData, {\n numericPropKeys: options.numericPropKeys || extractNumericPropKeys(features),\n PositionDataType: options.PositionDataType || Float32Array\n });\n}\n\nexport const TEST_EXPORTS = {\n extractNumericPropKeys,\n fillArrays\n};\n\n// Extracts properties that are always numeric\n// eslint-disable-next-line complexity, max-statements\nfunction extractNumericPropKeys(features) {\n const numericPropKeys = {};\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, false is stored to prevent rechecking in the future\n const numericSoFar = numericPropKeys[key];\n // eslint-disable-next-line max-depth\n if (numericSoFar || numericSoFar === undefined) {\n const val = feature.properties[key];\n numericPropKeys[key] = isNumeric(val);\n }\n }\n }\n }\n\n return Object.keys(numericPropKeys).filter((k) => numericPropKeys[k]);\n}\n\n// Fills coordinates into pre-allocated typed arrays\n// eslint-disable-next-line complexity\nfunction fillArrays(features, firstPassData = {}, options = {}) {\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, 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 = {\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 = {\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 = {\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 object.numericProps[propName] = new Float32Array(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// Fills (Multi)Point coordinates into points object of arrays\nfunction handlePoint(geometry, points, indexMap, coordLength, properties) {\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// Fills (Multi)LineString coordinates into lines object of arrays\nfunction handleLineString(geometry, lines, indexMap, coordLength, properties) {\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// Fills (Multi)Polygon coordinates into polygons object of arrays\nfunction handlePolygon(geometry, polygons, indexMap, coordLength, properties) {\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 */\nfunction triangulatePolygon(polygons, areas, lines, {startPosition, endPosition, coordLength}) {\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) => (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// Wrap each array in an accessor object with value and size keys\nfunction makeAccessorObjects(points, lines, polygons, coordLength) {\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// Add numeric properties to object\nfunction fillNumericProperties(object, properties, index, length) {\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// Keep string properties in object\nfunction keepStringProperties(properties, numericKeys) {\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 isNumeric(x) {\n return Number.isFinite(x);\n}\n"],"file":"features-to-binary.js"}
|
|
1
|
+
{"version":3,"sources":["../../../../src/lib/binary-vector-tile/features-to-binary.js"],"names":["featuresToBinary","features","firstPassData","options","fillArrays","numericPropKeys","extractNumericPropKeys","PositionDataType","Float32Array","TEST_EXPORTS","feature","properties","key","numericSoFar","undefined","val","isNumeric","Object","keys","filter","k","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","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","endPosition","triangulatePolygon","polygonPositions","subarray","offset","holes","slice","map","n","indices","t","tl","returnObj","value","size","geomType","numericProp","index","numericPropName","numericKeys","props","includes","x","Number","isFinite"],"mappings":"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","sourcesContent":["// @ts-nocheck\nimport {earcut} from '@math.gl/polygon';\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 */\nexport function featuresToBinary(features, firstPassData, options = {}) {\n return fillArrays(features, firstPassData, {\n numericPropKeys: options.numericPropKeys || extractNumericPropKeys(features),\n PositionDataType: options.PositionDataType || Float32Array\n });\n}\n\nexport const TEST_EXPORTS = {\n extractNumericPropKeys,\n fillArrays\n};\n\n// Extracts properties that are always numeric\n// eslint-disable-next-line complexity, max-statements\nfunction extractNumericPropKeys(features) {\n const numericPropKeys = {};\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, false is stored to prevent rechecking in the future\n const numericSoFar = numericPropKeys[key];\n // eslint-disable-next-line max-depth\n if (numericSoFar || numericSoFar === undefined) {\n const val = feature.properties[key];\n numericPropKeys[key] = isNumeric(val);\n }\n }\n }\n }\n\n return Object.keys(numericPropKeys).filter((k) => numericPropKeys[k]);\n}\n\n// Fills coordinates into pre-allocated typed arrays\n// eslint-disable-next-line complexity\nfunction fillArrays(features, firstPassData = {}, options = {}) {\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, 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 = {\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 = {\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 = {\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 object.numericProps[propName] = new Float32Array(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// Fills (Multi)Point coordinates into points object of arrays\nfunction handlePoint(geometry, points, indexMap, coordLength, properties) {\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// Fills (Multi)LineString coordinates into lines object of arrays\nfunction handleLineString(geometry, lines, indexMap, coordLength, properties) {\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// Fills (Multi)Polygon coordinates into polygons object of arrays\nfunction handlePolygon(geometry, polygons, indexMap, coordLength, properties) {\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 */\nfunction triangulatePolygon(polygons, areas, lines, {startPosition, endPosition, coordLength}) {\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) => (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// Wrap each array in an accessor object with value and size keys\nfunction makeAccessorObjects(points, lines, polygons, coordLength) {\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// Add numeric properties to object\nfunction fillNumericProperties(object, properties, index, length) {\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// Keep string properties in object\nfunction keepStringProperties(properties, numericKeys) {\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 isNumeric(x) {\n return Number.isFinite(x);\n}\n"],"file":"features-to-binary.js"}
|