23 países con sitios y cuatro sin ninguno. Andorra, Países Bajos, Bélgica y
Suiza dan cero y es la respuesta correcta, no un fallo: en Holanda solo 132
km2 de 35.193 están a más de 2 km de una casa, y en Suiza el cruce de "lejos
de todo" con "menos de 10 grados de pendiente" deja 430 km2 que no sobreviven
al resto de filtros.
El reparto no tiene que ver con el tamaño de los países sino con cómo está
repartida la gente. El norte de África concentra 5.272 de las 7.337
localizaciones; Alemania, Polonia, Austria, Chequia, Bélgica, Países Bajos y
Suiza juntos, más de un millón de km2, suman nueve. Alemania tiene una: Bad
Arolsen, a 44,4 dB. La mediana de distancia al edificio más cercano va de los
141 m de los Países Bajos a los 48 km de Libia.
De cada país entra el visor, que es autónomo, y los datos en CSV. Los WebP van
ya incrustados dentro del visor y los PNG de los mapas solo los usa el informe.
Dos límites del modelo que conviene tener presentes al leer estas cifras:
- Las estrellas no son comparables entre países. Las bandas son absolutas
(cinco estrellas a partir de 72 puntos) pero los criterios saturan en
extremos opuestos: en Libia el 72 % de los candidatos tiene el sonido, que
pesa un 30 %, clavado en el máximo, y en España el 0 %; los 121 candidatos
finlandeses tienen exactamente la misma nota de clima porque el umbral del
frío se acaba en -8 grados y allí el mínimo va de -11 a -20.
- La columna db_en_casa da negativos en el desierto y no significa nada. El
mejor candidato argelino tiene la casa más cercana a 265 km, y el término de
absorción atmosférica extrapolado a esa distancia son 132 dB él solo. La
aproximación vale para unos pocos kilómetros, no para cientos.
Ocho países no tienen filtro legal: los seis del norte de África más Andorra y
Reino Unido. Libia es el extremo, con 10 polígonos de OSM y el 0,0 % del país.
El soporte multi-país estaba declarado pero nunca se había ejecutado entero.
Al hacerlo aparecieron defectos en cadena, la mayoría por dar por hecho que
lo que vale en España vale en todas partes.
Máscara del país
- El nivel administrativo que cubre el país no es el mismo en todas partes: en
España el 4 son las comunidades, en Portugal el 4 se queda en 2.338 km2 de
89.015 y cubre el 8, en Islandia el 8 tiene un solo polígono de 5 km2 y manda
el 6. Se elige el nivel midiendo cobertura, no suponiéndola.
- Se mide sobre la máscara del país y no por área cruda de los polígonos: con
áreas crudas el nivel grueso gana en los países con costa (las županije
croatas cuentan 30.000 km2 de Adriático) y el fino gana en Polonia cubriendo
el 57 %.
- Fuera el mar. El límite del país en OSM incluye las aguas territoriales:
Islandia son 177.147 km2 con mar y 102.719 de tierra, y salían ocho
candidatos flotando en el Atlántico. Se recorta por DEM, donde el océano es
exactamente 0.0 y la tierra a cero clavado casi no existe (5 km2 de 56.439
en Croacia). Los países bajo el nivel del mar salen negativos, no cero.
Un solo modelo
- score.py duplicaba los umbrales de stars.py con otros valores (1.500 m al
edificio en vez de 2.000, 8 grados de pendiente en vez de 10) y publicaba su
propia lista de candidatos sin filtro acústico: 60 sitios que compartían uno
con los 355 buenos. Fuera la lista, y los umbrales salen de stars.py.
Datos por país
- Los espacios protegidos se guardaban en un único directorio con un "si ya
existe, no lo bajes", así que cualquier país nuevo se quedaba con los
polígonos de España. Uno por país.
- Comprobado contra los servicios de la EEA país por país: Andorra y Reino
Unido devuelven cero sitios (Andorra nunca estuvo en la UE, el Reino Unido
salió) y Grecia solo tiene Natura 2000. Donde no hay fuente oficial se cae a
OpenStreetMap avisando, que es incompleto pero mucho mejor que una máscara
vacía: en Andorra eran 9 km2 contra 70.
- make datos no descargaba el OSM y los vecinos se extraían a mano. Nuevo
src/dl_osm.sh y extract_osm.py los recorre solo, avisando si falta alguno.
Robustez
- stars.py reventaba con un traceback si un país no daba ningún sitio. Ahora
explica el embudo filtro a filtro y corta limpio. Pasa en cuatro países.
- stars.py no cabía en memoria con mallas grandes: Argelia son 449 M celdas,
16 capas de 1,8 GB más los criterios, y el kernel mataba el proceso. Las
capas se mapean a disco. Resultado idéntico byte a byte.
- dl_dem.sh no era seguro en paralelo: el fichero temporal se llamaba igual
para todos y dos países bajando la misma tesela se pisaban.
- revisar.py llevaba la ventana de España cableada, comparaba el centro de
celda sin tolerancia de rejilla, y trataba como fallo una etiqueta que hay
países que no tienen. Añadidas dos comprobaciones nuevas: candidatos sobre
el mar y candidatos pegados al borde de la ventana, donde el aislamiento
sale inflado porque al otro lado del bbox no hay datos.
Visor
- Selector de país en la cabecera. Cada visor es un fichero autónomo, así que
salta al del otro país en vez de cargar los dos. Rutas relativas.
- Las capas del mapa pasan a ser excluyentes: las tres a la vez se tapaban.
- Lo español (teselas del IGN, catastro, WMS del MITECO, ortofoto del PNOA)
queda condicionado a la región en vez de salir en blanco fuera de España.
Publicación
- Al repositorio va el visor y los CSV de cada país; fuera los WebP, que van
ya incrustados dentro del visor, y los PNG de los mapas, que solo usa el
informe. make empaquetar deja además un zip por país para las releases y
make descargar los baja sin recalcular nada.
- El informe no se genera fuera de España: no es una plantilla sino un
artículo escrito, con cifras del barrido español en la prosa.
Seguridad
- Escapado de todo lo que viene de datos de terceros antes de ir al HTML,
incluidos los tooltips de Leaflet. Los nombres de municipio salen de
OpenStreetMap, que cualquiera puede editar: sin escapar, era una vía de
inyección de código en el navegador de quien abriera el visor.
Multi-país
- El país pasa a ser un parámetro (REGION). Catálogo de 27 regiones entre
Europa y el norte de África, declarando por país qué datos existen de verdad.
- Una malla por país y no una continental: Europa entera a 100 m son mil
millones de celdas y unos 73 GB solo en capas ráster.
- Proyección equiárea propia para las regiones de fuera de Europa, donde
EPSG:3035 deforma.
Interfaz
- Idiomas: castellano, inglés, francés y portugués, con selector persistente.
- Modo Mapa: el país entero sobre satélite, topográfico u OSM.
- Enlaces a mapas externos en la barra inferior, siempre visibles.
- Botón de ver de cerca también en la cabecera de la ficha.
- Fuera la distancia desde Madrid, que centralizaba algo de uso general.
Portabilidad
- install.sh e install.ps1 para Linux/macOS y Windows; requirements.txt.
- Sin rutas absolutas en el código.
Documentación
- Ocho páginas en docs/ para la wiki: instalación, uso, añadir un país,
metodología, seguridad, fuentes y publicación.
Barrido de los 498.528 km² de la península y Baleares sobre malla de 100 m
(EPSG:3035) para localizar sitios alejados de todo con acceso rodado.
- 12,5 M de edificios y 1,4 M de km de viales de OSM, incluidos los países
vecinos para no inflar el aislamiento en la franja fronteriza
- Espacios protegidos oficiales (Red Natura 2000 + designación nacional) vía
la Agencia Europea de Medio Ambiente: cubren el 29 % del país frente al 15 %
que tenía OSM
- Modelo acústico con propagación real; es el filtro que de verdad corta, y
deja 505 km² en toda España
- 355 localizaciones valoradas de 1 a 5 estrellas en seis criterios
- Visor autónomo con relieve, ortofoto PNOA por localización, relieve 3D y
mapa deslizante con satélite, catastro y espacios protegidos