This repository has been archived on 2026-02-15. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
breakpilot-pwa/geo-service/scripts/import_osm.sh
Benjamin Admin 21a844cb8a fix: Restore all files lost during destructive rebase
A previous `git pull --rebase origin main` dropped 177 local commits,
losing 3400+ files across admin-v2, backend, studio-v2, website,
klausur-service, and many other services. The partial restore attempt
(660295e2) only recovered some files.

This commit restores all missing files from pre-rebase ref 98933f5e
while preserving post-rebase additions (night-scheduler, night-mode UI,
NightModeWidget dashboard integration).

Restored features include:
- AI Module Sidebar (FAB), OCR Labeling, OCR Compare
- GPU Dashboard, RAG Pipeline, Magic Help
- Klausur-Korrektur (8 files), Abitur-Archiv (5+ files)
- Companion, Zeugnisse-Crawler, Screen Flow
- Full backend, studio-v2, website, klausur-service
- All compliance SDKs, agent-core, voice-service
- CI/CD configs, documentation, scripts

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-09 09:51:32 +01:00

237 lines
7.5 KiB
Bash
Executable File

#!/bin/bash
# ============================================
# OSM PostGIS Import Script for GeoEdu Service
# ============================================
#
# Importiert OSM PBF-Daten in PostgreSQL/PostGIS
# Verwendet osm2pgsql fuer den Import
#
# Voraussetzungen:
# - PostgreSQL mit PostGIS Extension
# - osm2pgsql installiert
# - OSM PBF Datei heruntergeladen
#
# Nutzung:
# ./import_osm.sh [--slim] [--drop]
#
# ============================================
set -e
# Configuration
DATA_DIR="${OSM_DATA_DIR:-/app/data/osm}"
PBF_FILE="${DATA_DIR}/germany-latest.osm.pbf"
DATABASE_URL="${DATABASE_URL:-postgresql://breakpilot:breakpilot123@postgres:5432/breakpilot_db}"
# Parse DATABASE_URL
DB_USER=$(echo $DATABASE_URL | sed -n 's|.*://\([^:]*\):.*|\1|p')
DB_PASS=$(echo $DATABASE_URL | sed -n 's|.*://[^:]*:\([^@]*\)@.*|\1|p')
DB_HOST=$(echo $DATABASE_URL | sed -n 's|.*@\([^:]*\):.*|\1|p')
DB_PORT=$(echo $DATABASE_URL | sed -n 's|.*:\([0-9]*\)/.*|\1|p')
DB_NAME=$(echo $DATABASE_URL | sed -n 's|.*/\([^?]*\).*|\1|p')
# Colors
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m'
echo -e "${YELLOW}============================================${NC}"
echo -e "${YELLOW}GeoEdu Service - OSM PostGIS Import${NC}"
echo -e "${YELLOW}============================================${NC}"
echo ""
# Check if PBF file exists
if [ ! -f "$PBF_FILE" ]; then
echo -e "${RED}Fehler: OSM PBF Datei nicht gefunden!${NC}"
echo "Erwartet: $PBF_FILE"
echo ""
echo "Bitte zuerst download_osm.sh ausfuehren."
exit 1
fi
echo "PBF Datei: $PBF_FILE"
echo "Groesse: $(du -h "$PBF_FILE" | cut -f1)"
echo ""
echo "Datenbank: $DB_NAME @ $DB_HOST:$DB_PORT"
echo ""
# Check for osm2pgsql
if ! command -v osm2pgsql &> /dev/null; then
echo -e "${RED}Fehler: osm2pgsql nicht installiert!${NC}"
echo ""
echo "Installation:"
echo " apt-get install osm2pgsql # Debian/Ubuntu"
echo " brew install osm2pgsql # macOS"
exit 1
fi
OSM2PGSQL_VERSION=$(osm2pgsql --version 2>&1 | head -1)
echo "osm2pgsql Version: $OSM2PGSQL_VERSION"
echo ""
# Parse arguments
SLIM_MODE=""
DROP_MODE=""
while [[ $# -gt 0 ]]; do
case $1 in
--slim)
SLIM_MODE="--slim"
echo "Modus: Slim (fuer Updates)"
shift
;;
--drop)
DROP_MODE="--drop"
echo "Modus: Drop (bestehende Tabellen loeschen)"
shift
;;
*)
echo "Unbekannte Option: $1"
exit 1
;;
esac
done
# Estimate time
PBF_SIZE=$(stat -f%z "$PBF_FILE" 2>/dev/null || stat -c%s "$PBF_FILE")
ESTIMATED_HOURS=$((PBF_SIZE / 1000000000 / 2)) # Rough estimate: ~2GB per hour
echo ""
echo -e "${YELLOW}ACHTUNG: Import kann 2-4 Stunden dauern!${NC}"
echo "Geschaetzte Dauer: ~${ESTIMATED_HOURS}-$((ESTIMATED_HOURS * 2)) Stunden"
echo ""
read -p "Import starten? (j/N) " -n 1 -r
echo ""
if [[ ! $REPLY =~ ^[JjYy]$ ]]; then
echo "Import abgebrochen."
exit 1
fi
# Create style file
STYLE_FILE="${DATA_DIR}/osm2pgsql.style"
cat > "$STYLE_FILE" << 'EOF'
# osm2pgsql style file for GeoEdu Service
# Optimized for educational geography content
# Common tags
node,way access text linear
node,way addr:housename text linear
node,way addr:housenumber text linear
node,way addr:interpolation text linear
node,way admin_level text linear
node,way aerialway text linear
node,way amenity text polygon
node,way area text linear
node,way barrier text linear
node,way bicycle text linear
node,way boundary text linear
node,way bridge text linear
node,way building text polygon
node,way construction text linear
node,way covered text linear
node,way foot text linear
node,way highway text linear
node,way historic text polygon
node,way junction text linear
node,way landuse text polygon
node,way layer text linear
node,way leisure text polygon
node,way man_made text polygon
node,way military text polygon
node,way name text linear
node,way natural text polygon
node,way oneway text linear
node,way place text polygon
node,way power text polygon
node,way railway text linear
node,way ref text linear
node,way religion text linear
node,way route text linear
node,way service text linear
node,way shop text polygon
node,way sport text polygon
node,way surface text linear
node,way tourism text polygon
node,way tracktype text linear
node,way tunnel text linear
node,way water text polygon
node,way waterway text linear
node,way wetland text polygon
node,way wood text polygon
node,way z_order int4 linear
# Elevation data from OSM
node,way ele text linear
# Name translations
node,way name:de text linear
node,way name:en text linear
# Population for place rendering
node,way population text linear
# Way area for polygon ordering
way way_area real linear
EOF
echo ""
echo -e "${GREEN}[1/3] PostGIS Extension aktivieren...${NC}"
PGPASSWORD="$DB_PASS" psql -h "$DB_HOST" -p "$DB_PORT" -U "$DB_USER" -d "$DB_NAME" -c "CREATE EXTENSION IF NOT EXISTS postgis;"
PGPASSWORD="$DB_PASS" psql -h "$DB_HOST" -p "$DB_PORT" -U "$DB_USER" -d "$DB_NAME" -c "CREATE EXTENSION IF NOT EXISTS hstore;"
echo ""
echo -e "${GREEN}[2/3] OSM Daten importieren...${NC}"
echo " Dies dauert mehrere Stunden!"
echo ""
# Run osm2pgsql
PGPASSWORD="$DB_PASS" osm2pgsql \
-H "$DB_HOST" \
-P "$DB_PORT" \
-U "$DB_USER" \
-d "$DB_NAME" \
-S "$STYLE_FILE" \
--cache 4000 \
--number-processes 4 \
$SLIM_MODE \
$DROP_MODE \
"$PBF_FILE"
echo ""
echo -e "${GREEN}[3/3] Indizes erstellen...${NC}"
PGPASSWORD="$DB_PASS" psql -h "$DB_HOST" -p "$DB_PORT" -U "$DB_USER" -d "$DB_NAME" << 'EOSQL'
-- Spatial indexes (if not created by osm2pgsql)
CREATE INDEX IF NOT EXISTS planet_osm_point_way_idx ON planet_osm_point USING GIST (way);
CREATE INDEX IF NOT EXISTS planet_osm_line_way_idx ON planet_osm_line USING GIST (way);
CREATE INDEX IF NOT EXISTS planet_osm_polygon_way_idx ON planet_osm_polygon USING GIST (way);
CREATE INDEX IF NOT EXISTS planet_osm_roads_way_idx ON planet_osm_roads USING GIST (way);
-- Name indexes for search
CREATE INDEX IF NOT EXISTS planet_osm_point_name_idx ON planet_osm_point (name);
CREATE INDEX IF NOT EXISTS planet_osm_polygon_name_idx ON planet_osm_polygon (name);
-- Vacuum analyze for query optimization
VACUUM ANALYZE planet_osm_point;
VACUUM ANALYZE planet_osm_line;
VACUUM ANALYZE planet_osm_polygon;
VACUUM ANALYZE planet_osm_roads;
EOSQL
echo ""
echo -e "${GREEN}============================================${NC}"
echo -e "${GREEN}Import abgeschlossen!${NC}"
echo -e "${GREEN}============================================${NC}"
echo ""
echo "Tabellen erstellt:"
echo " - planet_osm_point"
echo " - planet_osm_line"
echo " - planet_osm_polygon"
echo " - planet_osm_roads"
echo ""
echo -e "${YELLOW}Naechster Schritt:${NC}"
echo " ./generate_tiles.sh # PMTiles generieren"