Jigu, un mapa interactivo que muestra cuánto miente tu proyección cartográfica
El proyecto dibuja Mercator y Equal Earth a la vez sobre la misma superficie, separadas por un frente que barre de los polos al ecuador. Es open source, MIT, y cabe en un solo HTML.

Jigu es un mapa del mundo interactivo que pone Mercator y Equal Earth en pantalla al mismo tiempo, separadas por un frente luminoso que barre desde los dos polos hacia el ecuador. Lo que aún no ha cruzado se dibuja en Mercator; lo que ha dejado atrás se redibuja en Equal Earth. El repositorio es open source bajo licencia MIT y se distribuye como un único index.html de alrededor de 1,6 MB, con versión en vivo para probarla sin instalar nada.
La comparación de fondo es vieja, la de Groenlandia y África: parecen primas hermanas en Mercator y África es catorce veces más grande. Aquí se puede tocar. Se arrastra un país a otra latitud y cambia su tamaño dibujado: Groenlandia a 72°N ocupa 22.683.547 km² en pantalla, y arrastrada al ecuador baja a 2.168.727 km². Al soltar vuelve a su sitio. Hay dos estilos, noche (el de por defecto) y tinta, que es el mismo dibujo trasladado a papel con trazo oscuro y un ámbar quemado en lugar del brillo. Y hay un globo 3D donde, por definición, el área dibujada es el área real.
Lo interesante está en la interpolación
El detalle que separa a Jigu de un experimento rápido con d3 está en la transición. Lo obvio es interpolar un único valor de progreso para todo el mapa, y eso deja un hombro en la silueta y arranca el casquete polar como un trapecio suelto. Aquí el peso de mezcla depende de la latitud: la anchura se mezcla de forma global, convertida por área real, pero la altura se mezcla localmente. Y lo que se interpola no es la posición vertical, sino la escala vertical, que después se integra. Interpolar la posición directamente introduce un término que se dispara cerca de los polos: el casquete se estira unas nueve veces y el mapa se pliega sobre sí mismo si intentas disimularlo estrechando la banda de transición. Con la derivada, las dos contribuciones son no negativas y el plegado es geométricamente imposible. Se evalúa sobre una tabla de 1600 muestras de −90° a +90°.
La distorsión se mide por polígono, no por punto. Un país no es un punto, y en world-atlas el centroide de la Antártida cae en el propio polo, donde sec²φ diverge: muestrear un punto le da un factor de ×2,7e+32 (notación exponencial, porque toFixed se rinde pasados 1e21). Midiendo el polígono dibujado contra su área esférica real, la Antártida sale ×23,7. Sigue siendo enorme, pero es un número que significa algo.
Rendimiento y empaquetado
El dibujo es solo línea, a propósito. El recorte de polígonos esféricos de d3 se lleva la peor parte: rellenar los 225 polígonos de países en cada fotograma cuesta 61 ms, frente a 6,8 ms y 1,4 ms si costas y fronteras van como MultiLineString. Solo se rellena el país seleccionado, y así el arrastre se mantiene a 112 fps. La selección de país usa un búfer de índices de color fuera de pantalla que se reconstruye únicamente cuando el mapa se asienta.
Stack: d3 para proyecciones y geometría, three.js para el globo (una esfera con MeshBasicMaterial sin iluminar, texturizada con el mismo dibujo 2D en plate carrée para que se lea como carta y no como planeta renderizado; se desactiva solo si WebGL falla) y anime.js para las animaciones. Se compila con Node.js 22.12 o superior. El index.html está en el repositorio como artefacto desplegado y la integración continua comprueba que reconstruirlo produce un diff vacío. La geometría viene de world-atlas, los atributos de país de world-countries y la población del Banco Mundial.
La licencia MIT no cubre las marcas bajo assets/logo/main/. La interfaz está en nueve idiomas y no todos han pasado revisión de hablante nativo, así que las correcciones de traducción son el tipo de pull request que más se agradece.
Para quien monte visualizaciones cartográficas, lo reutilizable no es el mapa: es el truco de integrar la escala vertical en lugar de la posición para que una transición entre dos proyecciones no se rompa en los polos.
