Public
Edited
Aug 25, 2023
Importers
Insert cell
Insert cell
import { ColorMask } from "053fea843f886be5"
Insert cell
import { states, regions, countries } from "ea1ae6dbb4ec6b18"
Insert cell
states
Insert cell
regions
Insert cell
countries
Insert cell
provinces = {
const provinces = new Map();
function getProvince(provinceId) {
const colorNum = ColorMask.fromHex(provinceId);
if (!provinces.has(colorNum)) provinces.set(colorNum, { id: provinceId, colorNum, land: "land" });
return provinces.get(colorNum);
}

for (let state of Object.values(states)) {
for (let provinceId of state.provinces) {
const province = getProvince(provinceId);
province.state = state.id;
province.region = state.region;
}
}

for (let country of Object.values(countries).filter(c => c.isDecentralized)) {
country.provinces.forEach(id => getProvince(id).decentralized = true);
}
return [...provinces.values()];
}
Insert cell
mapInfo = {
const provinceValues = provinces;
let allKeys = new Set(provinceValues.map(p => Object.keys(p)).flat());
allKeys.delete("id");
allKeys.delete("colorNum");
allKeys = [...allKeys];

const grouped = _.groupBy(provinceValues, p => allKeys.map(k => String(p[k])).join("||"));

const colorReplacementMap = new Map();
const colorNumProps = new Map();
const layers = {};
function getPropColors(propName, propValue) {
const propColor = (layers[propName] ??= new Map());
if (!propColor.has(propValue)) propColor.set(propValue, []);
return propColor.get(propValue);
}
for (let provinceGroup of Object.values(grouped)) {
const first = provinceGroup[0];
const colorNum = first.colorNum;
const sourceColorNums = provinceGroup.map(p => p.colorNum);
sourceColorNums.forEach(c => colorReplacementMap.set(c, colorNum));
const provinceColorProps = _.pick(first, allKeys);
colorNumProps.set(colorNum, provinceColorProps);

for (let [prop, value] of Object.entries(provinceColorProps)) {
getPropColors(prop, value).push(colorNum);
}
}

return { colorReplacementMap, colorNumProps, layers };
}
Insert cell

Purpose-built for displays of data

Observable is your go-to platform for exploring data and creating expressive data visualizations. Use reactive JavaScript notebooks for prototyping and a collaborative canvas for visual data exploration and dashboard creation.
Learn more