feat(mapa): añadir panel contextual con distribución del consumo eléctrico

Bajo el mapa interactivo, un panel con la distribución de las 652.123
viviendas de Balears por tramo de consumo eléctrico (Cens 2021, Holm 2025):

  - Consumo 0 (vacantes):              105.632 (16,2%)
  - < 250 kWh/año (testimonial):        13.466  (2,1%)
  - 251-1.000 kWh (esporádico):         67.202 (10,3%)
  - 1.001-4.000 kWh (consumo medio):   298.871 (45,8%)  ← mediana 2.869 kWh
  - > 4.000 kWh (consumo alto):        166.952 (25,6%)

Visualización: barras horizontales con porcentaje y valor absoluto,
con interpretación textual por tramo.

Limitación documentada: los datos son a nivel CCAA (no municipio),
por lo que aparecen como contexto al lado del mapa, no como capa pintable
(motivo explicado en el intro de la sección).

Total viviendas = suma de los 5 tramos = 652.123 (verificado).
This commit is contained in:
2026-07-15 15:26:44 +02:00
parent 8ffb3d37e3
commit 04a6012318
3 changed files with 74 additions and 1 deletions
+11
View File
@@ -97,6 +97,17 @@
"legend_islands_all_municipio": "Totes (municipi)",
"legend_islands_all_distrito": "Totes (districte)",
"legend_islands_mallorca_menorca_only": "Només Mallorca / Menorca (cal Airbnb per calcular)",
"consumo_distribucion_title": "Distribució del consum elèctric a les Balears (Cens 2021)",
"consumo_distribucion_intro": "Aquestes dades provenen de l'informe Holm 2025, basat en l'INE 59531. Són a nivell de **tota la comunitat autònoma** (no per municipi), perquè el tram de consum s'agrega al nivell de secció censal a la publicació original. Per això apareixen com a context al costat del mapa, no com a capa pintable.",
"consumo_distribucion_total_label": "Total d'habitatges a Balears",
"consumo_distribucion_footer": "Font: INE, Cens de Població i Vivendes 2021, taula 59531. Interpretació: el 16,2% d'habitatges amb consum 0 són probablement vacants; el 12,4% amb consum < 1.000 kWh són probablement ús esporàdic (2a residència o estacional); només el 71% té consum estable. (Holm, 2025)",
"consumo_distribucion_buckets": [
{ "label": "Consum 0 (sense subministrament)", "viviendas": 105632, "pct": 16.2, "interpretacion": "<strong>Vacants reals</strong>: habitatges sense contracte de llum actiu. Són el gruix de la bossa de pisos buits." },
{ "label": "Menys de 250 kWh/any", "viviendas": 13466, "pct": 2.1, "interpretacion": "<strong>Consum molt baix</strong>: ús testimonial (persones grans que quasi no viuen a la casa, o visites molt esporàdiques)." },
{ "label": "Entre 251 i 1.000 kWh/any", "viviendas": 67202, "pct": 10.3, "interpretacion": "<strong>Ús esporàdic</strong>: 2a residència de temporada (sobretot estiu). Aquesta bossa xuta amb el turisme." },
{ "label": "Entre 1.001 i 4.000 kWh/any", "viviendas": 298871, "pct": 45.8, "interpretacion": "<strong>Consum mitjà</strong>: residència habitual estable. La mediana (2.869 kWh) cau en aquesta banda." },
{ "label": "Més de 4.000 kWh/any", "viviendas": 166952, "pct": 25.6, "interpretacion": "<strong>Consum alt</strong>: família nombrosa, AC intensiu, o doble ús (residencial + part del dia com a oficina)." }
],
"legend_empty": "Sense dades per a aquesta variable en aquesta illa",
"legend_airbnb_title": "Mallorca / Menorca",
"legend_airbnb_desc": "Listings actius a Airbnb per secció censal",
+11
View File
@@ -97,6 +97,17 @@
"legend_islands_all_municipio": "Todas (municipio)",
"legend_islands_all_distrito": "Todas (distrito)",
"legend_islands_mallorca_menorca_only": "Solo Mallorca / Menorca (hace falta Airbnb para calcular)",
"consumo_distribucion_title": "Distribución del consumo eléctrico en Baleares (Censo 2021)",
"consumo_distribucion_intro": "Estos datos provienen del informe Holm 2025, basado en el INE 59531. Son a nivel de **toda la comunidad autónoma** (no por municipio), porque el tramo de consumo se agrega al nivel de sección censal en la publicación original. Por eso aparecen como contexto junto al mapa, no como capa pintable.",
"consumo_distribucion_total_label": "Total de viviendas en Baleares",
"consumo_distribucion_footer": "Fuente: INE, Censo de Población y Viviendas 2021, tabla 59531. Interpretación: el 16,2% de viviendas con consumo 0 son probablemente vacantes; el 12,4% con consumo < 1.000 kWh son probablemente uso esporádico (2ª residencia o estacional); solo el 71% tiene consumo estable. (Holm, 2025)",
"consumo_distribucion_buckets": [
{ "label": "Consumo 0 (sin suministro)", "viviendas": 105632, "pct": 16.2, "interpretacion": "<strong>Vacantes reales</strong>: viviendas sin contrato de luz activo. Son el grueso de la bolsa de pisos vacíos." },
{ "label": "Menos de 250 kWh/año", "viviendas": 13466, "pct": 2.1, "interpretacion": "<strong>Consumo muy bajo</strong>: uso testimonial (personas mayores que casi no viven en la casa, o visitas muy esporádicas)." },
{ "label": "Entre 251 y 1.000 kWh/año", "viviendas": 67202, "pct": 10.3, "interpretacion": "<strong>Uso esporádico</strong>: 2ª residencia de temporada (sobre todo verano). Esta bolsa se mueve con el turismo." },
{ "label": "Entre 1.001 y 4.000 kWh/año", "viviendas": 298871, "pct": 45.8, "interpretacion": "<strong>Consumo medio</strong>: residencia habitual estable. La mediana (2.869 kWh) cae en esta banda." },
{ "label": "Más de 4.000 kWh/año", "viviendas": 166952, "pct": 25.6, "interpretacion": "<strong>Consumo alto</strong>: familia numerosa, AC intensivo, o doble uso (residencial + parte del día como oficina)." }
],
"legend_empty": "Sin datos para esta variable en esta isla",
"legend_airbnb_title": "Mallorca / Menorca",
"legend_airbnb_desc": "Listings activos en Airbnb por sección censal",
+52 -1
View File
@@ -2,11 +2,62 @@
export const prerender = false;
import Base from "../layouts/Base.astro";
import Mapa from "../components/Mapa.astro";
import { getLangFromAstroCookies, type Lang } from "../i18n";
import { getLangFromAstroCookies, t, type Lang } from "../i18n";
const lang: Lang = getLangFromAstroCookies(Astro.cookies);
const fmt = new Intl.NumberFormat(lang === "ca" ? "ca-ES" : "es-ES");
const buckets = t(lang, "map.consumo_distribucion_buckets") as Array<{
label: string;
viviendas: number;
pct: number;
interpretacion: string;
}>;
const totalViviendas = buckets.reduce((s, b) => s + b.viviendas, 0);
const maxPct = Math.max(...buckets.map((b) => b.pct));
---
<Base lang={lang} active="map" title={undefined} description={undefined}>
<Mapa />
<section class="max-w-6xl mx-auto px-4 py-12">
<h2 class="text-2xl sm:text-3xl font-bold text-stone-900 mb-2">
{t(lang, "map.consumo_distribucion_title")}
</h2>
<p class="text-stone-600 mb-6 max-w-3xl" set:html={t(lang, "map.consumo_distribucion_intro")} />
<div class="bg-white border border-stone-200 rounded-lg p-6 mb-4">
<div class="flex items-baseline gap-3 mb-6">
<span class="text-sm text-stone-500">
{t(lang, "map.consumo_distribucion_total_label")}:
</span>
<span class="text-3xl font-bold text-stone-900 tabular-nums">
{fmt.format(totalViviendas)}
</span>
</div>
<ul class="space-y-4">
{buckets.map((b) => (
<li>
<div class="flex items-baseline justify-between mb-1 gap-3 flex-wrap">
<span class="text-sm font-medium text-stone-800">{b.label}</span>
<span class="text-sm text-stone-600 tabular-nums">
<strong class="text-stone-900">{fmt.format(b.viviendas)}</strong>
<span class="text-stone-400"> · </span>
{b.pct.toFixed(1)}%
</span>
</div>
<div class="h-7 bg-stone-100 rounded relative overflow-hidden">
<div
class="absolute inset-y-0 left-0 bg-orange-600"
style={`width: ${(b.pct / maxPct) * 100}%`}
></div>
</div>
<p class="text-xs text-stone-600 mt-1" set:html={b.interpretacion} />
</li>
))}
</ul>
</div>
<p class="text-xs text-stone-500 italic" set:html={t(lang, "map.consumo_distribucion_footer")} />
</section>
</Base>