map = {
let svg = viz.create({
zoomable: false,
domain: [
[-10, 35],
[32, 65]
],
projection: d3
.geoConicConformal()
.parallels([40, 68])
.rotate([-9.05, 0])
.center([9.5 - 9.05, 54.1])
});
svg.outline();
svg.graticule({ step: 5, stroke: "white" });
svg.path({ datum: world, fill: "#D9DADC" });
svg.path({ data: nuts0, fill: "#FDD59A", strokeWidth: 0.5 });
svg.path({
datum: await geo.union(world),
fill: "none",
stroke: "#62cef5",
strokeWidth: 1
});
svg.halfcircle({
data: europe,
r: "oqt",
fill: "#F13C47",
fillOpacity: 0.8,
fixmax: 50000,
tip: "$name\nNombre d'OQT : $oqt"
});
svg.halfcircle({
data: europe,
angle: 180,
r: "retours",
fill: "#319ABF",
fillOpacity: 0.8,
fixmax: 50000,
tip: "$name\nNombre de retours forcés : $retours"
});
svg.scalebar({ label: "kilomètres" });
svg.footer({
textAnchor: "end",
text: "Cartographie : Nicolas Lambert pour la Brigade d'intervention cartographique (BIC) de Migreurop, 2024\nSource des données : Eurostat, février 2024"
});
svg.header({
text: "Obligations de quitter l'Europe et expulsions réelles en " + year
});
svg.legend.mushrooms({
title: "OQT et retours forcés",
pos: [30, 30],
subtitle: `(en ${year})`,
gap: 5,
top_title: "Nombre d'OQT",
top_title_fill: "#F13C47",
top_circle_fillOpacity: 0.8,
top_circle_fill: "#F13C47",
top_fixmax: 50000,
top_data: europe.features.map((d) => d.properties.oqt),
bottom_title: "Nombre de retours forcés",
bottom_title_fill: "#319ABF",
bottom_circle_fill: "#319ABF",
bottom_circle_fillOpacity: 0.8,
bottom_fixmax: 50000,
bottom_nb: 2,
bottom_data: europe.features.map((d) => d.properties.retours),
frame: true,
frame_stroke: "none",
note: `En rouge : Ressortissants de pays tiers
faisant l'objet d'une obligation de quitter le territoire
En bleu : Ressortissants de pays tiers ayant
quitté le territoire (retours forcés)`
});
return svg.render();
}