RAVE-SCOUT/install.sh
hacklab f890dd9448 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.
2026-08-08 22:24:17 +02:00

50 lines
1.6 KiB
Bash
Executable file

#!/usr/bin/env bash
# Instalador para Linux y macOS.
#
# Solo hace falta para RECONSTRUIR los datos. Para USAR el visor no se instala
# nada: se abre out/visor.html en cualquier navegador.
set -euo pipefail
cd "$(dirname "${BASH_SOURCE[0]}")"
echo "== RAVE SCOUT / EXPLORER =="
# --- python ---
PY=""
for c in python3.12 python3.11 python3.10 python3; do
if command -v "$c" >/dev/null 2>&1; then
v=$("$c" -c 'import sys;print(sys.version_info>=(3,9))' 2>/dev/null || echo False)
[ "$v" = "True" ] && { PY="$c"; break; }
fi
done
[ -n "$PY" ] || { echo "Falta Python 3.9 o superior."; echo \
" Debian/Ubuntu: sudo apt install python3 python3-venv"; \
echo " Fedora: sudo dnf install python3"; \
echo " macOS: brew install python"; exit 1; }
echo "Python: $($PY -V)"
if ! "$PY" -c "import venv" >/dev/null 2>&1; then
echo "Falta el módulo venv. En Debian/Ubuntu: sudo apt install python3-venv"; exit 1
fi
# --- entorno ---
[ -d .venv ] || "$PY" -m venv .venv
./.venv/bin/pip -q install --upgrade pip
echo "Instalando dependencias…"
./.venv/bin/pip -q install -r requirements.txt
# --- comprobación ---
./.venv/bin/python - <<'EOF'
import importlib, sys
faltan = [m for m in ("numpy","scipy","rasterio","osmium","shapely","pyproj",
"requests","PIL") if not importlib.util.find_spec(m)]
if faltan:
print("FALTAN:", ", ".join(faltan)); sys.exit(1)
print("Dependencias correctas.")
EOF
echo
echo "Listo."
echo " Abrir el visor: ./abrir.sh"
echo " Ver países: ./.venv/bin/python src/regions.py"
echo " Reconstruir España: make all"
echo " Otro país: REGION=pt make all"