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