@deck.gl/carto
Version:
CARTO official integration with Deck.gl. Build geospatial applications using CARTO and Deck.gl.
52 lines • 1.96 kB
JavaScript
// deck.gl
// SPDX-License-Identifier: MIT
// Copyright (c) vis.gl contributors
import { CompositeLayer } from '@deck.gl/core';
import QuadbinLayer from "./quadbin-layer.js";
import QuadbinTileset2D from "./quadbin-tileset-2d.js";
import SpatialIndexTileLayer from "./spatial-index-tile-layer.js";
import { hexToBigInt } from 'quadbin';
import { TilejsonPropType, mergeLoadOptions } from "./utils.js";
import { DEFAULT_TILE_SIZE } from "../constants.js";
export const renderSubLayers = props => {
const { data } = props;
if (!data || !data.length)
return null;
const isBigInt = typeof data[0].id === 'bigint';
return new QuadbinLayer(props, {
getQuadbin: isBigInt ? d => d.id : d => hexToBigInt(d.id)
});
};
const defaultProps = {
data: TilejsonPropType,
tileSize: DEFAULT_TILE_SIZE
};
class QuadbinTileLayer extends CompositeLayer {
getLoadOptions() {
const tileJSON = this.props.data;
return mergeLoadOptions(super.getLoadOptions(), {
fetch: { headers: { Authorization: `Bearer ${tileJSON.accessToken}` } },
cartoSpatialTile: { scheme: 'quadbin' }
});
}
renderLayers() {
const tileJSON = this.props.data;
if (!tileJSON)
return null;
const { tiles: data, maxresolution: maxZoom } = tileJSON;
const SubLayerClass = this.getSubLayerClass('spatial-index-tile', SpatialIndexTileLayer);
return new SubLayerClass(this.props, {
id: `quadbin-tile-layer-${this.props.id}`,
data,
// TODO: Tileset2D should be generic over TileIndex type
TilesetClass: QuadbinTileset2D,
renderSubLayers,
maxZoom,
loadOptions: this.getLoadOptions()
});
}
}
QuadbinTileLayer.layerName = 'QuadbinTileLayer';
QuadbinTileLayer.defaultProps = defaultProps;
export default QuadbinTileLayer;
//# sourceMappingURL=quadbin-tile-layer.js.map