@maticoapp/deck.gl-pmtiles
Version:
This repo provides a typed Deck.gl layer and loader for PMTiles data. PMTiles data provides a serverless and compact way to store tile geospatial data. Combined with Deck.gl's rendering, this provides a flexible and powerful way to cheaply manage geospati
132 lines (127 loc) • 3.99 kB
TypeScript
import * as geojson from 'geojson';
import { Feature } from 'geojson';
import { MVTLayer, TileLayerProps } from '@deck.gl/geo-layers/typed';
import { DefaultProps } from '@deck.gl/core/typed';
import { GeoJsonLayerProps } from '@deck.gl/layers/typed';
import { BinaryFeatures } from '@loaders.gl/schema';
import { Loader, LoaderWithParser } from '@loaders.gl/loader-utils';
type TileJson = {
tilejson: string;
tiles: string[];
vector_layers: any[];
attribution?: string;
scheme?: string;
maxzoom?: number;
minzoom?: number;
version?: string;
};
/** Props added by the MVTLayer */
type _MVTLayerProps = {
/** Called if `data` is a TileJSON URL when it is successfully fetched. */
onDataLoad?: ((tilejson: TileJson | null) => void) | null;
/** Needed for highlighting a feature split across two or more tiles. */
uniqueIdProperty?: string;
/** A feature with ID corresponding to the supplied value will be highlighted. */
highlightedFeatureId?: string | null;
/**
* Use tile data in binary format.
*
* @default true
*/
binary?: boolean;
/**
* Loaders used to transform tiles into `data` property passed to `renderSubLayers`.
*
* @default [MVTWorkerLoader] from `@loaders.gl/mvt`
*/
loaders?: Loader[];
};
type GeoBoundingBox = {
west: number;
north: number;
east: number;
south: number;
};
type NonGeoBoundingBox = {
left: number;
top: number;
right: number;
bottom: number;
};
type TileBoundingBox = NonGeoBoundingBox | GeoBoundingBox;
type TileIndex = {
x: number;
y: number;
z: number;
};
type TileLoadProps = {
index: TileIndex;
id: string;
bbox: TileBoundingBox;
url?: string | null;
signal?: AbortSignal;
userData?: Record<string, any>;
zoom?: number;
};
type ParsedPmTile = Feature[] | BinaryFeatures;
type ExtraProps = {
raster?: boolean;
};
type _PMTLayerProps = _MVTLayerProps & ExtraProps;
type PmtLayerProps<DataT extends Feature = Feature> = _PMTLayerProps & GeoJsonLayerProps<DataT> & TileLayerProps<ParsedPmTile>;
declare class PMTLayer<DataT extends Feature = Feature, ExtraProps = {}> extends MVTLayer<DataT, ExtraProps> {
static layerName: string;
static defaultProps: DefaultProps<PmtLayerProps<Feature<geojson.Geometry, geojson.GeoJsonProperties>>>;
initializeState(): void;
getTileData(loadProps: TileLoadProps, iter?: number): Promise<ParsedPmTile>;
}
/**
* Worker loader for the Mapbox Vector Tile format
*/
declare const PMTWorkerLoader: Loader;
/**
* Loader for the Mapbox Vector Tile format
*/
declare const PMTLoader: LoaderWithParser;
type DataShapeNames = keyof DataShapes;
type DataShapes = {
binary: BinaryFeatures;
"binary-geometry": BinaryFeatures;
"columnar-table": {
shape: "columnar-table";
data: BinaryFeatures;
};
geojson: GeoJSON.FeatureCollection;
"geojson-row-table": {
shape: "geojson-row-table";
data: GeoJSON.FeatureCollection;
};
};
declare const useJoinLoader: ({ loader, shape, leftId, rightId, tableData, dataDict, dataMap, updateTriggers, }: {
loader: LoaderWithParser;
shape: keyof DataShapes;
leftId: string;
rightId: string;
tableData?: {
[key: string]: any;
}[] | undefined;
dataDict?: {
[key: string]: object;
} | undefined;
dataMap?: Map<string, object> | undefined;
updateTriggers?: any[] | undefined;
}) => LoaderWithParser;
declare function useJoinData<T extends DataShapeNames>({ shape, leftId, rightId, tableData, dataDict, dataMap, updateTriggers, }: {
shape: T;
leftId: string;
rightId: string;
tableData?: {
[key: string]: any;
}[];
dataDict?: {
[key: string]: object;
};
dataMap?: Map<string, object>;
updateTriggers?: any[];
}): (data: DataShapes[T]) => DataShapes[T];
export { PMTLayer, PMTLoader, PMTWorkerLoader, useJoinData, useJoinLoader };