@loaders.gl/mvt
Version:
Loader for Mapbox Vector Tiles
77 lines (71 loc) • 2.35 kB
TypeScript
import type { FlatIndexedGeometry } from '@loaders.gl/schema';
import Protobuf from 'pbf';
type GeometryCommand = {
type: 'moveto' | 'lineto' | 'closepath';
x: number;
y: number;
};
export declare function makeMVTGeometryCommandIterator(pbf: Protobuf): IterableIterator<GeometryCommand>;
/**
* Creates a bounding box from the feature geometry at the current position
* @todo - Reparses the entire PBF geometry - replace with a generic bounding box calculation on parsed data?
*/
export declare function readBoundingBoxFromPBF(pbf: Protobuf): [number, number, number, number];
/**
* Extract intermediate Flat GeoJSON
* data format, which maps closely to the binary data buffers.
* It is similar to GeoJSON, but rather than storing the coordinates
* in multidimensional arrays, we have a 1D `data` with all the
* coordinates, and then index into this using the `indices`
* parameter, e.g.
*
* geometry: {
* type: 'Point', data: [1,2], indices: [0]
* }
* geometry: {
* type: 'LineString', data: [1,2,3,4,...], indices: [0]
* }
* geometry: {
* type: 'Polygon', data: [1,2,3,4,...], indices: [[0, 2]]
* }
* Thus the indices member lets us look up the relevant range
* from the data array.
* The Multi* versions of the above types share the same data
* structure, just with multiple elements in the indices array
*/
export declare function loadFlatGeometryFromPBF(pbf: Protobuf): FlatIndexedGeometry;
export {};
/**
* Load a GeoJSON style Geometry from the raw PBF
*
function readGeoJSONGeometryFromPBF(pbf): number[][][] {
const lines: number[][][] = [];
let line: number[][] | undefined;
for (const command of makeMVTGeometryCommandIterator(pbf)) {
switch (command.type) {
case 'moveto':
// moveTo
if (line) lines.push(line);
line = [];
if (line) line.push([command.x, command.y]);
break;
case 'lineto':
if (line) line.push([command.x, command.y]);
break;
case 'closepath':
// Workaround for https://github.com/mapbox/mapnik-vector-tile/issues/90
if (line) {
line.push(line[0].slice()); // closePolygon
}
break;
default:
// just for eslint
}
}
if (line) {
lines.push(line);
}
return lines;
}
*/
//# sourceMappingURL=parse-geometry-from-pbf.d.ts.map