Zum Inhalt springen

Geodaten-Plattform in der Cloud

Die EEF entwickelt, genehmigt und betreibt Hybridparks in ganz Deutschland - Windenergie an Land kombiniert mit Batteriespeichern. Die Geodaten dazu - Planungslayouts, Restriktionen und Eigentümerdaten - lagen ohne homogene Datenstruktur in den Projekten lokal auf einzelnen Laptops.

  • Erneuerbare Energien
  • Geodaten & Kartenanwendungen
  • Systemablösung & Migration
  • Systemintegration & Datenarchitektur
  • Cloud & Betrieb
  • Hybridparks
  • Wind onshore und BESS
eef.de (öffnet in neuem Tab)
Beispielansicht der Geodaten-Plattform: Layer eines Hybridparks mit Version, Änderung und Synchronisationsstatus.
LAUFZEIT
Oktober 2025 bis heute
Erstes produktives Rollout November 2025
TEAM
1 Product Owner, 2 Backend-DEVs, 1 Data-Engineer
gemeinsam mit den Planungsingenieur:innen der EEF
BRANCHE
Erneuerbare Energien
Projektentwicklung, Genehmigung, Bau sowie Betrieb von Hybridparks
ROLLE
Digitale Produktentwicklung
Embedded Softwareentwicklung, Data Engineering, Prozessberatung, MVP-Priorisierung
BETRIEB
Erst Pilotierung, dann Go-Live
Maintenance & Weiterentwicklung im eingebetteten Team
OUTCOME
Konzeption und Entwicklung einer Geodaten-Plattform in der Cloud
Neues Datenmodell, Import-Pipeline, QGIS-Migration, Webkartenanwendung

Das Outcome: Alle Geodaten der Hybridpark-Projekte liegen heute strukturiert in der Cloud, über eine Webanwendung für alle aus der Organisation zugänglich. Wir haben die Plattform gebaut und die Prozesse gestaltet, die das tragen: Wechsel zu einer Open-Source-Plattform inklusive Migration, neues Datenmodell und Geo-Serverarchitektur.

Wenn jede:r Planungsingenieur:in im Projekt mit heterogenen Layernamen, Attributen und Ordnerstruktur lokal auf dem eigenen Rechner arbeitet, ist eine Projektübergabe bei Urlaub/Krankheit oder die nachträgliche Nachvollziehbarkeit von Entscheidungen zeitaufwendig. Jede Frage, die mehr als ein Projekt betrifft - wie viele Anlagen mit welcher Nabenhöhe stehen gerade in der Genehmigung, und auf wie viel gesicherter Fläche -, sowie jeder Zugriff von außerhalb der Planung bedeutet dann: Beim Fachbereich nachfragen.

Neben dieser Problemstellung war die EEF auch an hohe Lizenzgebühren eines proprietären Lizenzgebers gebunden - mit Kosten, die mit jedem weiteren Arbeitsplatz mitwachsen. Diese Ablösung haben wir geführt und das Unternehmen auf die Open-Source-Plattform QGIS gebracht. Ein reiner Anwendungswechsel hätte allerdings die Lizenzrechnung gelöst und sonst nichts.

Dahinter steht die eigentliche Frage, und die ist keine GIS-Frage: Mehr Projekte gleichzeitig zu bearbeiten geht nur über einen höheren Automatisierungsgrad - der Zeitaufwand je Projekt muss sinken. Automatisieren lässt sich aber nur, was maschinell lesbar an einem Ort liegt. Wenn jedes Projekt lokal auf einem Rechner liegt und seine eigene Struktur mitbringt, fehlt dafür schlicht die Grundlage. Es fehlten nicht die Werkzeuge - es fehlten die Daten, auf die man sie hätte ansetzen können.

Der Auftrag war deshalb auch ein Datenmodell für die Fachsprache der Projektentwicklung zu bauen - von der Windenergieanlage bis zum Batteriespeicher - und einen Weg, es in den Planungsalltag und in die Cloud zu bringen, während die Migration lief und die Planung weiterarbeiten musste.

Was heute in der Plattform liegt

