Sprache / Language: Deutsch | English
GML2PostgreSQL ist ein QGIS-Plugin zur automatisierten Übernahme von XPlanung-Objekten aus GML-Dateien in eine bestehende PostgreSQL/PostGIS-Datenbank. Es wurde entwickelt, um Kommunen den Aufwand der manuellen Datenaufbereitung zu ersparen und die Digitalisierung von Bauleitplänen nach dem XPlanung-Standard zu unterstützen.
Das Plugin wurde von der Stadt Wilhelmshaven entwickelt und als Open-Source-Werkzeug für andere Kommunen und Planungsbehörden bereitgestellt.
Herausgeber: Stadt Wilhelmshaven – Geoinformation, Vermessung und Statistik (GVS) Entwickler: Ahmed Letaief Kontakt: GVS@wilhelmshaven.de
- Auswahl eines Ordners mit GML-Dateien (inkl. Unterordner)
- Automatische Erkennung und Verarbeitung relevanter XPlanung-Objektarten
- Unterstützung gemischter Geometrietypen (Punkt, Linie, Fläche) innerhalb einer Objektart
- Koordinatentransformation in EPSG:25832 (UTM Zone 32N)
- Duplikaterkennung anhand der
gml_id– erneutes Ausführen ist sicher - Verarbeitungsprotokoll im Plugin-Fenster mit Export als Logdatei
- Speicherung der Datenbankverbindungsparameter zwischen Sitzungen
Das Plugin verarbeitet folgende Objektarten gemäß XPlanung 5.x:
| Objektart | Geometrie |
|---|---|
| BP_AnpflanzungBindungErhaltung | Punkt, Linie, Fläche |
| BP_BaugebietsTeilFlaeche | Punkt, Linie, Fläche |
| BP_BauGrenze | Linie |
| BP_GemeinbedarfsFlaeche | Fläche |
| BP_GemeinschaftsanlagenFlaeche | Fläche |
| BP_GenerischesObjekt | Punkt, Linie, Fläche |
| BP_GewaesserFlaeche | Fläche |
| BP_GruenFlaeche | Fläche |
| BP_Immissionsschutz | Linie, Fläche |
| BP_LandwirtschaftsFlaeche | Fläche |
| BP_NebenanlagenFlaeche | Fläche |
| BP_NichtUeberbaubareGrundstuecksflaeche | Fläche |
| BP_SchutzPflegeEntwicklungsFlaeche | Fläche |
| BP_SchutzPflegeEntwicklungsMassnahme | Fläche |
| BP_StrassenVerkehrsFlaeche | Fläche |
| BP_UeberbaubareGrundstuecksFlaeche | Fläche |
| BP_VerEntsorgung | Punkt, Linie, Fläche |
| BP_VerkehrsflaecheBesondererZweckbestimmung | Punkt, Fläche |
| BP_WaldFlaeche | Fläche |
| BP_WasserwirtschaftsFlaeche | Fläche |
| BP_Wegerecht | Punkt, Linie, Fläche |
- QGIS 3.x
- PostgreSQL mit PostGIS-Erweiterung
- Python-Paket
psycopg2(in der QGIS-Python-Umgebung installiert) - Ein vorbereitetes Datenbankschema (siehe Datenbankeinrichtung)
Windows (OSGeo4W Shell):
pip install psycopg2-binary
Linux/macOS:
pip3 install psycopg2-binary-
Dieses Repository als ZIP-Datei herunterladen oder klonen:
git clone https://github.com/gvswhv/gml2postgresql.git -
Den Ordner
gml2postgresql(der Ordner mit__init__.py) in das QGIS-Plugin-Verzeichnis kopieren:- Windows:
C:\Users\<Benutzername>\AppData\Roaming\QGIS\QGIS3\profiles\default\python\plugins\ - Linux:
~/.local/share/QGIS/QGIS3/profiles/default/python/plugins/ - macOS:
~/Library/Application Support/QGIS/QGIS3/profiles/default/python/plugins/
- Windows:
-
QGIS starten (oder neu starten), dann unter Erweiterungen → Erweiterungen verwalten und installieren → Installiert das Plugin
gml2postgresqlaktivieren. -
Das Plugin erscheint anschließend in der Symbolleiste und im Menü unter Erweiterungen → GML2PostgreSQL.
Vor dem ersten Einsatz muss das Datenbankschema mit allen benötigten Tabellen angelegt werden.
-
Die Datei
sql/xplan_Objektarten.sqlöffnen. -
In Zeile 16 sowie im gesamten Skript den Schemanamen
xplandurch den gewünschten Namen ersetzen. Empfehlung: Funktion „Suchen & Ersetzen" im Texteditor oder in pgAdmin verwenden. -
Das Skript in pgAdmin oder psql gegen die Zieldatenbank ausführen:
psql -h localhost -U <Benutzer> -d <Datenbank> -f sql/xplan_Objektarten.sql
Hinweis: Das Skript löscht vorhandene Tabellen mit
DROP TABLE IF EXISTS, bevor es sie neu anlegt. Bei einer Neueinrichtung gehen dabei alle vorhandenen Daten verloren.
- Plugin über die Symbolleiste oder das Menü Erweiterungen → GML2PostgreSQL öffnen.
- Über Durchsuchen den Ordner mit den GML-Dateien auswählen. Unterordner werden automatisch einbezogen.
- Datenbankverbindungsparameter eintragen:
- Host – z. B.
localhost - Port – Standard:
5432 - Datenbankname
- Schema – der zuvor eingerichtete Schemaname
- Benutzer
- Passwort
- Host – z. B.
- Auf Starten klicken. Der Fortschritt wird im Protokollbereich angezeigt.
- Nach Abschluss kann das Protokoll über Log speichern als Textdatei exportiert werden.
Die Verbindungsparameter (außer dem Passwort) werden automatisch für die nächste Sitzung gespeichert.
Nach jeder Verarbeitung sollte die Logdatei auf Einträge mit [FEHLER] oder [WARNUNG] geprüft werden:
[FEHLER] INSERT fehlgeschlagen– Ein Feature konnte nicht importiert werden, z. B. wegen ungültiger oder unerwarteter Attributwerte in der GML-Datei. Das Feature wird übersprungen, die Verarbeitung läuft weiter.[WARNUNG] Geometrie nicht konvertierbar– Die Geometrie eines Features konnte nicht in den Zieltyp umgewandelt werden. Das Feature wird übersprungen.[WARNUNG] unbekannter Geometrietyp– Ein Feature enthält einen Geometrietyp, der vom Plugin nicht unterstützt wird.
Duplikate (Features mit einer bereits vorhandenen gml_id) werden stillschweigend übersprungen und als Duplikate gezählt, nicht als Fehler.
- Das Plugin unterstützt ausschließlich XPlanung 5.x. Ältere Versionen (4.x) wurden nicht getestet und werden voraussichtlich nicht korrekt verarbeitet.
- Es werden nur die in der obigen Tabelle aufgeführten Objektarten importiert. Weitere XPlanung-Objektarten (z. B. FP_, LP_, RP_) werden nicht berücksichtigt.
- Kurvengeometrien (CurvePolygon, CompoundCurve, CircularString) werden automatisch segmentiert, da PostGIS-Tabellen einfache Geometrietypen erwarten. Bei sehr stark gekrümmten Geometrien kann dabei eine leichte Abweichung von der Originalgeometrie entstehen.
- Bei Objektarten mit gemischten Geometrietypen (z. B.
BP_Wegerecht) wird jedes Feature anhand seiner tatsächlichen Geometrie automatisch der entsprechenden Tabelle (_po,_li,_py) zugeordnet. - Die Qualität der importierten Daten hängt von der Qualität der GML-Quelldateien ab. Fehlerhafte oder nicht standardkonforme GML-Dateien können zu übersprungenen Features führen.
Das Plugin importiert die Geometrie- und Attributdaten der XPlanung-Objekte, enthält jedoch keine Layerstile. Für eine normkonforme Darstellung der importierten Layer entsprechend der XPlanung-Farbgebung empfehlen wir das Plugin xplan-reader des Kreises Viersen:
Die dort enthaltenen QML-Stile können in QGIS über Layereigenschaften → Stil → Stil speichern → In Datenbank (PostgreSQL) dauerhaft in der Datenbank hinterlegt werden. QGIS lädt den Stil dann beim nächsten Hinzufügen des Layers automatisch.
GNU General Public License v3.0 – © 2025 Stadt Wilhelmshaven
Weitere Details: LICENSE · https://www.gnu.org/licenses/gpl-3.0.html
GML2PostgreSQL is a QGIS plugin for automated import of XPlanung objects from GML files into an existing PostgreSQL/PostGIS database. It is designed to reduce manual data preparation effort for municipalities and support the digitisation of land-use plans according to the XPlanung standard.
The plugin was developed by the City of Wilhelmshaven and released as an open-source tool for other municipalities and planning authorities.
Developer: Ahmed Letaief Publisher: City of Wilhelmshaven – Geoinformation, Surveying and Statisitcs (GVS) Contact: GVS@wilhelmshaven.de
- Select a folder of GML files (subfolders included)
- Automatic detection and processing of supported XPlanung object types
- Mixed geometry support (point, line, polygon) within a single object type
- Coordinate transformation to EPSG:25832 (UTM Zone 32N)
- Duplicate detection by
gml_id– safe to re-run on the same folder - Processing log displayed in the plugin window, exportable as a text file
- Database connection parameters saved between sessions
- QGIS 3.x
- PostgreSQL with PostGIS extension
- Python package
psycopg2installed in QGIS's Python environment - A prepared database schema (see Database Setup)
Windows (OSGeo4W Shell):
pip install psycopg2-binary
Linux/macOS:
pip3 install psycopg2-binary-
Download this repository as a ZIP file or clone it:
git clone https://github.com/gvswhv/gml2postgresql.git -
Copy the
gml2postgresqlfolder (the one containing__init__.py) into your QGIS plugins directory:- Windows:
C:\Users\<Username>\AppData\Roaming\QGIS\QGIS3\profiles\default\python\plugins\ - Linux:
~/.local/share/QGIS/QGIS3/profiles/default/python/plugins/ - macOS:
~/Library/Application Support/QGIS/QGIS3/profiles/default/python/plugins/
- Windows:
-
Start (or restart) QGIS, then go to Plugins → Manage and Install Plugins → Installed and enable
gml2postgresql. -
The plugin will appear in the toolbar and under Plugins → GML2PostgreSQL.
The database schema must be created before the plugin can be used.
-
Open
sql/xplan_Objektarten.sql. -
Replace the schema name
xplanon line 16 and throughout the entire script with your preferred schema name. Using Find & Replace in a text editor or pgAdmin is recommended. -
Run the script against your target database using pgAdmin or psql:
psql -h localhost -U <user> -d <database> -f sql/xplan_Objektarten.sql
Note: The script drops existing tables with
DROP TABLE IF EXISTSbefore recreating them. All existing data in those tables will be lost when re-running the script.
- Open the plugin from the toolbar or via Plugins → GML2PostgreSQL.
- Click Browse to select the folder containing your GML files. Subfolders are included automatically.
- Enter the database connection parameters:
- Host – e.g.
localhost - Port – default:
5432 - Database name
- Schema – the schema name you set up earlier
- User
- Password
- Host – e.g.
- Click Starten (Run). Progress is displayed in the log area.
- Once complete, click Log speichern (Save Log) to export the log as a text file.
Connection parameters (except the password) are saved automatically for the next session.
After each run, the log file should be checked for [FEHLER] (error) and [WARNUNG] (warning) entries:
[FEHLER] INSERT fehlgeschlagen– A feature could not be imported, e.g. due to invalid or unexpected attribute values in the GML file. The feature is skipped and processing continues.[WARNUNG] Geometrie nicht konvertierbar– A feature's geometry could not be converted to the target type. The feature is skipped.[WARNUNG] unbekannter Geometrietyp– A feature contains a geometry type not supported by the plugin.
Duplicates (features with a gml_id already present in the database) are silently skipped and counted as Duplikate, not as errors.
- The plugin supports XPlanung 5.x only. Older versions (4.x) have not been tested and are unlikely to be processed correctly.
- Only the object types listed in the table above are imported. Other XPlanung object types (e.g. FP_, LP_, RP_) are not supported.
- Curve geometries (CurvePolygon, CompoundCurve, CircularString) are automatically segmented to simple geometry types as required by PostGIS. This may introduce minor deviations from the original geometry for strongly curved shapes.
- For object types with mixed geometry (e.g.
BP_Wegerecht), each feature is automatically routed to the correct table (_po,_li,_py) based on its actual geometry. - Import quality depends on the quality of the source GML files. Non-conformant or malformed GML files may result in skipped features.
This plugin imports geometry and attribute data for XPlanung objects but does not include layer styles. For standards-compliant visualisation of the imported layers using official XPlanung colours, we recommend the xplan-reader plugin by Kreis Viersen:
The QML styles included there can be saved permanently to the database in QGIS via Layer Properties → Style → Save Style → In Database (PostgreSQL). QGIS will then load the style automatically the next time the layer is added.
GNU General Public License v3.0 – © 2025 Stadt Wilhelmshaven