2026-02-08 13:16:10 +00:00
|
|
|
#!/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}"
|
2026-02-08 14:51:52 +00:00
|
|
|
GEOFABRIK_URL="https://download.geofabrik.de/europe/united-kingdom/england/greater-london-latest.osm.pbf"
|
2026-02-08 13:16:10 +00:00
|
|
|
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"
|