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

68 lines
1.7 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
if ! command -v osmium >/dev/null 2>&1; then
echo "osmium is required for filtering OSM PBF files." >&2
exit 1
fi
if ! command -v psql >/dev/null 2>&1; then
echo "psql is required for preparing the PostGIS schema." >&2
exit 1
fi
if ! command -v node >/dev/null 2>&1; then
echo "node is required for loading filtered OSM features into PostGIS." >&2
exit 1
fi
PBF_PATH="${1:-}"
DATABASE_URL="${DATABASE_URL:-postgres://seacompass:seacompass@localhost:55432/seacompass}"
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
if [[ -z "$PBF_PATH" || ! -f "$PBF_PATH" ]]; then
echo "Usage: DATABASE_URL=postgres://... ./scripts/import-geofabrik.sh /path/to/europe-latest.osm.pbf" >&2
exit 1
fi
WORKDIR="$(mktemp -d)"
trap 'rm -rf "$WORKDIR"' EXIT
osmium tags-filter "$PBF_PATH" \
nwr/seamark:type \
nwr/lock=yes \
nwr/water=lock \
nwr/waterway=lock \
nwr/waterway=lock_gate \
nwr/obstacle=lock \
nwr/leisure=marina \
nwr/harbour \
nwr/industrial=port \
nwr/landuse=harbour \
nwr/landuse=port \
nwr/waterway=dock \
w/waterway=fairway \
w/waterway=canal \
w/waterway=river \
w/route=ferry \
w/natural=water \
w/water=lake \
w/boat=yes \
w/ship=yes \
nwr/bridge \
r/natural=water \
r/water=lake \
r/route=ferry \
-o "$WORKDIR/marine.osm.pbf" \
--overwrite
osmium export "$WORKDIR/marine.osm.pbf" \
--format geojsonseq \
--add-unique-id type_id \
--attributes type,id \
-o "$WORKDIR/marine.geojsonseq" \
--overwrite
psql "$DATABASE_URL" -f "$ROOT_DIR/database/schema.sql"
DATABASE_URL="$DATABASE_URL" WATERMAPS_IMPORT_SOURCE="$(basename "$PBF_PATH" .osm.pbf)" node "$ROOT_DIR/scripts/load-osm-fairways.mjs" "$WORKDIR/marine.geojsonseq"