@loaders.gl/mvt 3.0.12 → 3.0.13
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 +132 -182
- 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 +133 -160
- 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 +15 -23
- 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 +157 -169
- 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 +15 -23
- 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 +35 -39
- package/dist/es5/lib/parse-mvt.js.map +1 -1
- package/dist/es5/mvt-loader.js +5 -38
- package/dist/es5/mvt-loader.js.map +1 -1
- package/dist/esm/lib/binary-vector-tile/vector-tile-feature.js +2 -2
- package/dist/esm/lib/binary-vector-tile/vector-tile-feature.js.map +1 -1
- package/dist/esm/lib/mapbox-vector-tile/vector-tile-feature.js +3 -3
- package/dist/esm/lib/mapbox-vector-tile/vector-tile-feature.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
|
@@ -7,8 +7,6 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
7
7
|
});
|
|
8
8
|
exports.default = parseMVT;
|
|
9
9
|
|
|
10
|
-
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
11
|
-
|
|
12
10
|
var _vectorTile = _interopRequireDefault(require("./mapbox-vector-tile/vector-tile"));
|
|
13
11
|
|
|
14
12
|
var _vectorTile2 = _interopRequireDefault(require("./binary-vector-tile/vector-tile"));
|
|
@@ -17,15 +15,11 @@ var _featuresToBinary = require("./binary-vector-tile/features-to-binary");
|
|
|
17
15
|
|
|
18
16
|
var _pbf = _interopRequireDefault(require("pbf"));
|
|
19
17
|
|
|
20
|
-
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; }
|
|
21
|
-
|
|
22
|
-
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; }
|
|
23
|
-
|
|
24
18
|
function parseMVT(arrayBuffer, options) {
|
|
25
19
|
options = normalizeOptions(options);
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
20
|
+
const binary = options.gis.format === 'binary';
|
|
21
|
+
const features = [];
|
|
22
|
+
const firstPassData = {
|
|
29
23
|
pointPositionsCount: 0,
|
|
30
24
|
pointFeaturesCount: 0,
|
|
31
25
|
linePositionsCount: 0,
|
|
@@ -38,30 +32,29 @@ function parseMVT(arrayBuffer, options) {
|
|
|
38
32
|
};
|
|
39
33
|
|
|
40
34
|
if (arrayBuffer.byteLength > 0) {
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
selectedLayers.forEach(
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
});
|
|
35
|
+
const tile = binary ? new _vectorTile2.default(new _pbf.default(arrayBuffer)) : new _vectorTile.default(new _pbf.default(arrayBuffer));
|
|
36
|
+
const loaderOptions = options.mvt;
|
|
37
|
+
const selectedLayers = Array.isArray(loaderOptions.layers) ? loaderOptions.layers : Object.keys(tile.layers);
|
|
38
|
+
selectedLayers.forEach(layerName => {
|
|
39
|
+
const vectorTileLayer = tile.layers[layerName];
|
|
40
|
+
const featureOptions = { ...loaderOptions,
|
|
41
|
+
layerName
|
|
42
|
+
};
|
|
50
43
|
|
|
51
44
|
if (!vectorTileLayer) {
|
|
52
45
|
return;
|
|
53
46
|
}
|
|
54
47
|
|
|
55
|
-
for (
|
|
56
|
-
|
|
57
|
-
|
|
48
|
+
for (let i = 0; i < vectorTileLayer.length; i++) {
|
|
49
|
+
const vectorTileFeature = vectorTileLayer.feature(i, firstPassData);
|
|
50
|
+
const decodedFeature = binary ? getDecodedFeatureBinary(vectorTileFeature, featureOptions) : getDecodedFeature(vectorTileFeature, featureOptions);
|
|
58
51
|
features.push(decodedFeature);
|
|
59
52
|
}
|
|
60
53
|
});
|
|
61
54
|
}
|
|
62
55
|
|
|
63
56
|
if (binary) {
|
|
64
|
-
|
|
57
|
+
const data = (0, _featuresToBinary.featuresToBinary)(features, firstPassData, options.gis);
|
|
65
58
|
data.byteLength = arrayBuffer.byteLength;
|
|
66
59
|
return data;
|
|
67
60
|
}
|
|
@@ -70,14 +63,15 @@ function parseMVT(arrayBuffer, options) {
|
|
|
70
63
|
}
|
|
71
64
|
|
|
72
65
|
function normalizeOptions(options) {
|
|
73
|
-
options =
|
|
66
|
+
options = { ...options,
|
|
74
67
|
mvt: options.mvt || {},
|
|
75
68
|
gis: options.gis || {}
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
69
|
+
};
|
|
70
|
+
const wgs84Coordinates = options.coordinates === 'wgs84';
|
|
71
|
+
const {
|
|
72
|
+
tileIndex
|
|
73
|
+
} = options;
|
|
74
|
+
const hasTileIndex = tileIndex && Number.isFinite(tileIndex.x) && Number.isFinite(tileIndex.y) && Number.isFinite(tileIndex.z);
|
|
81
75
|
|
|
82
76
|
if (wgs84Coordinates && !hasTileIndex) {
|
|
83
77
|
throw new Error('MVT Loader: WGS84 coordinates need tileIndex property. Check documentation.');
|
|
@@ -86,9 +80,8 @@ function normalizeOptions(options) {
|
|
|
86
80
|
return options;
|
|
87
81
|
}
|
|
88
82
|
|
|
89
|
-
function getDecodedFeature(feature) {
|
|
90
|
-
|
|
91
|
-
var decodedFeature = feature.toGeoJSON(options.coordinates === 'wgs84' ? options.tileIndex : transformToLocalCoordinates);
|
|
83
|
+
function getDecodedFeature(feature, options = {}) {
|
|
84
|
+
const decodedFeature = feature.toGeoJSON(options.coordinates === 'wgs84' ? options.tileIndex : transformToLocalCoordinates);
|
|
92
85
|
|
|
93
86
|
if (options.layerProperty) {
|
|
94
87
|
decodedFeature.properties[options.layerProperty] = options.layerName;
|
|
@@ -97,9 +90,8 @@ function getDecodedFeature(feature) {
|
|
|
97
90
|
return decodedFeature;
|
|
98
91
|
}
|
|
99
92
|
|
|
100
|
-
function getDecodedFeatureBinary(feature) {
|
|
101
|
-
|
|
102
|
-
var decodedFeature = feature.toBinaryCoordinates(options.coordinates === 'wgs84' ? options.tileIndex : transformToLocalCoordinatesBinary);
|
|
93
|
+
function getDecodedFeatureBinary(feature, options = {}) {
|
|
94
|
+
const decodedFeature = feature.toBinaryCoordinates(options.coordinates === 'wgs84' ? options.tileIndex : transformToLocalCoordinatesBinary);
|
|
103
95
|
|
|
104
96
|
if (options.layerProperty) {
|
|
105
97
|
decodedFeature.properties[options.layerProperty] = options.layerName;
|
|
@@ -109,19 +101,23 @@ function getDecodedFeatureBinary(feature) {
|
|
|
109
101
|
}
|
|
110
102
|
|
|
111
103
|
function transformToLocalCoordinates(line, feature) {
|
|
112
|
-
|
|
104
|
+
const {
|
|
105
|
+
extent
|
|
106
|
+
} = feature;
|
|
113
107
|
|
|
114
|
-
for (
|
|
115
|
-
|
|
108
|
+
for (let i = 0; i < line.length; i++) {
|
|
109
|
+
const p = line[i];
|
|
116
110
|
p[0] /= extent;
|
|
117
111
|
p[1] /= extent;
|
|
118
112
|
}
|
|
119
113
|
}
|
|
120
114
|
|
|
121
115
|
function transformToLocalCoordinatesBinary(data, feature) {
|
|
122
|
-
|
|
116
|
+
const {
|
|
117
|
+
extent
|
|
118
|
+
} = feature;
|
|
123
119
|
|
|
124
|
-
for (
|
|
120
|
+
for (let i = 0, il = data.length; i < il; ++i) {
|
|
125
121
|
data[i] /= extent;
|
|
126
122
|
}
|
|
127
123
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/lib/parse-mvt.js"],"names":["parseMVT","arrayBuffer","options","normalizeOptions","binary","gis","format","features","firstPassData","pointPositionsCount","pointFeaturesCount","linePositionsCount","linePathsCount","lineFeaturesCount","polygonPositionsCount","polygonObjectsCount","polygonRingsCount","polygonFeaturesCount","byteLength","tile","BinaryVectorTile","Protobuf","VectorTile","loaderOptions","mvt","selectedLayers","Array","isArray","layers","Object","keys","forEach","layerName","vectorTileLayer","featureOptions","i","length","vectorTileFeature","feature","decodedFeature","getDecodedFeatureBinary","getDecodedFeature","push","data","wgs84Coordinates","coordinates","tileIndex","hasTileIndex","Number","isFinite","x","y","z","Error","toGeoJSON","transformToLocalCoordinates","layerProperty","properties","toBinaryCoordinates","transformToLocalCoordinatesBinary","line","extent","p","il"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/parse-mvt.js"],"names":["parseMVT","arrayBuffer","options","normalizeOptions","binary","gis","format","features","firstPassData","pointPositionsCount","pointFeaturesCount","linePositionsCount","linePathsCount","lineFeaturesCount","polygonPositionsCount","polygonObjectsCount","polygonRingsCount","polygonFeaturesCount","byteLength","tile","BinaryVectorTile","Protobuf","VectorTile","loaderOptions","mvt","selectedLayers","Array","isArray","layers","Object","keys","forEach","layerName","vectorTileLayer","featureOptions","i","length","vectorTileFeature","feature","decodedFeature","getDecodedFeatureBinary","getDecodedFeature","push","data","wgs84Coordinates","coordinates","tileIndex","hasTileIndex","Number","isFinite","x","y","z","Error","toGeoJSON","transformToLocalCoordinates","layerProperty","properties","toBinaryCoordinates","transformToLocalCoordinatesBinary","line","extent","p","il"],"mappings":"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","sourcesContent":["// import {VectorTile} from '@mapbox/vector-tile';\nimport VectorTile from './mapbox-vector-tile/vector-tile';\nimport BinaryVectorTile from './binary-vector-tile/vector-tile';\n\nimport {featuresToBinary} from './binary-vector-tile/features-to-binary';\nimport Protobuf from 'pbf';\n\n/*\n * Parse MVT arrayBuffer and return GeoJSON.\n *\n * @param {arrayBuffer} _ A MVT arrayBuffer\n * @return {?Object} A GeoJSON geometry object or a binary representation\n */\nexport default function parseMVT(arrayBuffer, options) {\n options = normalizeOptions(options);\n\n const binary = options.gis.format === 'binary';\n const features = [];\n const firstPassData = {\n pointPositionsCount: 0,\n pointFeaturesCount: 0,\n linePositionsCount: 0,\n linePathsCount: 0,\n lineFeaturesCount: 0,\n polygonPositionsCount: 0,\n polygonObjectsCount: 0,\n polygonRingsCount: 0,\n polygonFeaturesCount: 0\n };\n\n if (arrayBuffer.byteLength > 0) {\n const tile = binary\n ? new BinaryVectorTile(new Protobuf(arrayBuffer))\n : new VectorTile(new Protobuf(arrayBuffer));\n const loaderOptions = options.mvt;\n\n const selectedLayers = Array.isArray(loaderOptions.layers)\n ? loaderOptions.layers\n : Object.keys(tile.layers);\n\n selectedLayers.forEach((layerName) => {\n const vectorTileLayer = tile.layers[layerName];\n const featureOptions = {...loaderOptions, layerName};\n\n if (!vectorTileLayer) {\n return;\n }\n\n for (let i = 0; i < vectorTileLayer.length; i++) {\n const vectorTileFeature = vectorTileLayer.feature(i, firstPassData);\n\n const decodedFeature = binary\n ? getDecodedFeatureBinary(vectorTileFeature, featureOptions)\n : getDecodedFeature(vectorTileFeature, featureOptions);\n features.push(decodedFeature);\n }\n });\n }\n\n if (binary) {\n const data = featuresToBinary(features, firstPassData, options.gis);\n // Add the original byteLength (as a reasonable approximation of the size of the binary data)\n // TODO decide where to store extra fields like byteLength (header etc) and document\n // @ts-ignore\n data.byteLength = arrayBuffer.byteLength;\n return data;\n }\n\n return features;\n}\n\nfunction normalizeOptions(options) {\n options = {\n ...options,\n mvt: options.mvt || {},\n gis: options.gis || {}\n };\n\n // Validate\n const wgs84Coordinates = options.coordinates === 'wgs84';\n const {tileIndex} = options;\n const hasTileIndex =\n tileIndex &&\n Number.isFinite(tileIndex.x) &&\n Number.isFinite(tileIndex.y) &&\n Number.isFinite(tileIndex.z);\n\n if (wgs84Coordinates && !hasTileIndex) {\n throw new Error('MVT Loader: WGS84 coordinates need tileIndex property. Check documentation.');\n }\n\n return options;\n}\n\nfunction getDecodedFeature(feature, options = {}) {\n const decodedFeature = feature.toGeoJSON(\n options.coordinates === 'wgs84' ? options.tileIndex : transformToLocalCoordinates\n );\n\n // Add layer name to GeoJSON properties\n if (options.layerProperty) {\n decodedFeature.properties[options.layerProperty] = options.layerName;\n }\n\n return decodedFeature;\n}\n\nfunction getDecodedFeatureBinary(feature, options = {}) {\n const decodedFeature = feature.toBinaryCoordinates(\n options.coordinates === 'wgs84' ? options.tileIndex : transformToLocalCoordinatesBinary\n );\n\n // Add layer name to GeoJSON properties\n if (options.layerProperty) {\n decodedFeature.properties[options.layerProperty] = options.layerName;\n }\n\n return decodedFeature;\n}\n\nfunction transformToLocalCoordinates(line, feature) {\n // This function transforms local coordinates in a\n // [0 - bufferSize, this.extent + bufferSize] range to a\n // [0 - (bufferSize / this.extent), 1 + (bufferSize / this.extent)] range.\n // The resulting extent would be 1.\n const {extent} = feature;\n\n for (let i = 0; i < line.length; i++) {\n const p = line[i];\n p[0] /= extent;\n p[1] /= extent;\n }\n}\n\nfunction transformToLocalCoordinatesBinary(data, feature) {\n // For the binary code path, the feature data is just\n // one big flat array, so we just divide each value\n const {extent} = feature;\n for (let i = 0, il = data.length; i < il; ++i) {\n data[i] /= extent;\n }\n}\n"],"file":"parse-mvt.js"}
|
package/dist/es5/mvt-loader.js
CHANGED
|
@@ -7,20 +7,10 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
7
7
|
});
|
|
8
8
|
exports.MVTLoader = exports.MVTWorkerLoader = void 0;
|
|
9
9
|
|
|
10
|
-
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
11
|
-
|
|
12
|
-
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
13
|
-
|
|
14
|
-
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
15
|
-
|
|
16
10
|
var _parseMvt = _interopRequireDefault(require("./lib/parse-mvt"));
|
|
17
11
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
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; }
|
|
21
|
-
|
|
22
|
-
var VERSION = typeof "3.0.12" !== 'undefined' ? "3.0.12" : 'latest';
|
|
23
|
-
var MVTWorkerLoader = {
|
|
12
|
+
const VERSION = typeof "3.0.13" !== 'undefined' ? "3.0.13" : 'latest';
|
|
13
|
+
const MVTWorkerLoader = {
|
|
24
14
|
name: 'Mapbox Vector Tile',
|
|
25
15
|
id: 'mvt',
|
|
26
16
|
module: 'mvt',
|
|
@@ -39,33 +29,10 @@ var MVTWorkerLoader = {
|
|
|
39
29
|
}
|
|
40
30
|
};
|
|
41
31
|
exports.MVTWorkerLoader = MVTWorkerLoader;
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
parse: function () {
|
|
45
|
-
var _parse = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee(arrayBuffer, options) {
|
|
46
|
-
return _regenerator.default.wrap(function _callee$(_context) {
|
|
47
|
-
while (1) {
|
|
48
|
-
switch (_context.prev = _context.next) {
|
|
49
|
-
case 0:
|
|
50
|
-
return _context.abrupt("return", (0, _parseMvt.default)(arrayBuffer, options));
|
|
51
|
-
|
|
52
|
-
case 1:
|
|
53
|
-
case "end":
|
|
54
|
-
return _context.stop();
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
}, _callee);
|
|
58
|
-
}));
|
|
59
|
-
|
|
60
|
-
function parse(_x, _x2) {
|
|
61
|
-
return _parse.apply(this, arguments);
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
return parse;
|
|
65
|
-
}(),
|
|
32
|
+
const MVTLoader = { ...MVTWorkerLoader,
|
|
33
|
+
parse: async (arrayBuffer, options) => (0, _parseMvt.default)(arrayBuffer, options),
|
|
66
34
|
parseSync: _parseMvt.default,
|
|
67
35
|
binary: true
|
|
68
|
-
}
|
|
69
|
-
|
|
36
|
+
};
|
|
70
37
|
exports.MVTLoader = MVTLoader;
|
|
71
38
|
//# sourceMappingURL=mvt-loader.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/mvt-loader.ts"],"names":["VERSION","MVTWorkerLoader","name","id","module","version","extensions","mimeTypes","worker","category","options","mvt","coordinates","layerProperty","layers","tileIndex","MVTLoader","parse","arrayBuffer","parseSync","parseMVT","binary"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../src/mvt-loader.ts"],"names":["VERSION","MVTWorkerLoader","name","id","module","version","extensions","mimeTypes","worker","category","options","mvt","coordinates","layerProperty","layers","tileIndex","MVTLoader","parse","arrayBuffer","parseSync","parseMVT","binary"],"mappings":";;;;;;;;;AACA;;AAIA,MAAMA,OAAO,GAAG,oBAAuB,WAAvB,cAAmD,QAAnE;AAKO,MAAMC,eAAuB,GAAG;AACrCC,EAAAA,IAAI,EAAE,oBAD+B;AAErCC,EAAAA,EAAE,EAAE,KAFiC;AAGrCC,EAAAA,MAAM,EAAE,KAH6B;AAIrCC,EAAAA,OAAO,EAAEL,OAJ4B;AAMrCM,EAAAA,UAAU,EAAE,CAAC,KAAD,EAAQ,KAAR,CANyB;AAOrCC,EAAAA,SAAS,EAAE,CACT,oCADS,EAET,wBAFS,CAP0B;AAYrCC,EAAAA,MAAM,EAAE,IAZ6B;AAarCC,EAAAA,QAAQ,EAAE,UAb2B;AAcrCC,EAAAA,OAAO,EAAE;AACPC,IAAAA,GAAG,EAAE;AACHC,MAAAA,WAAW,EAAE,OADV;AAEHC,MAAAA,aAAa,EAAE,WAFZ;AAGHC,MAAAA,MAAM,EAAE,IAHL;AAIHC,MAAAA,SAAS,EAAE;AAJR;AADE;AAd4B,CAAhC;;AA2BA,MAAMC,SAA2B,GAAG,EACzC,GAAGf,eADsC;AAEzCgB,EAAAA,KAAK,EAAE,OAAOC,WAAP,EAAoBR,OAApB,KAAgC,uBAASQ,WAAT,EAAsBR,OAAtB,CAFE;AAGzCS,EAAAA,SAAS,EAAEC,iBAH8B;AAIzCC,EAAAA,MAAM,EAAE;AAJiC,CAApC","sourcesContent":["import type {Loader, LoaderWithParser} from '@loaders.gl/loader-utils';\nimport parseMVT from './lib/parse-mvt';\n\n// __VERSION__ is injected by babel-plugin-version-inline\n// @ts-ignore TS2304: Cannot find name '__VERSION__'.\nconst VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';\n\n/**\n * Worker loader for the Mapbox Vector Tile format\n */\nexport const MVTWorkerLoader: Loader = {\n name: 'Mapbox Vector Tile',\n id: 'mvt',\n module: 'mvt',\n version: VERSION,\n // Note: ArcGIS uses '.pbf' extension and 'application/octet-stream'\n extensions: ['mvt', 'pbf'],\n mimeTypes: [\n 'application/vnd.mapbox-vector-tile',\n 'application/x-protobuf'\n // 'application/octet-stream'\n ],\n worker: true,\n category: 'geometry',\n options: {\n mvt: {\n coordinates: 'local',\n layerProperty: 'layerName',\n layers: null,\n tileIndex: null\n }\n }\n};\n\n/**\n * Loader for the Mapbox Vector Tile format\n */\nexport const MVTLoader: LoaderWithParser = {\n ...MVTWorkerLoader,\n parse: async (arrayBuffer, options) => parseMVT(arrayBuffer, options),\n parseSync: parseMVT,\n binary: true\n};\n"],"file":"mvt-loader.js"}
|
|
@@ -59,7 +59,7 @@ export default class VectorTileFeature {
|
|
|
59
59
|
i += 2;
|
|
60
60
|
}
|
|
61
61
|
} else {
|
|
62
|
-
throw new Error(
|
|
62
|
+
throw new Error("unknown command ".concat(cmd));
|
|
63
63
|
}
|
|
64
64
|
}
|
|
65
65
|
|
|
@@ -103,7 +103,7 @@ export default class VectorTileFeature {
|
|
|
103
103
|
geom.type = VectorTileFeature.types[this.type];
|
|
104
104
|
|
|
105
105
|
if (geom.lines.length > 1) {
|
|
106
|
-
geom.type =
|
|
106
|
+
geom.type = "Multi".concat(geom.type);
|
|
107
107
|
}
|
|
108
108
|
|
|
109
109
|
const result = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/lib/binary-vector-tile/vector-tile-feature.js"],"names":["getPolygonSignedArea","endPos","cmd","cmdLen","length","x","y","i","TEST_EXPORTS","classifyRings","VectorTileFeature","types","constructor","pbf","end","extent","keys","values","firstPassData","properties","type","id","_pbf","_geometry","_keys","_values","_firstPassData","readFields","readFeature","loadGeometry","pos","readVarint","lines","data","readSVarint","push","start","Error","_toBinaryCoordinates","transform","geom","coordLength","pointFeaturesCount","pointPositionsCount","lineFeaturesCount","linePathsCount","linePositionsCount","classified","polygonFeaturesCount","polygonObjectsCount","polygonRingsCount","polygonPositionsCount","result","geometry","toBinaryCoordinates","options","z","size","Math","pow","x0","y0","project","j","jl","y2","PI","atan","exp","len","areas","polygons","ringAreas","polygon","ccw","offset","startIndex","endIndex","shape","slice","area","before","after","concat","undefined","tag","feature","readTag","key","value"],"mappings":"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","sourcesContent":["// This code is forked from https://github.com/mapbox/vector-tile-js under BSD 3-clause license.\n/* eslint-disable */\n\nimport {getPolygonSignedArea} from '@math.gl/polygon';\n\n// Reduce GC by reusing variables\nlet endPos, cmd, cmdLen, length, x, y, i;\n\nexport const TEST_EXPORTS = {\n classifyRings\n};\n\nexport default class VectorTileFeature {\n static get types() {\n return ['Unknown', 'Point', 'LineString', 'Polygon'];\n }\n\n constructor(pbf, end, extent, keys, values, firstPassData) {\n // Public\n this.properties = {};\n this.extent = extent;\n this.type = 0;\n this.id = null;\n\n // Private\n this._pbf = pbf;\n this._geometry = -1;\n this._keys = keys;\n this._values = values;\n this._firstPassData = firstPassData;\n\n pbf.readFields(readFeature, this, end);\n }\n\n // eslint-disable-next-line complexity, max-statements\n loadGeometry() {\n const pbf = this._pbf;\n pbf.pos = this._geometry;\n\n endPos = pbf.readVarint() + pbf.pos;\n cmd = 1;\n length = 0;\n x = 0;\n y = 0;\n i = 0;\n\n // Note: I attempted to replace the `data` array with a\n // Float32Array, but performance was worse, both using\n // `set()` and direct index access. Also, we cannot\n // know how large the buffer should be, so it would\n // increase memory usage\n const lines = []; // Indices where lines start\n const data = []; // Flat array of coordinate data\n\n while (pbf.pos < endPos) {\n if (length <= 0) {\n cmdLen = pbf.readVarint();\n cmd = cmdLen & 0x7;\n length = cmdLen >> 3;\n }\n\n length--;\n\n if (cmd === 1 || cmd === 2) {\n x += pbf.readSVarint();\n y += pbf.readSVarint();\n\n if (cmd === 1) {\n // New line\n lines.push(i);\n }\n data.push(x, y);\n i += 2;\n } else if (cmd === 7) {\n // Workaround for https://github.com/mapbox/mapnik-vector-tile/issues/90\n if (i > 0) {\n const start = lines[lines.length - 1]; // start index of polygon\n data.push(data[start], data[start + 1]); // closePolygon\n i += 2;\n }\n } else {\n throw new Error(`unknown command ${cmd}`);\n }\n }\n\n return {data, lines};\n }\n\n _toBinaryCoordinates(transform) {\n // Expands the protobuf data to an intermediate `lines`\n // data format, which maps closely to the binary data buffers.\n // It is similar to GeoJSON, but rather than storing the coordinates\n // in multidimensional arrays, we have a 1D `data` with all the\n // coordinates, and then index into this using the `lines`\n // parameter, e.g.\n //\n // geometry: {\n // type: 'Point', data: [1,2], lines: [0]\n // }\n // geometry: {\n // type: 'LineString', data: [1,2,3,4,...], lines: [0]\n // }\n // geometry: {\n // type: 'Polygon', data: [1,2,3,4,...], lines: [[0, 2]]\n // }\n // Thus the lines member lets us look up the relevant range\n // from the data array.\n // The Multi* versions of the above types share the same data\n // structure, just with multiple elements in the lines array\n let geom = this.loadGeometry();\n\n // Apply the supplied transformation to data\n transform(geom.data, this);\n\n const coordLength = 2;\n\n switch (this.type) {\n case 1: // Point\n this._firstPassData.pointFeaturesCount++;\n this._firstPassData.pointPositionsCount += geom.lines.length;\n break;\n\n case 2: // LineString\n this._firstPassData.lineFeaturesCount++;\n this._firstPassData.linePathsCount += geom.lines.length;\n this._firstPassData.linePositionsCount += geom.data.length / coordLength;\n break;\n\n case 3: // Polygon\n const classified = classifyRings(geom);\n\n // Unlike Point & LineString geom.lines is a 2D array, thanks\n // to the classifyRings method\n this._firstPassData.polygonFeaturesCount++;\n this._firstPassData.polygonObjectsCount += classified.lines.length;\n\n for (const lines of classified.lines) {\n this._firstPassData.polygonRingsCount += lines.length;\n }\n this._firstPassData.polygonPositionsCount += classified.data.length / coordLength;\n\n // @ts-ignore\n geom = classified;\n break;\n }\n\n geom.type = VectorTileFeature.types[this.type];\n if (geom.lines.length > 1) {\n geom.type = `Multi${geom.type}`;\n }\n\n const result = {\n type: 'Feature',\n geometry: geom,\n properties: this.properties\n };\n\n if (this.id !== null) {\n result.id = this.id;\n }\n\n return result;\n }\n\n toBinaryCoordinates(options) {\n if (typeof options === 'function') {\n return this._toBinaryCoordinates(options);\n }\n const {x, y, z} = options;\n const size = this.extent * Math.pow(2, z);\n const x0 = this.extent * x;\n const y0 = this.extent * y;\n\n function project(data) {\n for (let j = 0, jl = data.length; j < jl; j += 2) {\n data[j] = ((data[j] + x0) * 360) / size - 180;\n const y2 = 180 - ((data[j + 1] + y0) * 360) / size;\n data[j + 1] = (360 / Math.PI) * Math.atan(Math.exp((y2 * Math.PI) / 180)) - 90;\n }\n }\n return this._toBinaryCoordinates(project);\n }\n}\n\n/**\n * Classifies an array of rings into polygons with outer rings and holes\n * The function also detects holes which have zero area and\n * removes them. In doing so it modifies the input\n * `geom.data` array to remove the unneeded data\n */\nfunction classifyRings(geom) {\n const len = geom.lines.length;\n\n if (len <= 1) {\n return {\n data: geom.data,\n areas: [[getPolygonSignedArea(geom.data)]],\n lines: [geom.lines]\n };\n }\n\n const areas = [];\n const polygons = [];\n let ringAreas;\n let polygon;\n let ccw;\n let offset = 0;\n\n for (let i = 0, startIndex, endIndex; i < len; i++) {\n startIndex = geom.lines[i] - offset;\n\n endIndex = geom.lines[i + 1] - offset || geom.data.length;\n const shape = geom.data.slice(startIndex, endIndex);\n const area = getPolygonSignedArea(shape);\n\n if (area === 0) {\n // This polygon has no area, so remove it from the shape\n // Remove the section from the data array\n const before = geom.data.slice(0, startIndex);\n const after = geom.data.slice(endIndex);\n geom.data = before.concat(after);\n\n // Need to offset any remaining indices as we have\n // modified the data buffer\n offset += endIndex - startIndex;\n\n // Do not add this index to the output and process next shape\n continue;\n }\n\n if (ccw === undefined) ccw = area < 0;\n\n if (ccw === area < 0) {\n if (polygon) {\n areas.push(ringAreas);\n polygons.push(polygon);\n }\n polygon = [startIndex];\n ringAreas = [area];\n } else {\n // @ts-ignore\n ringAreas.push(area);\n // @ts-ignore\n polygon.push(startIndex);\n }\n }\n if (ringAreas) areas.push(ringAreas);\n if (polygon) polygons.push(polygon);\n\n return {areas, lines: polygons, data: geom.data};\n}\n\n// All code below is unchanged from the original Mapbox implemenation\n\nfunction readFeature(tag, feature, pbf) {\n if (tag === 1) feature.id = pbf.readVarint();\n else if (tag === 2) readTag(pbf, feature);\n else if (tag === 3) feature.type = pbf.readVarint();\n else if (tag === 4) feature._geometry = pbf.pos;\n}\n\nfunction readTag(pbf, feature) {\n const end = pbf.readVarint() + pbf.pos;\n\n while (pbf.pos < end) {\n const key = feature._keys[pbf.readVarint()];\n const value = feature._values[pbf.readVarint()];\n feature.properties[key] = value;\n }\n}\n"],"file":"vector-tile-feature.js"}
|
|
1
|
+
{"version":3,"sources":["../../../../src/lib/binary-vector-tile/vector-tile-feature.js"],"names":["getPolygonSignedArea","endPos","cmd","cmdLen","length","x","y","i","TEST_EXPORTS","classifyRings","VectorTileFeature","types","constructor","pbf","end","extent","keys","values","firstPassData","properties","type","id","_pbf","_geometry","_keys","_values","_firstPassData","readFields","readFeature","loadGeometry","pos","readVarint","lines","data","readSVarint","push","start","Error","_toBinaryCoordinates","transform","geom","coordLength","pointFeaturesCount","pointPositionsCount","lineFeaturesCount","linePathsCount","linePositionsCount","classified","polygonFeaturesCount","polygonObjectsCount","polygonRingsCount","polygonPositionsCount","result","geometry","toBinaryCoordinates","options","z","size","Math","pow","x0","y0","project","j","jl","y2","PI","atan","exp","len","areas","polygons","ringAreas","polygon","ccw","offset","startIndex","endIndex","shape","slice","area","before","after","concat","undefined","tag","feature","readTag","key","value"],"mappings":"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","sourcesContent":["// This code is forked from https://github.com/mapbox/vector-tile-js under BSD 3-clause license.\n/* eslint-disable */\n\nimport {getPolygonSignedArea} from '@math.gl/polygon';\n\n// Reduce GC by reusing variables\nlet endPos, cmd, cmdLen, length, x, y, i;\n\nexport const TEST_EXPORTS = {\n classifyRings\n};\n\nexport default class VectorTileFeature {\n static get types() {\n return ['Unknown', 'Point', 'LineString', 'Polygon'];\n }\n\n constructor(pbf, end, extent, keys, values, firstPassData) {\n // Public\n this.properties = {};\n this.extent = extent;\n this.type = 0;\n this.id = null;\n\n // Private\n this._pbf = pbf;\n this._geometry = -1;\n this._keys = keys;\n this._values = values;\n this._firstPassData = firstPassData;\n\n pbf.readFields(readFeature, this, end);\n }\n\n // eslint-disable-next-line complexity, max-statements\n loadGeometry() {\n const pbf = this._pbf;\n pbf.pos = this._geometry;\n\n endPos = pbf.readVarint() + pbf.pos;\n cmd = 1;\n length = 0;\n x = 0;\n y = 0;\n i = 0;\n\n // Note: I attempted to replace the `data` array with a\n // Float32Array, but performance was worse, both using\n // `set()` and direct index access. Also, we cannot\n // know how large the buffer should be, so it would\n // increase memory usage\n const lines = []; // Indices where lines start\n const data = []; // Flat array of coordinate data\n\n while (pbf.pos < endPos) {\n if (length <= 0) {\n cmdLen = pbf.readVarint();\n cmd = cmdLen & 0x7;\n length = cmdLen >> 3;\n }\n\n length--;\n\n if (cmd === 1 || cmd === 2) {\n x += pbf.readSVarint();\n y += pbf.readSVarint();\n\n if (cmd === 1) {\n // New line\n lines.push(i);\n }\n data.push(x, y);\n i += 2;\n } else if (cmd === 7) {\n // Workaround for https://github.com/mapbox/mapnik-vector-tile/issues/90\n if (i > 0) {\n const start = lines[lines.length - 1]; // start index of polygon\n data.push(data[start], data[start + 1]); // closePolygon\n i += 2;\n }\n } else {\n throw new Error(`unknown command ${cmd}`);\n }\n }\n\n return {data, lines};\n }\n\n _toBinaryCoordinates(transform) {\n // Expands the protobuf data to an intermediate `lines`\n // data format, which maps closely to the binary data buffers.\n // It is similar to GeoJSON, but rather than storing the coordinates\n // in multidimensional arrays, we have a 1D `data` with all the\n // coordinates, and then index into this using the `lines`\n // parameter, e.g.\n //\n // geometry: {\n // type: 'Point', data: [1,2], lines: [0]\n // }\n // geometry: {\n // type: 'LineString', data: [1,2,3,4,...], lines: [0]\n // }\n // geometry: {\n // type: 'Polygon', data: [1,2,3,4,...], lines: [[0, 2]]\n // }\n // Thus the lines member lets us look up the relevant range\n // from the data array.\n // The Multi* versions of the above types share the same data\n // structure, just with multiple elements in the lines array\n let geom = this.loadGeometry();\n\n // Apply the supplied transformation to data\n transform(geom.data, this);\n\n const coordLength = 2;\n\n switch (this.type) {\n case 1: // Point\n this._firstPassData.pointFeaturesCount++;\n this._firstPassData.pointPositionsCount += geom.lines.length;\n break;\n\n case 2: // LineString\n this._firstPassData.lineFeaturesCount++;\n this._firstPassData.linePathsCount += geom.lines.length;\n this._firstPassData.linePositionsCount += geom.data.length / coordLength;\n break;\n\n case 3: // Polygon\n const classified = classifyRings(geom);\n\n // Unlike Point & LineString geom.lines is a 2D array, thanks\n // to the classifyRings method\n this._firstPassData.polygonFeaturesCount++;\n this._firstPassData.polygonObjectsCount += classified.lines.length;\n\n for (const lines of classified.lines) {\n this._firstPassData.polygonRingsCount += lines.length;\n }\n this._firstPassData.polygonPositionsCount += classified.data.length / coordLength;\n\n // @ts-ignore\n geom = classified;\n break;\n }\n\n geom.type = VectorTileFeature.types[this.type];\n if (geom.lines.length > 1) {\n geom.type = `Multi${geom.type}`;\n }\n\n const result = {\n type: 'Feature',\n geometry: geom,\n properties: this.properties\n };\n\n if (this.id !== null) {\n result.id = this.id;\n }\n\n return result;\n }\n\n toBinaryCoordinates(options) {\n if (typeof options === 'function') {\n return this._toBinaryCoordinates(options);\n }\n const {x, y, z} = options;\n const size = this.extent * Math.pow(2, z);\n const x0 = this.extent * x;\n const y0 = this.extent * y;\n\n function project(data) {\n for (let j = 0, jl = data.length; j < jl; j += 2) {\n data[j] = ((data[j] + x0) * 360) / size - 180;\n const y2 = 180 - ((data[j + 1] + y0) * 360) / size;\n data[j + 1] = (360 / Math.PI) * Math.atan(Math.exp((y2 * Math.PI) / 180)) - 90;\n }\n }\n return this._toBinaryCoordinates(project);\n }\n}\n\n/**\n * Classifies an array of rings into polygons with outer rings and holes\n * The function also detects holes which have zero area and\n * removes them. In doing so it modifies the input\n * `geom.data` array to remove the unneeded data\n */\nfunction classifyRings(geom) {\n const len = geom.lines.length;\n\n if (len <= 1) {\n return {\n data: geom.data,\n areas: [[getPolygonSignedArea(geom.data)]],\n lines: [geom.lines]\n };\n }\n\n const areas = [];\n const polygons = [];\n let ringAreas;\n let polygon;\n let ccw;\n let offset = 0;\n\n for (let i = 0, startIndex, endIndex; i < len; i++) {\n startIndex = geom.lines[i] - offset;\n\n endIndex = geom.lines[i + 1] - offset || geom.data.length;\n const shape = geom.data.slice(startIndex, endIndex);\n const area = getPolygonSignedArea(shape);\n\n if (area === 0) {\n // This polygon has no area, so remove it from the shape\n // Remove the section from the data array\n const before = geom.data.slice(0, startIndex);\n const after = geom.data.slice(endIndex);\n geom.data = before.concat(after);\n\n // Need to offset any remaining indices as we have\n // modified the data buffer\n offset += endIndex - startIndex;\n\n // Do not add this index to the output and process next shape\n continue;\n }\n\n if (ccw === undefined) ccw = area < 0;\n\n if (ccw === area < 0) {\n if (polygon) {\n areas.push(ringAreas);\n polygons.push(polygon);\n }\n polygon = [startIndex];\n ringAreas = [area];\n } else {\n // @ts-ignore\n ringAreas.push(area);\n // @ts-ignore\n polygon.push(startIndex);\n }\n }\n if (ringAreas) areas.push(ringAreas);\n if (polygon) polygons.push(polygon);\n\n return {areas, lines: polygons, data: geom.data};\n}\n\n// All code below is unchanged from the original Mapbox implemenation\n\nfunction readFeature(tag, feature, pbf) {\n if (tag === 1) feature.id = pbf.readVarint();\n else if (tag === 2) readTag(pbf, feature);\n else if (tag === 3) feature.type = pbf.readVarint();\n else if (tag === 4) feature._geometry = pbf.pos;\n}\n\nfunction readTag(pbf, feature) {\n const end = pbf.readVarint() + pbf.pos;\n\n while (pbf.pos < end) {\n const key = feature._keys[pbf.readVarint()];\n const value = feature._values[pbf.readVarint()];\n feature.properties[key] = value;\n }\n}\n"],"file":"vector-tile-feature.js"}
|
|
@@ -50,7 +50,7 @@ export default class VectorTileFeature {
|
|
|
50
50
|
line.push(line[0].slice());
|
|
51
51
|
}
|
|
52
52
|
} else {
|
|
53
|
-
throw new Error(
|
|
53
|
+
throw new Error("unknown command ".concat(cmd));
|
|
54
54
|
}
|
|
55
55
|
}
|
|
56
56
|
|
|
@@ -88,7 +88,7 @@ export default class VectorTileFeature {
|
|
|
88
88
|
if (y < y1) y1 = y;
|
|
89
89
|
if (y > y2) y2 = y;
|
|
90
90
|
} else if (cmd !== 7) {
|
|
91
|
-
throw new Error(
|
|
91
|
+
throw new Error("unknown command ".concat(cmd));
|
|
92
92
|
}
|
|
93
93
|
}
|
|
94
94
|
|
|
@@ -135,7 +135,7 @@ export default class VectorTileFeature {
|
|
|
135
135
|
if (coords.length === 1) {
|
|
136
136
|
coords = coords[0];
|
|
137
137
|
} else {
|
|
138
|
-
type =
|
|
138
|
+
type = "Multi".concat(type);
|
|
139
139
|
}
|
|
140
140
|
|
|
141
141
|
const result = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/lib/mapbox-vector-tile/vector-tile-feature.js"],"names":["VectorTileFeature","types","constructor","pbf","end","extent","keys","values","properties","type","id","_pbf","_geometry","_keys","_values","readFields","readFeature","loadGeometry","pos","readVarint","cmd","length","x","y","lines","line","cmdLen","readSVarint","push","slice","Error","bbox","x1","Infinity","x2","y1","y2","_toGeoJSON","transform","coords","i","j","points","classifyRings","result","geometry","coordinates","toGeoJSON","options","z","size","Math","pow","x0","y0","project","p","PI","atan","exp","rings","len","polygons","polygon","ccw","area","signedArea","undefined","ring","sum","p1","p2","tag","feature","readTag","key","value"],"mappings":"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","sourcesContent":["// This code is forked from https://github.com/mapbox/vector-tile-js under BSD 3-clause license.\n/* eslint-disable */\n\nexport default class VectorTileFeature {\n static get types() {\n return ['Unknown', 'Point', 'LineString', 'Polygon'];\n }\n\n constructor(pbf, end, extent, keys, values) {\n // Public\n this.properties = {};\n this.extent = extent;\n this.type = 0;\n this.id = null;\n\n // Private\n this._pbf = pbf;\n this._geometry = -1;\n this._keys = keys;\n this._values = values;\n\n pbf.readFields(readFeature, this, end);\n }\n\n // eslint-disable-next-line complexity, max-statements\n loadGeometry() {\n const pbf = this._pbf;\n pbf.pos = this._geometry;\n\n const end = pbf.readVarint() + pbf.pos;\n let cmd = 1;\n let length = 0;\n let x = 0;\n let y = 0;\n const lines = [];\n let line;\n\n while (pbf.pos < end) {\n if (length <= 0) {\n const cmdLen = pbf.readVarint();\n cmd = cmdLen & 0x7;\n length = cmdLen >> 3;\n }\n\n length--;\n\n if (cmd === 1 || cmd === 2) {\n x += pbf.readSVarint();\n y += pbf.readSVarint();\n\n if (cmd === 1) {\n // moveTo\n if (line) lines.push(line);\n line = [];\n }\n // @ts-ignore\n line.push([x, y]);\n } else if (cmd === 7) {\n // Workaround for https://github.com/mapbox/mapnik-vector-tile/issues/90\n if (line) {\n line.push(line[0].slice()); // closePolygon\n }\n } else {\n throw new Error(`unknown command ${cmd}`);\n }\n }\n\n if (line) lines.push(line);\n\n return lines;\n }\n\n // eslint-disable-next-line max-statements\n bbox() {\n const pbf = this._pbf;\n pbf.pos = this._geometry;\n\n const end = pbf.readVarint() + pbf.pos;\n let cmd = 1;\n let length = 0;\n let x = 0;\n let y = 0;\n let x1 = Infinity;\n let x2 = -Infinity;\n let y1 = Infinity;\n let y2 = -Infinity;\n\n while (pbf.pos < end) {\n if (length <= 0) {\n const cmdLen = pbf.readVarint();\n cmd = cmdLen & 0x7;\n length = cmdLen >> 3;\n }\n\n length--;\n\n if (cmd === 1 || cmd === 2) {\n x += pbf.readSVarint();\n y += pbf.readSVarint();\n if (x < x1) x1 = x;\n if (x > x2) x2 = x;\n if (y < y1) y1 = y;\n if (y > y2) y2 = y;\n } else if (cmd !== 7) {\n throw new Error(`unknown command ${cmd}`);\n }\n }\n\n return [x1, y1, x2, y2];\n }\n\n _toGeoJSON(transform) {\n let coords = this.loadGeometry();\n let type = VectorTileFeature.types[this.type];\n let i;\n let j;\n\n switch (this.type) {\n case 1:\n var points = [];\n for (i = 0; i < coords.length; i++) {\n points[i] = coords[i][0];\n }\n coords = points;\n transform(coords, this);\n break;\n\n case 2:\n for (i = 0; i < coords.length; i++) {\n transform(coords[i], this);\n }\n break;\n\n case 3:\n coords = classifyRings(coords);\n for (i = 0; i < coords.length; i++) {\n for (j = 0; j < coords[i].length; j++) {\n transform(coords[i][j], this);\n }\n }\n break;\n }\n\n if (coords.length === 1) {\n coords = coords[0];\n } else {\n type = `Multi${type}`;\n }\n\n const result = {\n type: 'Feature',\n geometry: {\n type,\n coordinates: coords\n },\n properties: this.properties\n };\n\n if (this.id !== null) {\n result.id = this.id;\n }\n\n return result;\n }\n\n toGeoJSON(options) {\n if (typeof options === 'function') {\n return this._toGeoJSON(options);\n }\n const {x, y, z} = options;\n const size = this.extent * Math.pow(2, z);\n const x0 = this.extent * x;\n const y0 = this.extent * y;\n\n function project(line) {\n for (let j = 0; j < line.length; j++) {\n const p = line[j];\n p[0] = ((p[0] + x0) * 360) / size - 180;\n const y2 = 180 - ((p[1] + y0) * 360) / size;\n p[1] = (360 / Math.PI) * Math.atan(Math.exp((y2 * Math.PI) / 180)) - 90;\n }\n }\n return this._toGeoJSON(project);\n }\n}\n\n/**\n * Classifies an array of rings into polygons with outer rings and holes\n */\n\nfunction classifyRings(rings) {\n const len = rings.length;\n\n if (len <= 1) return [rings];\n\n const polygons = [];\n let polygon;\n let ccw;\n\n for (let i = 0; i < len; i++) {\n const area = signedArea(rings[i]);\n if (area === 0) continue;\n\n if (ccw === undefined) ccw = area < 0;\n\n if (ccw === area < 0) {\n if (polygon) polygons.push(polygon);\n polygon = [rings[i]];\n } else {\n // @ts-ignore\n polygon.push(rings[i]);\n }\n }\n if (polygon) polygons.push(polygon);\n\n return polygons;\n}\n\nfunction signedArea(ring) {\n let sum = 0;\n for (let i = 0, j = ring.length - 1, p1, p2; i < ring.length; j = i++) {\n p1 = ring[i];\n p2 = ring[j];\n sum += (p2[0] - p1[0]) * (p1[1] + p2[1]);\n }\n return sum;\n}\n\nfunction readFeature(tag, feature, pbf) {\n if (tag === 1) feature.id = pbf.readVarint();\n else if (tag === 2) readTag(pbf, feature);\n else if (tag === 3) feature.type = pbf.readVarint();\n else if (tag === 4) feature._geometry = pbf.pos;\n}\n\nfunction readTag(pbf, feature) {\n const end = pbf.readVarint() + pbf.pos;\n\n while (pbf.pos < end) {\n const key = feature._keys[pbf.readVarint()];\n const value = feature._values[pbf.readVarint()];\n feature.properties[key] = value;\n }\n}\n"],"file":"vector-tile-feature.js"}
|
|
1
|
+
{"version":3,"sources":["../../../../src/lib/mapbox-vector-tile/vector-tile-feature.js"],"names":["VectorTileFeature","types","constructor","pbf","end","extent","keys","values","properties","type","id","_pbf","_geometry","_keys","_values","readFields","readFeature","loadGeometry","pos","readVarint","cmd","length","x","y","lines","line","cmdLen","readSVarint","push","slice","Error","bbox","x1","Infinity","x2","y1","y2","_toGeoJSON","transform","coords","i","j","points","classifyRings","result","geometry","coordinates","toGeoJSON","options","z","size","Math","pow","x0","y0","project","p","PI","atan","exp","rings","len","polygons","polygon","ccw","area","signedArea","undefined","ring","sum","p1","p2","tag","feature","readTag","key","value"],"mappings":"AAGA,eAAe,MAAMA,iBAAN,CAAwB;AACrB,aAALC,KAAK,GAAG;AACjB,WAAO,CAAC,SAAD,EAAY,OAAZ,EAAqB,YAArB,EAAmC,SAAnC,CAAP;AACD;;AAEDC,EAAAA,WAAW,CAACC,GAAD,EAAMC,GAAN,EAAWC,MAAX,EAAmBC,IAAnB,EAAyBC,MAAzB,EAAiC;AAE1C,SAAKC,UAAL,GAAkB,EAAlB;AACA,SAAKH,MAAL,GAAcA,MAAd;AACA,SAAKI,IAAL,GAAY,CAAZ;AACA,SAAKC,EAAL,GAAU,IAAV;AAGA,SAAKC,IAAL,GAAYR,GAAZ;AACA,SAAKS,SAAL,GAAiB,CAAC,CAAlB;AACA,SAAKC,KAAL,GAAaP,IAAb;AACA,SAAKQ,OAAL,GAAeP,MAAf;AAEAJ,IAAAA,GAAG,CAACY,UAAJ,CAAeC,WAAf,EAA4B,IAA5B,EAAkCZ,GAAlC;AACD;;AAGDa,EAAAA,YAAY,GAAG;AACb,UAAMd,GAAG,GAAG,KAAKQ,IAAjB;AACAR,IAAAA,GAAG,CAACe,GAAJ,GAAU,KAAKN,SAAf;AAEA,UAAMR,GAAG,GAAGD,GAAG,CAACgB,UAAJ,KAAmBhB,GAAG,CAACe,GAAnC;AACA,QAAIE,GAAG,GAAG,CAAV;AACA,QAAIC,MAAM,GAAG,CAAb;AACA,QAAIC,CAAC,GAAG,CAAR;AACA,QAAIC,CAAC,GAAG,CAAR;AACA,UAAMC,KAAK,GAAG,EAAd;AACA,QAAIC,IAAJ;;AAEA,WAAOtB,GAAG,CAACe,GAAJ,GAAUd,GAAjB,EAAsB;AACpB,UAAIiB,MAAM,IAAI,CAAd,EAAiB;AACf,cAAMK,MAAM,GAAGvB,GAAG,CAACgB,UAAJ,EAAf;AACAC,QAAAA,GAAG,GAAGM,MAAM,GAAG,GAAf;AACAL,QAAAA,MAAM,GAAGK,MAAM,IAAI,CAAnB;AACD;;AAEDL,MAAAA,MAAM;;AAEN,UAAID,GAAG,KAAK,CAAR,IAAaA,GAAG,KAAK,CAAzB,EAA4B;AAC1BE,QAAAA,CAAC,IAAInB,GAAG,CAACwB,WAAJ,EAAL;AACAJ,QAAAA,CAAC,IAAIpB,GAAG,CAACwB,WAAJ,EAAL;;AAEA,YAAIP,GAAG,KAAK,CAAZ,EAAe;AAEb,cAAIK,IAAJ,EAAUD,KAAK,CAACI,IAAN,CAAWH,IAAX;AACVA,UAAAA,IAAI,GAAG,EAAP;AACD;;AAEDA,QAAAA,IAAI,CAACG,IAAL,CAAU,CAACN,CAAD,EAAIC,CAAJ,CAAV;AACD,OAXD,MAWO,IAAIH,GAAG,KAAK,CAAZ,EAAe;AAEpB,YAAIK,IAAJ,EAAU;AACRA,UAAAA,IAAI,CAACG,IAAL,CAAUH,IAAI,CAAC,CAAD,CAAJ,CAAQI,KAAR,EAAV;AACD;AACF,OALM,MAKA;AACL,cAAM,IAAIC,KAAJ,2BAA6BV,GAA7B,EAAN;AACD;AACF;;AAED,QAAIK,IAAJ,EAAUD,KAAK,CAACI,IAAN,CAAWH,IAAX;AAEV,WAAOD,KAAP;AACD;;AAGDO,EAAAA,IAAI,GAAG;AACL,UAAM5B,GAAG,GAAG,KAAKQ,IAAjB;AACAR,IAAAA,GAAG,CAACe,GAAJ,GAAU,KAAKN,SAAf;AAEA,UAAMR,GAAG,GAAGD,GAAG,CAACgB,UAAJ,KAAmBhB,GAAG,CAACe,GAAnC;AACA,QAAIE,GAAG,GAAG,CAAV;AACA,QAAIC,MAAM,GAAG,CAAb;AACA,QAAIC,CAAC,GAAG,CAAR;AACA,QAAIC,CAAC,GAAG,CAAR;AACA,QAAIS,EAAE,GAAGC,QAAT;AACA,QAAIC,EAAE,GAAG,CAACD,QAAV;AACA,QAAIE,EAAE,GAAGF,QAAT;AACA,QAAIG,EAAE,GAAG,CAACH,QAAV;;AAEA,WAAO9B,GAAG,CAACe,GAAJ,GAAUd,GAAjB,EAAsB;AACpB,UAAIiB,MAAM,IAAI,CAAd,EAAiB;AACf,cAAMK,MAAM,GAAGvB,GAAG,CAACgB,UAAJ,EAAf;AACAC,QAAAA,GAAG,GAAGM,MAAM,GAAG,GAAf;AACAL,QAAAA,MAAM,GAAGK,MAAM,IAAI,CAAnB;AACD;;AAEDL,MAAAA,MAAM;;AAEN,UAAID,GAAG,KAAK,CAAR,IAAaA,GAAG,KAAK,CAAzB,EAA4B;AAC1BE,QAAAA,CAAC,IAAInB,GAAG,CAACwB,WAAJ,EAAL;AACAJ,QAAAA,CAAC,IAAIpB,GAAG,CAACwB,WAAJ,EAAL;AACA,YAAIL,CAAC,GAAGU,EAAR,EAAYA,EAAE,GAAGV,CAAL;AACZ,YAAIA,CAAC,GAAGY,EAAR,EAAYA,EAAE,GAAGZ,CAAL;AACZ,YAAIC,CAAC,GAAGY,EAAR,EAAYA,EAAE,GAAGZ,CAAL;AACZ,YAAIA,CAAC,GAAGa,EAAR,EAAYA,EAAE,GAAGb,CAAL;AACb,OAPD,MAOO,IAAIH,GAAG,KAAK,CAAZ,EAAe;AACpB,cAAM,IAAIU,KAAJ,2BAA6BV,GAA7B,EAAN;AACD;AACF;;AAED,WAAO,CAACY,EAAD,EAAKG,EAAL,EAASD,EAAT,EAAaE,EAAb,CAAP;AACD;;AAEDC,EAAAA,UAAU,CAACC,SAAD,EAAY;AACpB,QAAIC,MAAM,GAAG,KAAKtB,YAAL,EAAb;AACA,QAAIR,IAAI,GAAGT,iBAAiB,CAACC,KAAlB,CAAwB,KAAKQ,IAA7B,CAAX;AACA,QAAI+B,CAAJ;AACA,QAAIC,CAAJ;;AAEA,YAAQ,KAAKhC,IAAb;AACE,WAAK,CAAL;AACE,YAAIiC,MAAM,GAAG,EAAb;;AACA,aAAKF,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGD,MAAM,CAAClB,MAAvB,EAA+BmB,CAAC,EAAhC,EAAoC;AAClCE,UAAAA,MAAM,CAACF,CAAD,CAAN,GAAYD,MAAM,CAACC,CAAD,CAAN,CAAU,CAAV,CAAZ;AACD;;AACDD,QAAAA,MAAM,GAAGG,MAAT;AACAJ,QAAAA,SAAS,CAACC,MAAD,EAAS,IAAT,CAAT;AACA;;AAEF,WAAK,CAAL;AACE,aAAKC,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGD,MAAM,CAAClB,MAAvB,EAA+BmB,CAAC,EAAhC,EAAoC;AAClCF,UAAAA,SAAS,CAACC,MAAM,CAACC,CAAD,CAAP,EAAY,IAAZ,CAAT;AACD;;AACD;;AAEF,WAAK,CAAL;AACED,QAAAA,MAAM,GAAGI,aAAa,CAACJ,MAAD,CAAtB;;AACA,aAAKC,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGD,MAAM,CAAClB,MAAvB,EAA+BmB,CAAC,EAAhC,EAAoC;AAClC,eAAKC,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGF,MAAM,CAACC,CAAD,CAAN,CAAUnB,MAA1B,EAAkCoB,CAAC,EAAnC,EAAuC;AACrCH,YAAAA,SAAS,CAACC,MAAM,CAACC,CAAD,CAAN,CAAUC,CAAV,CAAD,EAAe,IAAf,CAAT;AACD;AACF;;AACD;AAvBJ;;AA0BA,QAAIF,MAAM,CAAClB,MAAP,KAAkB,CAAtB,EAAyB;AACvBkB,MAAAA,MAAM,GAAGA,MAAM,CAAC,CAAD,CAAf;AACD,KAFD,MAEO;AACL9B,MAAAA,IAAI,kBAAWA,IAAX,CAAJ;AACD;;AAED,UAAMmC,MAAM,GAAG;AACbnC,MAAAA,IAAI,EAAE,SADO;AAEboC,MAAAA,QAAQ,EAAE;AACRpC,QAAAA,IADQ;AAERqC,QAAAA,WAAW,EAAEP;AAFL,OAFG;AAMb/B,MAAAA,UAAU,EAAE,KAAKA;AANJ,KAAf;;AASA,QAAI,KAAKE,EAAL,KAAY,IAAhB,EAAsB;AACpBkC,MAAAA,MAAM,CAAClC,EAAP,GAAY,KAAKA,EAAjB;AACD;;AAED,WAAOkC,MAAP;AACD;;AAEDG,EAAAA,SAAS,CAACC,OAAD,EAAU;AACjB,QAAI,OAAOA,OAAP,KAAmB,UAAvB,EAAmC;AACjC,aAAO,KAAKX,UAAL,CAAgBW,OAAhB,CAAP;AACD;;AACD,UAAM;AAAC1B,MAAAA,CAAD;AAAIC,MAAAA,CAAJ;AAAO0B,MAAAA;AAAP,QAAYD,OAAlB;AACA,UAAME,IAAI,GAAG,KAAK7C,MAAL,GAAc8C,IAAI,CAACC,GAAL,CAAS,CAAT,EAAYH,CAAZ,CAA3B;AACA,UAAMI,EAAE,GAAG,KAAKhD,MAAL,GAAciB,CAAzB;AACA,UAAMgC,EAAE,GAAG,KAAKjD,MAAL,GAAckB,CAAzB;;AAEA,aAASgC,OAAT,CAAiB9B,IAAjB,EAAuB;AACrB,WAAK,IAAIgB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGhB,IAAI,CAACJ,MAAzB,EAAiCoB,CAAC,EAAlC,EAAsC;AACpC,cAAMe,CAAC,GAAG/B,IAAI,CAACgB,CAAD,CAAd;AACAe,QAAAA,CAAC,CAAC,CAAD,CAAD,GAAQ,CAACA,CAAC,CAAC,CAAD,CAAD,GAAOH,EAAR,IAAc,GAAf,GAAsBH,IAAtB,GAA6B,GAApC;AACA,cAAMd,EAAE,GAAG,MAAO,CAACoB,CAAC,CAAC,CAAD,CAAD,GAAOF,EAAR,IAAc,GAAf,GAAsBJ,IAAvC;AACAM,QAAAA,CAAC,CAAC,CAAD,CAAD,GAAQ,MAAML,IAAI,CAACM,EAAZ,GAAkBN,IAAI,CAACO,IAAL,CAAUP,IAAI,CAACQ,GAAL,CAAUvB,EAAE,GAAGe,IAAI,CAACM,EAAX,GAAiB,GAA1B,CAAV,CAAlB,GAA8D,EAArE;AACD;AACF;;AACD,WAAO,KAAKpB,UAAL,CAAgBkB,OAAhB,CAAP;AACD;;AApLoC;;AA2LvC,SAASZ,aAAT,CAAuBiB,KAAvB,EAA8B;AAC5B,QAAMC,GAAG,GAAGD,KAAK,CAACvC,MAAlB;AAEA,MAAIwC,GAAG,IAAI,CAAX,EAAc,OAAO,CAACD,KAAD,CAAP;AAEd,QAAME,QAAQ,GAAG,EAAjB;AACA,MAAIC,OAAJ;AACA,MAAIC,GAAJ;;AAEA,OAAK,IAAIxB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGqB,GAApB,EAAyBrB,CAAC,EAA1B,EAA8B;AAC5B,UAAMyB,IAAI,GAAGC,UAAU,CAACN,KAAK,CAACpB,CAAD,CAAN,CAAvB;AACA,QAAIyB,IAAI,KAAK,CAAb,EAAgB;AAEhB,QAAID,GAAG,KAAKG,SAAZ,EAAuBH,GAAG,GAAGC,IAAI,GAAG,CAAb;;AAEvB,QAAID,GAAG,KAAKC,IAAI,GAAG,CAAnB,EAAsB;AACpB,UAAIF,OAAJ,EAAaD,QAAQ,CAAClC,IAAT,CAAcmC,OAAd;AACbA,MAAAA,OAAO,GAAG,CAACH,KAAK,CAACpB,CAAD,CAAN,CAAV;AACD,KAHD,MAGO;AAELuB,MAAAA,OAAO,CAACnC,IAAR,CAAagC,KAAK,CAACpB,CAAD,CAAlB;AACD;AACF;;AACD,MAAIuB,OAAJ,EAAaD,QAAQ,CAAClC,IAAT,CAAcmC,OAAd;AAEb,SAAOD,QAAP;AACD;;AAED,SAASI,UAAT,CAAoBE,IAApB,EAA0B;AACxB,MAAIC,GAAG,GAAG,CAAV;;AACA,OAAK,IAAI7B,CAAC,GAAG,CAAR,EAAWC,CAAC,GAAG2B,IAAI,CAAC/C,MAAL,GAAc,CAA7B,EAAgCiD,EAAhC,EAAoCC,EAAzC,EAA6C/B,CAAC,GAAG4B,IAAI,CAAC/C,MAAtD,EAA8DoB,CAAC,GAAGD,CAAC,EAAnE,EAAuE;AACrE8B,IAAAA,EAAE,GAAGF,IAAI,CAAC5B,CAAD,CAAT;AACA+B,IAAAA,EAAE,GAAGH,IAAI,CAAC3B,CAAD,CAAT;AACA4B,IAAAA,GAAG,IAAI,CAACE,EAAE,CAAC,CAAD,CAAF,GAAQD,EAAE,CAAC,CAAD,CAAX,KAAmBA,EAAE,CAAC,CAAD,CAAF,GAAQC,EAAE,CAAC,CAAD,CAA7B,CAAP;AACD;;AACD,SAAOF,GAAP;AACD;;AAED,SAASrD,WAAT,CAAqBwD,GAArB,EAA0BC,OAA1B,EAAmCtE,GAAnC,EAAwC;AACtC,MAAIqE,GAAG,KAAK,CAAZ,EAAeC,OAAO,CAAC/D,EAAR,GAAaP,GAAG,CAACgB,UAAJ,EAAb,CAAf,KACK,IAAIqD,GAAG,KAAK,CAAZ,EAAeE,OAAO,CAACvE,GAAD,EAAMsE,OAAN,CAAP,CAAf,KACA,IAAID,GAAG,KAAK,CAAZ,EAAeC,OAAO,CAAChE,IAAR,GAAeN,GAAG,CAACgB,UAAJ,EAAf,CAAf,KACA,IAAIqD,GAAG,KAAK,CAAZ,EAAeC,OAAO,CAAC7D,SAAR,GAAoBT,GAAG,CAACe,GAAxB;AACrB;;AAED,SAASwD,OAAT,CAAiBvE,GAAjB,EAAsBsE,OAAtB,EAA+B;AAC7B,QAAMrE,GAAG,GAAGD,GAAG,CAACgB,UAAJ,KAAmBhB,GAAG,CAACe,GAAnC;;AAEA,SAAOf,GAAG,CAACe,GAAJ,GAAUd,GAAjB,EAAsB;AACpB,UAAMuE,GAAG,GAAGF,OAAO,CAAC5D,KAAR,CAAcV,GAAG,CAACgB,UAAJ,EAAd,CAAZ;;AACA,UAAMyD,KAAK,GAAGH,OAAO,CAAC3D,OAAR,CAAgBX,GAAG,CAACgB,UAAJ,EAAhB,CAAd;;AACAsD,IAAAA,OAAO,CAACjE,UAAR,CAAmBmE,GAAnB,IAA0BC,KAA1B;AACD;AACF","sourcesContent":["// This code is forked from https://github.com/mapbox/vector-tile-js under BSD 3-clause license.\n/* eslint-disable */\n\nexport default class VectorTileFeature {\n static get types() {\n return ['Unknown', 'Point', 'LineString', 'Polygon'];\n }\n\n constructor(pbf, end, extent, keys, values) {\n // Public\n this.properties = {};\n this.extent = extent;\n this.type = 0;\n this.id = null;\n\n // Private\n this._pbf = pbf;\n this._geometry = -1;\n this._keys = keys;\n this._values = values;\n\n pbf.readFields(readFeature, this, end);\n }\n\n // eslint-disable-next-line complexity, max-statements\n loadGeometry() {\n const pbf = this._pbf;\n pbf.pos = this._geometry;\n\n const end = pbf.readVarint() + pbf.pos;\n let cmd = 1;\n let length = 0;\n let x = 0;\n let y = 0;\n const lines = [];\n let line;\n\n while (pbf.pos < end) {\n if (length <= 0) {\n const cmdLen = pbf.readVarint();\n cmd = cmdLen & 0x7;\n length = cmdLen >> 3;\n }\n\n length--;\n\n if (cmd === 1 || cmd === 2) {\n x += pbf.readSVarint();\n y += pbf.readSVarint();\n\n if (cmd === 1) {\n // moveTo\n if (line) lines.push(line);\n line = [];\n }\n // @ts-ignore\n line.push([x, y]);\n } else if (cmd === 7) {\n // Workaround for https://github.com/mapbox/mapnik-vector-tile/issues/90\n if (line) {\n line.push(line[0].slice()); // closePolygon\n }\n } else {\n throw new Error(`unknown command ${cmd}`);\n }\n }\n\n if (line) lines.push(line);\n\n return lines;\n }\n\n // eslint-disable-next-line max-statements\n bbox() {\n const pbf = this._pbf;\n pbf.pos = this._geometry;\n\n const end = pbf.readVarint() + pbf.pos;\n let cmd = 1;\n let length = 0;\n let x = 0;\n let y = 0;\n let x1 = Infinity;\n let x2 = -Infinity;\n let y1 = Infinity;\n let y2 = -Infinity;\n\n while (pbf.pos < end) {\n if (length <= 0) {\n const cmdLen = pbf.readVarint();\n cmd = cmdLen & 0x7;\n length = cmdLen >> 3;\n }\n\n length--;\n\n if (cmd === 1 || cmd === 2) {\n x += pbf.readSVarint();\n y += pbf.readSVarint();\n if (x < x1) x1 = x;\n if (x > x2) x2 = x;\n if (y < y1) y1 = y;\n if (y > y2) y2 = y;\n } else if (cmd !== 7) {\n throw new Error(`unknown command ${cmd}`);\n }\n }\n\n return [x1, y1, x2, y2];\n }\n\n _toGeoJSON(transform) {\n let coords = this.loadGeometry();\n let type = VectorTileFeature.types[this.type];\n let i;\n let j;\n\n switch (this.type) {\n case 1:\n var points = [];\n for (i = 0; i < coords.length; i++) {\n points[i] = coords[i][0];\n }\n coords = points;\n transform(coords, this);\n break;\n\n case 2:\n for (i = 0; i < coords.length; i++) {\n transform(coords[i], this);\n }\n break;\n\n case 3:\n coords = classifyRings(coords);\n for (i = 0; i < coords.length; i++) {\n for (j = 0; j < coords[i].length; j++) {\n transform(coords[i][j], this);\n }\n }\n break;\n }\n\n if (coords.length === 1) {\n coords = coords[0];\n } else {\n type = `Multi${type}`;\n }\n\n const result = {\n type: 'Feature',\n geometry: {\n type,\n coordinates: coords\n },\n properties: this.properties\n };\n\n if (this.id !== null) {\n result.id = this.id;\n }\n\n return result;\n }\n\n toGeoJSON(options) {\n if (typeof options === 'function') {\n return this._toGeoJSON(options);\n }\n const {x, y, z} = options;\n const size = this.extent * Math.pow(2, z);\n const x0 = this.extent * x;\n const y0 = this.extent * y;\n\n function project(line) {\n for (let j = 0; j < line.length; j++) {\n const p = line[j];\n p[0] = ((p[0] + x0) * 360) / size - 180;\n const y2 = 180 - ((p[1] + y0) * 360) / size;\n p[1] = (360 / Math.PI) * Math.atan(Math.exp((y2 * Math.PI) / 180)) - 90;\n }\n }\n return this._toGeoJSON(project);\n }\n}\n\n/**\n * Classifies an array of rings into polygons with outer rings and holes\n */\n\nfunction classifyRings(rings) {\n const len = rings.length;\n\n if (len <= 1) return [rings];\n\n const polygons = [];\n let polygon;\n let ccw;\n\n for (let i = 0; i < len; i++) {\n const area = signedArea(rings[i]);\n if (area === 0) continue;\n\n if (ccw === undefined) ccw = area < 0;\n\n if (ccw === area < 0) {\n if (polygon) polygons.push(polygon);\n polygon = [rings[i]];\n } else {\n // @ts-ignore\n polygon.push(rings[i]);\n }\n }\n if (polygon) polygons.push(polygon);\n\n return polygons;\n}\n\nfunction signedArea(ring) {\n let sum = 0;\n for (let i = 0, j = ring.length - 1, p1, p2; i < ring.length; j = i++) {\n p1 = ring[i];\n p2 = ring[j];\n sum += (p2[0] - p1[0]) * (p1[1] + p2[1]);\n }\n return sum;\n}\n\nfunction readFeature(tag, feature, pbf) {\n if (tag === 1) feature.id = pbf.readVarint();\n else if (tag === 2) readTag(pbf, feature);\n else if (tag === 3) feature.type = pbf.readVarint();\n else if (tag === 4) feature._geometry = pbf.pos;\n}\n\nfunction readTag(pbf, feature) {\n const end = pbf.readVarint() + pbf.pos;\n\n while (pbf.pos < end) {\n const key = feature._keys[pbf.readVarint()];\n const value = feature._values[pbf.readVarint()];\n feature.properties[key] = value;\n }\n}\n"],"file":"vector-tile-feature.js"}
|
package/dist/esm/mvt-loader.js
CHANGED