Skip to content
🟡In Arbeit58%
Vollständigkeit:
60%
Korrektheit:
85%
⏳ Noch nicht geprüft

Feature Editor Overview

Übersicht

Der Feature Editor ist das zentrale Modul für die Erstellung und Bearbeitung von Geodaten in p2d2. Er ermöglicht das interaktive Zeichnen neuer Features, die Bearbeitung existierender Geometrien und die Synchronisation mit verschiedenen Backend-Systemen.

Architektur-Übersicht

┌─────────────────────────────────────┐
│      Feature-Editor UI              │
│  (Buttons, Panels, Toolbars)        │
└──────────────┬──────────────────────┘

       ┌───────┴───────┐
       │               │
┌──────▼─────┐  ┌─────▼────────┐
│Draw Manager│  │  Edit Mode   │
│  🚧 TODO   │  │  🚧 TODO     │
└──────┬─────┘  └─────┬────────┘
       │              │
       └──────┬───────┘

      ┌───────▼────────┐
      │ Feature Sync   │
      │  ✅ Teilweise  │
      └───────┬────────┘

      ┌───────▼────────┐
      │OSM Integration │
      │  ✅ Grundlagen │
      └────────────────┘

Modul-Übersicht

ModulStatusZweckHauptfunktionen
Draw Manager🚧 Nicht implementiertNeue Features zeichnenPolygon-, Point-, LineString-Zeichnung
Edit Mode🚧 Nicht implementiertFeatures bearbeitenVertex-Editing, Move, Resize, Delete
Feature Sync✅ Teilweise implementiertPersistierung und SynchronisationPolygon-Sync-Plugin, File-Watcher
OSM Integration✅ Grundlagen vorhandenOpenStreetMap-IntegrationOSM-Interfaces, Overpass-API-Strukturen

Implementierungsstatus

✅ Implementierte Komponenten

Polygon-Sync-Plugin

  • Datei: src/integrations/polygon-sync-plugin.mjs
  • Funktion: Automatische Synchronisation von Markdown-Dateien
  • Features:
    • File-Watcher für src/content/kommunen
    • Debounced Processing (2000ms)
    • Development/Production-Modus

Kommune-Watcher

  • Datei: src/scripts/kommune-watcher.mjs
  • Funktion: Überwacht Änderungen an Kommunen-Markdown-Dateien
  • Features:
    • Chokidar-basierter File-Watcher
    • Debounce-Mechanismus
    • Manuelle Sync-Trigger

OSM-Grundstrukturen

  • Dateien: src/types/admin-polygon.ts, src/content.config.ts
  • Funktion: Datenstrukturen für OSM-Integration
  • Features:
    • OSM-Polygon-Interfaces
    • Overpass-API-Response-Typen
    • OSM-Admin-Level-Verwaltung

🚧 Noch nicht implementiert

Draw Manager

  • OpenLayers Draw-Interaktion
  • UI-Buttons für verschiedene Geometrie-Typen
  • Draw-Style-Konfiguration
  • Event-Handler für drawstart/drawend

Edit Mode

  • OpenLayers Modify-Interaktion
  • Select-Interaktion für Feature-Auswahl
  • Snap-Interaktion für präzises Editieren
  • Vertex-Editing (Move, Delete, Add)

Vollständige Feature-Sync

  • WFS-T (Transactional Web Feature Service)
  • Bidirektionale Synchronisation
  • Konflikt-Resolution
  • Undo/Redo-Funktionalität

Vollständige OSM-Integration

  • Feature-zu-OSM-Tag-Mapping
  • OSM-XML-Export
  • Overpass-API-Queries
  • OSM-Authentifizierung

Datenfluss

Aktueller Workflow (teilweise implementiert)

  1. Content-Änderung: Markdown-Datei in src/content/kommunen wird geändert
  2. File-Watcher: Kommune-Watcher erkennt Änderung
  3. Debounce: 2000ms Wartezeit für stabile Änderungen
  4. Sync-Trigger: Polygon-Sync-Plugin wird aktiviert
  5. Processing: Kommunen-Daten werden verarbeitet

Geplanter Workflow (vollständig)

  1. Draw/Edit: User zeichnet/bearbeitet Feature auf Karte
  2. Feature-Erstellung: Draw/Edit erstellt OpenLayers-Feature
  3. Property-Setzung: Feature erhält Metadaten und OSM-Tags
  4. Persistierung: Feature wird in Markdown gespeichert
  5. Sync: Polygon-Sync-Plugin synchronisiert mit Backend
  6. OSM-Export: Feature wird für OSM vorbereitet

Technische Grundlagen

OpenLayers-Integration

Der Feature Editor baut auf der bestehenden OpenLayers-Integration auf:

  • Map-Konfiguration: src/config/map-config.ts
  • Projektionsverwaltung: src/utils/crs.ts
  • Layer-Management: src/utils/layer-manager.ts

Content-Collections

Kommunen-Daten werden über Astro Content Collections verwaltet:

typescript
// src/content.config.ts
const kommunen = defineCollection({
  type: 'content',
  schema: z.object({
    title: z.string(),
    wp_name: z.string(),
    osmAdminLevels: z.array(z.number()).optional(),
    // ... weitere Properties
  })
});

OSM-Datenstrukturen

typescript
// src/types/admin-polygon.ts
export interface OSMPolygonFeature extends GeoJSON.Feature {
  id: number;
  properties: {
    name: string;
    admin_level: number;
    wikipedia?: string;
    // ... OSM-spezifische Properties
  };
}

Verwendungsbeispiel (geplant)

typescript
// Feature erstellen, editieren, speichern, exportieren
// 1. Draw Manager aktivieren
activateDrawMode('polygon');

// 2. Feature zeichnen (User-Interaktion)
// 3. Feature erhält automatisch Properties
feature.setProperties({
  name: 'Spielplatz Musterstraße',
  type: 'playground',
  osm_tags: { leisure: 'playground' }
});

// 4. Automatische Persistierung zu Markdown
// 5. Sync zu Backend-Systemen
// 6. OSM-Export vorbereiten

Abhängigkeiten

Interne Abhängigkeiten

  • Map-Konfiguration: src/config/map-config.ts
  • Projektions-Utils: src/utils/crs.ts
  • Layer-Management: src/utils/layer-manager.ts
  • Content-Collections: src/content.config.ts
  • Event-System: src/utils/events.ts

Externe Abhängigkeiten

  • OpenLayers: ol/interaction/Draw, ol/interaction/Modify, ol/interaction/Select
  • Chokidar: File-Watching für Sync-Plugin
  • proj4: Projektionstransformationen