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>
197 lines
6.3 KiB
Markdown
197 lines
6.3 KiB
Markdown
# GeoEdu Service - Implementierungsstatus
|
|
|
|
**Stand:** 2026-01-24
|
|
**Status:** Infrastruktur komplett, Downloads ausstehend
|
|
|
|
---
|
|
|
|
## Übersicht
|
|
|
|
Der GeoEdu Service ist eine DSGVO-konforme Erdkunde-Lernplattform mit:
|
|
- Self-Hosted OpenStreetMap Tile Server für Deutschland
|
|
- 3D-Terrain aus Copernicus DEM (Open Data)
|
|
- Unity WebGL Integration für immersive Lernwelten
|
|
- Learning Nodes System für didaktische Inhalte (via Ollama LLM)
|
|
|
|
**Port:** 8088
|
|
|
|
---
|
|
|
|
## Abgeschlossene Arbeiten
|
|
|
|
### Backend (geo-service/)
|
|
|
|
| Datei | Status | Beschreibung |
|
|
|-------|--------|--------------|
|
|
| `Dockerfile` | ✅ | Python 3.11 + GDAL + Geo-Libraries |
|
|
| `requirements.txt` | ✅ | FastAPI, asyncpg, shapely, rasterio, pmtiles |
|
|
| `config.py` | ✅ | Pydantic Settings |
|
|
| `main.py` | ✅ | FastAPI App mit allen Routers |
|
|
| `api/tiles.py` | ✅ | Vector Tile Endpoints |
|
|
| `api/terrain.py` | ✅ | DEM/Heightmap Endpoints |
|
|
| `api/aoi.py` | ✅ | AOI Packaging Endpoints |
|
|
| `api/learning.py` | ✅ | Learning Nodes API |
|
|
| `services/tile_server.py` | ✅ | PMTiles Reader |
|
|
| `services/dem_service.py` | ✅ | Copernicus DEM Handler |
|
|
| `services/aoi_packager.py` | ✅ | Unity Bundle Generator |
|
|
| `services/osm_extractor.py` | ✅ | OSM Feature Extraction |
|
|
| `services/learning_generator.py` | ✅ | Ollama LLM Integration |
|
|
| `models/aoi.py` | ✅ | AOI Pydantic Models |
|
|
| `models/learning_node.py` | ✅ | Learning Node Models |
|
|
| `models/attribution.py` | ✅ | License Attribution |
|
|
| `utils/geo_utils.py` | ✅ | Koordinaten-Transformationen |
|
|
| `utils/minio_client.py` | ✅ | S3 Client |
|
|
| `utils/license_checker.py` | ✅ | Lizenz-Validierung |
|
|
| `scripts/download_osm.sh` | ✅ | Geofabrik Download (NICHT ausgeführt) |
|
|
| `scripts/download_dem.sh` | ✅ | Copernicus Download (NICHT ausgeführt) |
|
|
| `scripts/import_osm.sh` | ✅ | osm2pgsql Import |
|
|
| `scripts/generate_tiles.sh` | ✅ | PMTiles Generation |
|
|
| `scripts/init_postgis.sql` | ✅ | PostGIS Schema + Tabellen |
|
|
| `tests/test_tiles.py` | ✅ | API Tests |
|
|
| `tests/test_aoi.py` | ✅ | AOI + Geo Utils Tests |
|
|
| `tests/test_learning.py` | ✅ | Learning Generator Tests |
|
|
| `.env.example` | ✅ | Environment Template |
|
|
|
|
### Frontend (studio-v2/)
|
|
|
|
| Datei | Status | Beschreibung |
|
|
|-------|--------|--------------|
|
|
| `package.json` | ✅ | maplibre-gl Dependency hinzugefügt |
|
|
| `app/geo-lernwelt/page.tsx` | ✅ | Hauptseite mit Tabs |
|
|
| `app/geo-lernwelt/types.ts` | ✅ | TypeScript Interfaces |
|
|
| `components/geo-lernwelt/AOISelector.tsx` | ✅ | MapLibre Polygon-Zeichnung |
|
|
| `components/geo-lernwelt/UnityViewer.tsx` | ✅ | Unity WebGL Viewer |
|
|
| `lib/geo-lernwelt/GeoContext.tsx` | ✅ | React Context |
|
|
| `lib/geo-lernwelt/mapStyles.ts` | ✅ | MapLibre Styles |
|
|
| `lib/geo-lernwelt/unityBridge.ts` | ✅ | Unity Communication |
|
|
|
|
### Docker-Konfiguration
|
|
|
|
| Änderung | Status | Beschreibung |
|
|
|----------|--------|--------------|
|
|
| `docker-compose.yml` | ✅ | geo-service hinzugefügt |
|
|
| PostgreSQL Image | ✅ | Geändert zu `postgis/postgis:16-3.4-alpine` |
|
|
| PostGIS Init Script | ✅ | Auto-Setup bei Container-Start |
|
|
| Volumes | ✅ | geo_osm_data, geo_dem_data, geo_tile_cache, geo_aoi_bundles |
|
|
|
|
---
|
|
|
|
## Ausstehende Arbeiten
|
|
|
|
### Downloads (NICHT automatisch starten!)
|
|
|
|
| Download | Größe | Script | Dauer (~100 Mbit/s) |
|
|
|----------|-------|--------|---------------------|
|
|
| Germany OSM PBF | 4.4 GB | `scripts/download_osm.sh` | ~6 Min |
|
|
| Copernicus DEM | ~25 GB | `scripts/download_dem.sh` | ~35 Min |
|
|
|
|
### Generierung (nach Downloads)
|
|
|
|
| Prozess | Output | Dauer |
|
|
|---------|--------|-------|
|
|
| osm2pgsql Import | PostgreSQL DB | ~2-4 Stunden |
|
|
| PMTiles (Z0-14) | ~200-300 GB | ~12-24 Stunden |
|
|
| DEM Tiles | ~15 GB | ~2-3 Stunden |
|
|
|
|
**Gesamtspeicherbedarf nach Setup: ~350 GB**
|
|
|
|
---
|
|
|
|
## API Endpoints
|
|
|
|
```
|
|
# Tiles
|
|
GET /api/v1/tiles/{z}/{x}/{y}.pbf → Vector Tile
|
|
GET /api/v1/tiles/style.json → MapLibre Style
|
|
GET /api/v1/tiles/metadata → Tile Metadata
|
|
GET /api/v1/tiles/bounds → Germany Bounds
|
|
|
|
# Terrain
|
|
GET /api/v1/terrain/{z}/{x}/{y}.png → Heightmap (Terrain-RGB)
|
|
GET /api/v1/terrain/hillshade/{z}/{x}/{y}.png → Hillshade
|
|
GET /api/v1/terrain/elevation?lat=&lon= → Point Elevation
|
|
GET /api/v1/terrain/metadata → DEM Metadata
|
|
|
|
# AOI (Area of Interest)
|
|
POST /api/v1/aoi → Create AOI
|
|
GET /api/v1/aoi/{id} → Get Status
|
|
GET /api/v1/aoi/{id}/manifest.json → Unity Manifest
|
|
POST /api/v1/aoi/validate → Validate Polygon
|
|
GET /api/v1/aoi/templates/mainau → Mainau Demo
|
|
|
|
# Learning Nodes
|
|
POST /api/v1/learning/generate → Generate with LLM
|
|
GET /api/v1/learning/templates → Available Themes
|
|
GET /api/v1/learning/{aoi_id}/nodes → Get Nodes
|
|
GET /api/v1/learning/statistics → Stats
|
|
```
|
|
|
|
---
|
|
|
|
## Nächste Schritte
|
|
|
|
1. **Container starten (ohne Downloads):**
|
|
```bash
|
|
docker compose up -d geo-service
|
|
```
|
|
|
|
2. **Health Check testen:**
|
|
```bash
|
|
curl http://localhost:8088/health
|
|
```
|
|
|
|
3. **Frontend testen:**
|
|
```
|
|
http://localhost:3001/geo-lernwelt
|
|
```
|
|
|
|
4. **Downloads starten (wenn bereit):**
|
|
```bash
|
|
# OSM Download (~6 Min)
|
|
docker exec breakpilot-pwa-geo-service /app/scripts/download_osm.sh
|
|
|
|
# DEM Download (~35 Min)
|
|
docker exec breakpilot-pwa-geo-service /app/scripts/download_dem.sh
|
|
```
|
|
|
|
5. **Tile-Generierung (nach Downloads):**
|
|
```bash
|
|
# OSM Import (~2-4h)
|
|
docker exec breakpilot-pwa-geo-service /app/scripts/import_osm.sh
|
|
|
|
# PMTiles Generation (~12-24h)
|
|
docker exec breakpilot-pwa-geo-service /app/scripts/generate_tiles.sh
|
|
```
|
|
|
|
---
|
|
|
|
## Lizenz-Compliance
|
|
|
|
### Zugelassene Quellen
|
|
- ✅ OpenStreetMap (ODbL)
|
|
- ✅ Copernicus DEM (Copernicus License)
|
|
- ✅ OpenAerialMap (CC-BY 4.0)
|
|
|
|
### VERBOTEN
|
|
- ❌ Google Maps/Earth
|
|
- ❌ Bing Maps
|
|
- ❌ Apple Maps
|
|
- ❌ HERE
|
|
|
|
---
|
|
|
|
## Wichtige Dateien
|
|
|
|
| Datei | Pfad |
|
|
|-------|------|
|
|
| Haupt-Plan | `/Users/benjaminadmin/.claude/plans/stateful-hugging-kahan.md` |
|
|
| Backend | `/Users/benjaminadmin/Projekte/breakpilot-pwa/geo-service/` |
|
|
| Frontend | `/Users/benjaminadmin/Projekte/breakpilot-pwa/studio-v2/app/geo-lernwelt/` |
|
|
| Docker Config | `/Users/benjaminadmin/Projekte/breakpilot-pwa/docker-compose.yml` |
|
|
|
|
---
|
|
|
|
## Kontakt bei Fragen
|
|
|
|
Dieser Service wurde gemäß dem Plan in `/Users/benjaminadmin/.claude/plans/stateful-hugging-kahan.md` implementiert.
|