@kibeo/loaders.gl-mvt
Version:
Loader for Mapbox Vector Tiles
128 lines (99 loc) • 4.84 kB
JavaScript
;
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