Files
watermaps/scripts/download-geofabrik.sh
T
2026-07-24 11:29:24 +02:00

52 lines
1.6 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
OUT_DIR="${WATERMAPS_GEOFABRIK_DIR:-${SEA_COMPASS_GEOFABRIK_DIR:-data/geofabrik}}"
GERMANY_BASE_URL="${WATERMAPS_GEOFABRIK_GERMANY_BASE_URL:-${SEA_COMPASS_GEOFABRIK_GERMANY_BASE_URL:-https://download.geofabrik.de/europe/germany}}"
EUROPE_BASE_URL="${WATERMAPS_GEOFABRIK_EUROPE_BASE_URL:-${SEA_COMPASS_GEOFABRIK_EUROPE_BASE_URL:-https://download.geofabrik.de/europe}}"
DEFAULT_REGIONS=(
germany
netherlands
)
regions=("$@")
if [[ "${#regions[@]}" -eq 0 ]]; then
regions=("${DEFAULT_REGIONS[@]}")
fi
mkdir -p "$OUT_DIR"
for region in "${regions[@]}"; do
file_name="${region}-latest.osm.pbf"
case "$region" in
germany|netherlands)
url="${EUROPE_BASE_URL}/${file_name}"
;;
*)
url="${GERMANY_BASE_URL}/${file_name}"
;;
esac
target="${OUT_DIR}/${file_name}"
checksum_target="${target}.md5"
echo "Downloading $url.md5"
curl --fail --location --retry 5 --retry-delay 5 --output "$checksum_target" "${url}.md5"
expected_checksum="$(awk 'NR == 1 { print $1 }' "$checksum_target")"
if [[ -f "$target" ]] && [[ "$(md5sum "$target" | awk '{ print $1 }')" == "$expected_checksum" ]]; then
echo "$(basename "$target"): already current"
continue
fi
echo "Downloading $url"
curl --fail --location --continue-at - --retry 5 --retry-delay 5 --output "$target" "$url"
actual_checksum="$(md5sum "$target" | awk '{ print $1 }')"
if [[ -z "$expected_checksum" || "$actual_checksum" != "$expected_checksum" ]]; then
echo "Checksum verification failed for $target" >&2
exit 1
fi
echo "$(basename "$target"): OK"
done