Früher lagen die Geodaten lokal auf einzelnen Laptops, jedes Projekt mit eigener Struktur. Heute liegen sie an einem Ort, in einem gemeinsamen Datenmodell.

  • Dreistellige Projektanzahl

    Hybridpark-Projekte mit ihren Geodaten

  • Mehrere tausend

    Layer in der Plattform, über alle Projektphasen hinweg - Planung, Genehmigung, Bau, Betrieb

  • 1 Datenmodell

    für alle Projekte die gleichen Layertypen - jeweils mit festem Attributs-Schema

Was wir gebaut haben

Vier Teile, die zusammen einen Kreislauf bilden: Was in QGIS entsteht, landet in der Datenbank. Was in der Datenbank steht, ist in QGIS, in der App und in der Geo-Karte sofort sichtbar - ohne dass jemand per Mail eine Datei verschickt.

Ein Datenmodell in der Sprache der Planung

Zahlreiche Layertypen, jeder mit eigener Tabelle in PostGIS und festem Schema aus Pflicht- und optionalen Feldern: Anlagenstandorte, Abstandsflächen, Planungsrecht, Richtfunkstrecken, Kabeltrassen, Kranstellflächen, Fundamente, Zuwegungen, Netzverknüpfungspunkte, Batteriespeicher. Das Modell ist entlang der Fragen entstanden, die im Projekt von verschiedensten Fachbereichen gestellt werden - und es deckt beide Seiten des Hybridparks ab: Für Batteriespeicher gibt es einen eigenen Layertyp, sie sind kein Anhängsel der Windplanung.

Ein Beispiel: Der Typ für Anlagenstandorte verlangt Anlagennummer, Anlagentyp und Nabenhöhe. Damit ist die Nabenhöhe in jedem Projekt an derselben Stelle - und eine Auswertung über alle Projekte hinweg wird zu einer Abfrage statt zu einer Rundmail.

Ein Importweg, der auch bei >500 Layern nicht durcheinandergerät

Unser entwickeltes QGIS-Plugin packt Projekt und GeoPackage als Archiv nach S3 und meldet den Import an. Der Auftrag geht in eine FIFO-Warteschlange - eine Reihenfolge je Projekt. Eine Lambda-Funktion nimmt ihn auf, liest den Upload, schreibt den Projektstand ins Archiv, prüft die Layer gegen das Datenmodell, schreibt sie nach PostGIS und legt für jeden Layer den passenden Featuretype im Geoserver an.

Die Reihenfolge je Projekt ist der Punkt, an dem viele Sync-Systeme scheitern: Zwei Push-Vorgänge am selben Projekt können sich nicht überholen und sich damit nicht gegenseitig überschreiben. Was trotzdem fehlschlägt, landet in einer Dead-Letter-Queue und ist einsehbar.

Live statt Kopie, Delta statt Vollstand

Layer im Datenmodell werden nicht heruntergeladen. Der Geoserver liest die Tabellen direkt und veröffentlicht sie über WFS - QGIS und die Geo-Karte in der Web-App zeigen denselben Stand, in dem Moment, in dem er sich ändert. Ein Pull in QGIS passt für diese Layer nur die Quelle an, es fließen keine Daten.

Für alles andere gibt es den Delta-Mechanismus. Das Plugin fragt den Serverstand im Minutentakt ab und vergleicht ihn mit dem geöffneten Projekt: Neu, geändert, umbenannt, entfernt. Diese Prüfung schreibt nichts - sie zeigt nur an. Erst der Delta-Pull baut ein Archiv aus genau den geänderten Vektor- und Rasterlayern und wendet es auf das offene Projekt an. Übertragen wird die Änderung, nicht das Projekt.

Historie statt Hoffnung

Jede Änderung an einem Layer im Datenmodell wird systemseitig historisiert, mit Zeitpunkt und Urheber. In der Web-App ist sichtbar, wer wann was zuletzt geändert hat. Gelöschte Layer lassen sich aus der Historie zurückholen.

Beim Löschen in QGIS werden Daten, Metadaten und der veröffentlichte Geoserver-Layer gemeinsam entfernt. Es bleiben keine Leichen zurück, die in der Karte noch auftauchen.

Auf demselben Datenmodell setzen die digitalisierte Flächenanalyse und die Vertragsgenerierung auf - dazu gibt es einen eigenen Showcase.

