UNPKG

@deck.gl/carto

Version:

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

66 lines 2.46 kB
// deck.gl // SPDX-License-Identifier: MIT // Copyright (c) vis.gl contributors import * as cartoColors from 'cartocolor'; import { assert } from "../utils.js"; export const DEFAULT_PALETTE = 'PurpOr'; export const NULL_COLOR = [204, 204, 204]; export const OTHERS_COLOR = [119, 119, 119]; export default function getPalette(name, numCategories) { const palette = cartoColors[name]; let paletteIndex = numCategories; assert(palette, `Palette "${name}" not found. Expected a CARTOColors string`); const palettesColorVariants = Object.keys(palette) .filter(p => p !== 'tags') .map(Number); const longestPaletteIndex = Math.max(...palettesColorVariants); const smallestPaletteIndex = Math.min(...palettesColorVariants); if (!Number.isInteger(numCategories) || numCategories > longestPaletteIndex) { paletteIndex = longestPaletteIndex; } else if (numCategories < smallestPaletteIndex) { paletteIndex = smallestPaletteIndex; } let colors = palette[paletteIndex]; if (palette.tags && palette.tags.includes('qualitative')) { colors = colors.slice(0, -1); } return colors.map(c => hexToRgb(c)); } export function hexToRgb(hex) { // Evaluate #ABC let result = /^#?([a-f\d]{1})([a-f\d]{1})([a-f\d]{1})$/i.exec(hex); if (result) { return [ parseInt(result[1] + result[1], 16), parseInt(result[2] + result[2], 16), parseInt(result[3] + result[3], 16), 255 ]; } // Evaluate #ABCD result = /^#?([a-f\d]{1})([a-f\d]{1})([a-f\d]{1})([a-f\d]{1})$/i.exec(hex); if (result) { return [ parseInt(result[1] + result[1], 16), parseInt(result[2] + result[2], 16), parseInt(result[3] + result[3], 16), parseInt(result[4] + result[4], 16) ]; } // Evaluate #ABCDEF result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex); if (result) { return [parseInt(result[1], 16), parseInt(result[2], 16), parseInt(result[3], 16), 255]; } // Evaluate #ABCDEFAF result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex); assert(result, `Hexadecimal color "${hex}" was not parsed correctly`); return [ parseInt(result[1], 16), parseInt(result[2], 16), parseInt(result[3], 16), parseInt(result[4], 16) ]; } //# sourceMappingURL=palette.js.map