#!/usr/bin/env bash # OSRM data setup script for Greater London # Downloads OSM extract and pre-processes for foot and bicycle profiles. # # Usage: # ./scripts/osrm-setup.sh [DATA_DIR] # # DATA_DIR defaults to ./osrm-data/ # The processed data is suitable for mounting into OSRM Docker containers. set -euo pipefail DATA_DIR="${1:-./osrm-data}" GEOFABRIK_URL="https://download.geofabrik.de/europe/great-britain/england/greater-london-latest.osm.pbf" OSM_FILE="greater-london-latest.osm.pbf" OSRM_IMAGE="ghcr.io/project-osrm/osrm-backend:latest" echo "==> OSRM Setup for Greater London" echo " Data directory: ${DATA_DIR}" mkdir -p "${DATA_DIR}/foot" "${DATA_DIR}/bicycle" # Download OSM extract if not present if [ ! -f "${DATA_DIR}/${OSM_FILE}" ]; then echo "==> Downloading Greater London OSM extract..." curl -L -o "${DATA_DIR}/${OSM_FILE}" "${GEOFABRIK_URL}" else echo "==> OSM extract already downloaded" fi # Process for foot profile if [ ! -f "${DATA_DIR}/foot/greater-london-latest.osrm" ]; then echo "==> Processing foot profile..." cp "${DATA_DIR}/${OSM_FILE}" "${DATA_DIR}/foot/${OSM_FILE}" docker run --rm -v "${DATA_DIR}/foot:/data" "${OSRM_IMAGE}" \ osrm-extract -p /opt/foot.lua "/data/${OSM_FILE}" docker run --rm -v "${DATA_DIR}/foot:/data" "${OSRM_IMAGE}" \ osrm-partition "/data/greater-london-latest.osrm" docker run --rm -v "${DATA_DIR}/foot:/data" "${OSRM_IMAGE}" \ osrm-customize "/data/greater-london-latest.osrm" # Clean up the source PBF from the profile dir rm -f "${DATA_DIR}/foot/${OSM_FILE}" echo "==> Foot profile ready" else echo "==> Foot profile already processed" fi # Process for bicycle profile if [ ! -f "${DATA_DIR}/bicycle/greater-london-latest.osrm" ]; then echo "==> Processing bicycle profile..." cp "${DATA_DIR}/${OSM_FILE}" "${DATA_DIR}/bicycle/${OSM_FILE}" docker run --rm -v "${DATA_DIR}/bicycle:/data" "${OSRM_IMAGE}" \ osrm-extract -p /opt/bicycle.lua "/data/${OSM_FILE}" docker run --rm -v "${DATA_DIR}/bicycle:/data" "${OSRM_IMAGE}" \ osrm-partition "/data/greater-london-latest.osrm" docker run --rm -v "${DATA_DIR}/bicycle:/data" "${OSRM_IMAGE}" \ osrm-customize "/data/greater-london-latest.osrm" rm -f "${DATA_DIR}/bicycle/${OSM_FILE}" echo "==> Bicycle profile ready" else echo "==> Bicycle profile already processed" fi echo "" echo "==> OSRM setup complete!" echo " Mount ${DATA_DIR} as /data in OSRM containers." echo "" echo " Example:" echo " docker run -p 5100:5000 -v ${DATA_DIR}:/data ${OSRM_IMAGE} \\" echo " osrm-routed --algorithm MLD /data/foot/greater-london-latest.osrm"