#!/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