„Heute bedeutet eine Urlaubsübergabe keinen halben Tag Vorbereitung am GIS-Projekt mehr: Das Projekt steht allen Kolleg:innen jederzeit zentral zur Verfügung, sodass sie direkt auf den aktuellen Stand zugreifen können. Auch andere Fachbereiche können jederzeit selbst in die Web-App schauen und die Informationen nutzen, ohne dafür GIS-Kenntnisse zu brauchen. Das erleichtert die Zusammenarbeit spürbar und macht aktuelle Projektstände für alle zugänglich. Dazu kommt der direkte und offene Austausch, durch den immer gute Lösungen entstehen.“

S. Karaman, Planungsingenieurin & Key-UserinEEF Erneuerbare Energien Fabrik GmbH

Unsere Vorgehensweise

Pilotphase mit Key-Userinnen aus der Planung → Rollout → Hypercare

Durchgehendes Prinzip: MVP - erst der kleinste Umfang, der echten Nutzen bringt, dann erweitern.

Erst pilotieren, dann ausrollen

Wir sind nicht mit einem fertigen Datenmodell angetreten. Am Anfang stand eine Pilotphase mit Key-Userinnen aus dem Planungsteam: Mit ihnen haben wir die Migration an echten Projekten erprobt - und in denselben Sitzungen das Datenmodell erarbeitet. Welche Felder Pflicht sind, hat sich daran entschieden, welche Fragen im Projekt tatsächlich beantwortet werden müssen.

Erst als die Pilotierung abgeschlossen war, sind wir in den Rollout gegangen. Das kostet Zeit, in der außerhalb des Pilotkreises niemand etwas sieht. Der Gegenwert: Beim Rollout stand kein Entwurf zur Diskussion, sondern ein Modell, das an echten Projekten funktioniert hatte - und es gab Menschen im Planungsteam, die es erklären konnten, weil sie es mitgebaut hatten.

MVP statt Vollausbau - auch beim Datenmodell

Für das Datenmodell galt derselbe Ansatz wie für alles andere: Erst der kleinste Umfang, der echten Nutzen bringt, dann erweitern. Nicht alle Layertypen auf einmal, sondern die, an denen sich im Alltag entscheidet, ob die Plattform trägt.

Dieselbe Logik erklärt, warum die Plattform bis heute zwei Klassen von Layern kennt: Standardisierte Layer im Datenmodell und alles andere. Das „alles andere" ist keine Nachlässigkeit, sondern eine Entscheidung. Niemand sollte gezwungen sein, eine schnell gezogene Pufferfläche oder einen Layer aus einer externen Quelle in ein Datenmodell zu pressen - schon gar nicht mitten in einer Migration unter Zeit- und Kostendruck.

Bemerkenswert ist, wer diese Entscheidung getroffen hat: Wir haben die Migration selbst geführt - wir hätten den Takt vorgeben und das Datenmodell zur Bedingung machen können. Genau das haben wir nicht getan. Ein Datenmodell, das den Alltag blockiert, wird umgangen; dann steht es in der Dokumentation, aber die Daten liegen woanders.

Nach dem Rollout: Hypercare statt Übergabe

Der Go-Live war nicht das Ende des Auftrags, sondern der Anfang einer Hypercare-Phase: Enge Begleitung des Planungsteams, kurze Wege für Fragen und Fehlermeldungen, schnelles Nachschärfen dort, wo das Modell in der Praxis klemmte.

Der Grund dafür ist unspektakulär und entscheidend: Ein Werkzeug, das täglich benutzt wird, gewinnt sein Vertrauen in den ersten Wochen oder nie. Wenn die erste Fehlermeldung drei Tage liegen bleibt, arbeiten die Leute wieder lokal weiter.

Sprache und Anwendung

  • Python 3.13
  • Kotlin
  • Spring Boot
  • TypeScript
  • Preact

Geodaten

  • PostgreSQL mit PostGIS
  • QGIS und PyQGIS
  • GDAL / OGR
  • GeoPandas

Daten und Pipelines

  • SQLAlchemy
  • Flyway
  • Prefect
  • Apache Arrow
  • GraphQL-Anbindung externer Geodatenquellen

Karte und Frontend

  • OpenLayers
  • Leaflet
  • D3
  • TanStack Table

Betrieb

  • AWS
  • Pulumi
  • Docker
  • Datadog

Qualität

  • pytest
  • ruff
  • OWASP Dependency-Check
  • pre-commit