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