UNPKG

@kibeo/loaders.gl-mvt

Version:

Loader for Mapbox Vector Tiles

128 lines (99 loc) 4.84 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = parseMVT; var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _vectorTile = _interopRequireDefault(require("./mapbox-vector-tile/vector-tile")); var _vectorTile2 = _interopRequireDefault(require("./binary-vector-tile/vector-tile")); var _featuresToBinary = require("./binary-vector-tile/features-to-binary"); var _pbf = _interopRequireDefault(require("pbf")); 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; } 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; } function parseMVT(arrayBuffer, options) { options = normalizeOptions(options); var binary = options.gis.format === 'binary'; var features = []; var firstPassData = { pointPositionsCount: 0, pointFeaturesCount: 0, linePositionsCount: 0, linePathsCount: 0, lineFeaturesCount: 0, polygonPositionsCount: 0, polygonObjectsCount: 0, polygonRingsCount: 0, polygonFeaturesCount: 0 }; if (arrayBuffer.byteLength > 0) { var tile = binary ? new _vectorTile2.default(new _pbf.default(arrayBuffer)) : new _vectorTile.default(new _pbf.default(arrayBuffer)); var loaderOptions = options.mvt; var selectedLayers = Array.isArray(loaderOptions.layers) ? loaderOptions.layers : Object.keys(tile.layers); selectedLayers.forEach(function (layerName) { var vectorTileLayer = tile.layers[layerName]; var featureOptions = _objectSpread(_objectSpread({}, loaderOptions), {}, { layerName: layerName }); if (!vectorTileLayer) { return; } for (var i = 0; i < vectorTileLayer.length; i++) { var vectorTileFeature = vectorTileLayer.feature(i, firstPassData); var decodedFeature = binary ? getDecodedFeatureBinary(vectorTileFeature, featureOptions) : getDecodedFeature(vectorTileFeature, featureOptions); features.push(decodedFeature); } }); } if (binary) { var data = (0, _featuresToBinary.featuresToBinary)(features, firstPassData); data.byteLength = arrayBuffer.byteLength; return data; } return features; } function normalizeOptions(options) { options = _objectSpread(_objectSpread({}, options), {}, { mvt: options.mvt || {}, gis: options.gis || {} }); var wgs84Coordinates = options.coordinates === 'wgs84'; var _options = options, tileIndex = _options.tileIndex; var hasTileIndex = tileIndex && Number.isFinite(tileIndex.x) && Number.isFinite(tileIndex.y) && Number.isFinite(tileIndex.z); if (wgs84Coordinates && !hasTileIndex) { throw new Error('MVT Loader: WGS84 coordinates need tileIndex property. Check documentation.'); } return options; } function getDecodedFeature(feature) { var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; var decodedFeature = feature.toGeoJSON(options.coordinates === 'wgs84' ? options.tileIndex : transformToLocalCoordinates); if (options.layerProperty) { decodedFeature.properties[options.layerProperty] = options.layerName; } return decodedFeature; } function getDecodedFeatureBinary(feature) { var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; var decodedFeature = feature.toBinaryCoordinates(options.coordinates === 'wgs84' ? options.tileIndex : transformToLocalCoordinatesBinary); if (options.layerProperty) { decodedFeature.properties[options.layerProperty] = options.layerName; } return decodedFeature; } function transformToLocalCoordinates(line, feature) { var extent = feature.extent; for (var i = 0; i < line.length; i++) { var p = line[i]; p[0] /= extent; p[1] /= extent; } } function transformToLocalCoordinatesBinary(data, feature) { var extent = feature.extent; for (var i = 0, il = data.length; i < il; ++i) { data[i] /= extent; } } //# sourceMappingURL=parse-mvt.js.map