UNPKG

@deck.gl/carto

Version:

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

66 lines 2.49 kB
// deck.gl // SPDX-License-Identifier: MIT // Copyright (c) vis.gl contributors import { CompositeLayer } from '@deck.gl/core'; import RasterLayer from "./raster-layer.js"; import QuadbinTileset2D from "./quadbin-tileset-2d.js"; import { TilejsonPropType, mergeLoadOptions } from "./utils.js"; import { DEFAULT_TILE_SIZE } from "../constants.js"; import { TileLayer } from '@deck.gl/geo-layers'; import { copy, PostProcessModifier } from "./post-process-utils.js"; import { registerLoaders } from '@loaders.gl/core'; import CartoRasterTileLoader from "./schema/carto-raster-tile-loader.js"; registerLoaders([CartoRasterTileLoader]); export const renderSubLayers = props => { const tileIndex = props.tile?.index?.q; if (!tileIndex) return null; return new RasterLayer(props, { tileIndex }); }; const defaultProps = { data: TilejsonPropType, refinementStrategy: 'no-overlap', tileSize: DEFAULT_TILE_SIZE }; class PostProcessTileLayer extends PostProcessModifier(TileLayer, copy) { filterSubLayer(context) { // Handle DrawCallbackLayer const { tile } = context.layer.props; if (!tile) return true; return super.filterSubLayer(context); } } class RasterTileLayer extends CompositeLayer { getLoadOptions() { const tileJSON = this.props.data; return mergeLoadOptions(super.getLoadOptions(), { fetch: { headers: { Authorization: `Bearer ${tileJSON.accessToken}` } } }); } renderLayers() { const tileJSON = this.props.data; if (!tileJSON) return null; const { tiles: data, minzoom: minZoom, maxzoom: maxZoom, raster_metadata: metadata } = tileJSON; const SubLayerClass = this.getSubLayerClass('tile', PostProcessTileLayer); const loadOptions = this.getLoadOptions(); return new SubLayerClass(this.props, { id: `raster-tile-layer-${this.props.id}`, data, // TODO: Tileset2D should be generic over TileIndex type TilesetClass: QuadbinTileset2D, renderSubLayers, minZoom, maxZoom, loadOptions: { ...loadOptions, cartoRasterTile: { ...loadOptions?.cartoRasterTile, metadata } } }); } } RasterTileLayer.layerName = 'RasterTileLayer'; RasterTileLayer.defaultProps = defaultProps; export default RasterTileLayer; //# sourceMappingURL=raster-tile-layer.js.map