Saltar a contenido

Motor de rutas y mapa base#

Los mapas de Empowerment Center pueden calcular isócronas (las zonas a la que se llega desde un punto en un tiempo o una distancia) y una matriz de tiempos y distancias hasta las entidades de una capa. Las isócronas radiales (círculos) se calculan siempre; las que van por carretera necesitan un motor de rutas. Esta página explica cómo configurarlo, junto con el mapa base que se dibuja debajo de las capas.

Antes de empezar#

  • La configuración la hace quien instala ECenter: variables de entorno o un application.yml montado en el backend (ver Configuración).
  • Ningún motor de rutas ni mapa base es obligatorio.

Qué cambia con un motor de rutas#

Sin motor Con motor
Isócronas radiales (círculos de distancia en línea recta) Sí Sí
Isócronas por tiempo o por distancia por carretera No («No hay motor de rutas configurado») Sí
Matriz de tiempos y distancias hasta las entidades de una capa No Sí

Con motor, una isócrona por carretera de, por ejemplo, 20 y 40 minutos desde una tienda dibuja las dos bandas, y su matriz dice cuánto se tarda y cuánto se recorre hasta cada municipio de la capa elegida que cae en la banda mayor (como mucho 500, de la más cercana en línea recta a la más lejana). Los usuarios lo usan desde el visor de mapas (ver Mapas).

Los fallos del motor no interrumpen el mapa: una isócrona que no se puede calcular queda con su error y lo demás se dibuja.

Elegir un motor#

Motor Cuándo
Valhalla Autoalojado, junto a ECenter. Es el que se recomienda: las coordenadas no salen de su red. deploy/compose.yaml lo trae como servicio opcional.
OpenRouteService Su servicio en la nube, con una clave y unos límites diarios, o autoalojado. Con el servicio en la nube, las coordenadas de los orígenes y los destinos salen a él. Su matriz no calcula las rutas más cortas, solo las más rápidas.

Valhalla con Docker Compose#

En deploy/.env (con el navegador sin interfaz también, COMPOSE_PROFILES=render,routing):

COMPOSE_PROFILES=routing
ECENTER_MAPS_ROUTING_PROVIDER=valhalla

El perfil routing arranca el servicio valhalla, que solo ve el backend; deploy/compose.yaml ya le dice al backend su dirección (ECENTER_MAPS_ROUTING_URL=http://valhalla:8002).

La primera vez, Valhalla descarga de Geofabrik los extractos de OpenStreetMap de ECENTER_ROUTING_TILE_URLS (por defecto, España con Baleares, Ceuta y Melilla, y Canarias: 1,5 GB) y construye su grafo de carreteras en el volumen routing-data. Mientras tanto, las isócronas por carretera fallan con su error y lo demás funciona. Después arranca de lo guardado, en segundos.

Lo que costó en un equipo de desarrollo (Docker con 2 CPU y 7,8 GB):

España y Canarias Comunidad de Madrid
Construir el grafo, con la descarga 24 min 1,5 min
Memoria al construirlo 4,6 GB 0,7 GB
Memoria en marcha 250 MB 250 MB
Disco 5,8 GB 0,5 GB
Variable Por defecto Qué es
ECENTER_ROUTING_TILE_URLS España y Canarias de Geofabrik Los extractos que se descargan, separados por espacios: un país, una comunidad o varias.
ECENTER_ROUTING_MEMORY 6g El límite de memoria del contenedor. Tiene que cubrir la construcción del grafo.
ECENTER_ROUTING_THREADS 2 Hilos de Valhalla. Con más se construye antes y se gasta más memoria.

Para otra zona, o para poner al día las carreteras (Geofabrik publica a diario), borre el volumen y vuelva a arrancar:

docker compose stop valhalla && docker compose rm -f valhalla
docker volume rm ecenter_routing-data
docker compose up -d valhalla

Valhalla no calcula isócronas de más de 120 minutos ni rutas de más de 400 km en una matriz (sus límites de servicio): la isócrona lo dice en su error. Una matriz de 500 destinos son 500 pares origen-destino, dentro del límite de 2500 que trae Valhalla 3.9; con una versión antigua que limite los destinos de una matriz a 50, súbalo en su configuración o baje ecenter.maps.routing.max-matrix-targets.

OpenRouteService en la nube#

ECENTER_MAPS_ROUTING_PROVIDER=openrouteservice
ECENTER_MAPS_ROUTING_URL=https://api.openrouteservice.org
ECENTER_MAPS_ROUTING_APIKEY=cambie-esta-clave

Su plan gratuito da 500 isócronas y 500 matrices al día. Para un OpenRouteService autoalojado, ponga su dirección en ECENTER_MAPS_ROUTING_URL.

Toda la configuración de los mapas#

Propiedad Por defecto Qué es
ecenter.maps.routing.provider none none, valhalla u openrouteservice. Variable: ECENTER_MAPS_ROUTING_PROVIDER.
ecenter.maps.routing.url La dirección del servicio.
ecenter.maps.routing.api-key La clave de OpenRouteService.
ecenter.maps.routing.profile El de coche El perfil de las rutas (auto en Valhalla, driving-car en OpenRouteService).
ecenter.maps.routing.timeout 30s Lo que puede tardar cada llamada al motor.
ecenter.maps.routing.cache-ttl 7d Lo que se guarda una respuesta del motor: procesar otra vez un mapa no lo vuelve a llamar.
ecenter.maps.routing.max-matrix-targets 500 Destinos como mucho de una matriz.
ecenter.maps.max-features 200000 Entidades como mucho de un fichero de capa.
ecenter.maps.max-dots 20000 Puntos como mucho de una densidad de puntos.
ecenter.maps.upload-ttl 24h Lo que dura un fichero subido sin crear la capa.
ecenter.maps.base-map.style Un estilo de MapLibre para el mapa base: la URL de un proveedor (por ejemplo, MapTiler) o uno autoalojado (por ejemplo, un .pmtiles de Protomaps).
ecenter.maps.base-map.style-dark El estilo para el tema oscuro. Sin él, el tema oscuro usa style.
ecenter.maps.base-map.tiles, tiles-dark Teselas ráster (…/{z}/{x}/{y}.png), si no hay estilo, y su variante oscura; sin ella, en oscuro se ven las claras atenuadas.
ecenter.maps.base-map.attribution La cita del mapa base, si se usan teselas ráster.
ecenter.maps.base-map.max-zoom 19 El zoom máximo de las teselas ráster.

Sin mapa base, las capas se dibujan sobre un fondo liso del color del tema. Las teselas públicas de OpenStreetMap solo valen para pruebas, por su política de uso.

Un ejemplo de application.yml montado en el backend:

ecenter:
  maps:
    base-map:
      style: https://api.maptiler.com/maps/streets-v2/style.json?key=cambie-esta-clave
      style-dark: https://api.maptiler.com/maps/streets-v2-dark/style.json?key=cambie-esta-clave
    routing:
      provider: valhalla
      url: http://valhalla:8002

Nota

Si el mapa base es de otro origen, añada ese origen a ECENTER_CSP_MAP_ORIGINS en el frontal (https://api.maptiler.com), para que la política de contenido de la aplicación lo permita. Ver Instalación.

Véase también#