Multi-país, idiomas, seguridad, instaladores y documentación
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.
This commit is contained in:
parent
d4b3b803e0
commit
f890dd9448
22 changed files with 1288 additions and 280 deletions
56
docs/Anadir-un-pais.md
Normal file
56
docs/Anadir-un-pais.md
Normal file
|
|
@ -0,0 +1,56 @@
|
|||
# Añadir un país
|
||||
|
||||
El país es un parámetro. Se elige con la variable `REGION`.
|
||||
|
||||
```bash
|
||||
./.venv/bin/python src/regions.py # ver el catálogo
|
||||
REGION=pt make all # procesar Portugal entero
|
||||
```
|
||||
|
||||
Los resultados van a `out/pt/` y los intermedios a `data/interim/pt/`. España,
|
||||
que es la región por defecto, publica en `out/` para no romper rutas.
|
||||
|
||||
## Por qué una malla por país y no un mapa continental
|
||||
|
||||
Europa entera a 100 m son mil millones de celdas: **4 GB por capa** y unos
|
||||
**73 GB** para las dieciocho capas del modelo, más de lo que cabe en memoria de
|
||||
una vez. El norte de África añade otros 61 GB. Por país el problema es tratable
|
||||
y además se puede paralelizar.
|
||||
|
||||
## Lo que hay que mirar antes
|
||||
|
||||
`src/regions.py` declara, por país, qué datos existen de verdad:
|
||||
|
||||
| Campo | Qué significa |
|
||||
|---|---|
|
||||
| `protected='eea'` | Hay Red Natura 2000 y designaciones nacionales de la Agencia Europea de Medio Ambiente. El filtro legal funciona |
|
||||
| `protected=None` | **No hay fuente libre equivalente.** El filtro legal no se aplica. Pasa en todo el norte de África: hay que conseguir la cartografía del país antes de fiarse de un resultado |
|
||||
| `ortho='pnoa'` | Ortofoto nacional descargable. Solo España |
|
||||
| `ortho=None` | Sin foto aérea incrustada. En el visor queda el mapa deslizante, que sí funciona en todas partes |
|
||||
|
||||
## Proyección
|
||||
|
||||
Europa usa EPSG:3035 (equiárea europea). Para el norte de África se construye
|
||||
una proyección equiárea centrada en el propio país, porque 3035 deforma fuera de
|
||||
Europa. Está en `regions.crs_for()`.
|
||||
|
||||
## Añadir un país que no esté
|
||||
|
||||
En `src/regions.py`:
|
||||
|
||||
```python
|
||||
"si": dict(name="Eslovenia", bbox=(13.3, 45.4, 16.6, 46.9),
|
||||
osm=["europe/slovenia"],
|
||||
neighbours=["europe/croatia", "europe/austria", "europe/italy"],
|
||||
protected="eea", ortho=None),
|
||||
```
|
||||
|
||||
- `bbox` en lon/lat con algo de margen.
|
||||
- `osm` y `neighbours`, rutas de [Geofabrik](https://download.geofabrik.de).
|
||||
- **Los vecinos importan.** Sin ellos, la franja fronteriza sale falsamente
|
||||
vacía: el extracto está recortado por la frontera y al otro lado no hay
|
||||
edificios en los datos aunque sí los haya en el terreno.
|
||||
|
||||
## Coste aproximado
|
||||
|
||||
Por país mediano: 2-6 GB de descarga, ~25 GB de disco temporal y un par de horas.
|
||||
Loading…
Add table
Add a link
Reference in a new issue