UNPKG

@deck.gl/carto

Version:

CARTO official integration with Deck.gl. Build geospatial applications using CARTO and Deck.gl.

59 lines (48 loc) 1.61 kB
// deck.gl // SPDX-License-Identifier: MIT // Copyright (c) vis.gl contributors import {LoaderOptions, LoaderWithParser} from '@loaders.gl/loader-utils'; import {Tile, TileReader} from './carto-spatial-tile'; import {parsePbf} from './tile-loader-utils'; import {getWorkerUrl} from '../../utils'; import {IndexScheme, binaryToSpatialjson, SpatialJson} from './spatialjson-utils'; const VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest'; const id = 'cartoSpatialTile'; type CartoSpatialTileLoaderOptions = LoaderOptions & { cartoSpatialTile?: { scheme: IndexScheme; workerUrl: string; }; }; const DEFAULT_OPTIONS: CartoSpatialTileLoaderOptions = { cartoSpatialTile: { scheme: 'quadbin', workerUrl: getWorkerUrl(id, VERSION) } }; const CartoSpatialTileLoader: LoaderWithParser = { name: 'CARTO Spatial Tile', version: VERSION, id, module: 'carto', extensions: ['pbf'], mimeTypes: ['application/vnd.carto-spatial-tile'], category: 'geometry', parse: async (arrayBuffer, options?: CartoSpatialTileLoaderOptions) => parseCartoSpatialTile(arrayBuffer, options), parseSync: parseCartoSpatialTile, worker: true, options: DEFAULT_OPTIONS }; function parseCartoSpatialTile( arrayBuffer: ArrayBuffer, options?: CartoSpatialTileLoaderOptions ): SpatialJson | null { if (!arrayBuffer) return null; const tile: Tile = parsePbf(arrayBuffer, TileReader); const {cells} = tile; const scheme = options?.cartoSpatialTile?.scheme; const data = {cells, scheme}; return binaryToSpatialjson(data); } export default CartoSpatialTileLoader;