@deck.gl/carto
Version:
CARTO official integration with Deck.gl. Build geospatial applications using CARTO and Deck.gl.
66 lines • 2.49 kB
JavaScript
// 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