Hallo Herr Wolff,
also das Ding ist eine harte Nuss.
Ich habe jetzt einige Zeit damit verbracht und bin bisher nur zu einem mittelmäßigen Ergebnis gekommen. Ganz ahnungslos bin ich hier nämlich nicht, denn mit MySQL-Datenbanken, die PostgreSQL Datenbanken sehr ähnlich sind, kenne ich mich etwas aus. Dieses Forum hier nutzt beispielsweise eine solche. Ich habe mich also mal daran gewagt.
Vorab
Ich habe keine Ahnung, wie das XPlanung-Plugin hinterher genau funktionieren soll. Möglicherweise fehlen hier letzte Konfigurationen, um das lauffähig zu machen. Ich habe zumindest die Datenbank ordnungsgemäß einrichten und eine Verbindung zu ihr (über die QGIS eigene PostGIS datenbank-Verbindungsfunktion) herstellen können. Die datenbankverbindung über das XPlanung Plugin scheint auch zu klappen, allerdings soll ich dann irgendwelche Bereiche auswählen, von denen mir aber scheinbar keiner angezeigt wird. Ich habe keine Ahnung, was ich hier einstellen soll.
Möchte ich über Vektor --> XPlanung -->Importieren aber eine GML importieren (habe hier eine Test-GML in der Version 5.2 der XLeitstelle genommen) erfolgt folgender Fehler:
Code:
2022-07-20T22:57:49 CRITICAL Import mit ogr2ogr fehlgeschlagen, Details im Protokoll
2022-07-20T22:57:49 CRITICAL b'ERROR 1: PQconnectdb failed.\r\nFATAL: password authentication failed for user "xplanung_user"\r\n\r\nERROR 1: PostgreSQL driver doesn\'t currently support database creation.\r\nPlease create database with the `createdb\' command.\r\nERROR 1: PostgreSQL driver failed to create PG:host=127.0.0.1 dbname=xplanung_db user=xplanung_user password=XXXXXXXXXXXX\r\n'
Die Fehlermeldung sieht danach aus, als stimmen die Zugangsdaten nicht. Dass diese aber stimmen müssen, ergibt sich aus der klassischen Verbindung der Datenbank mit QGIS, die einwandfrei funktioniert.
Ich habe allerdings auch keine Ahnung, wie man nun eine GML korrekt importiert. Über all das gibt es einfach keine ausreichende Dokumentation. Selbst für Open Source ist das alles ungewöhnlich mager. Ich überlege mir, das möglicherweise mal unter Linux laufen zu lassen. Aber vielleicht kommen Sie erst einmal damit weiter.
In meiner Testumgebung habe ich keinen Wert darauf gelegt das System so einzurichten, dass man damit produktiv arbeiten sollte. Auch kenne ich Ihre Anforderungen nicht. Sie haben in Ihrem Profil leider keine Angaben gemacht, die darauf schließen lassen, ob Sie das i.A. eines Unternehmens, einer Behörde oder aus Spaß an der Freude machen und welche technische Infrastruktur hier vorherrscht. Bei meiner weiteren Beschreibung gehe ich also davon aus, dass Sie mindestens Windows 10 nutzen, volle Administrationsrechte hieran haben und nicht in einem Unternehmensnetzwerk arbeiten wollen.
Was die Anleitung anbelangt, so entschuldige ich mich vorab für unpräzise Sprache oder den einen oder anderen Schlenker. Ich arbeite üblicherweise mit MySQL-Datenbanken und nutze hierfür "phpMyAdmin" oder im Zweifel "DBeaver". "pgAdmin 4" ist nicht meine Stärke und auch sonst arbeite ich recht selten mit QGIS. Aber ich denke, es ging trotzdem. Auch für fehlende Bilder möchte ich mich entschuldigen. Ich ergänze gerne den einen oder anderen Screenshot, wenn es unverständlich ist, allerdings im Voraus alles per Screenshots zu dokumentieren, wäre ein riesiger Aufwand geworden.
Auch sonst sei im Einklang mit unseren Nutzungsbedingungen erwähnt, dass es sich hierbei nur um Tests handelt. Das Ausprobieren meiner Anleitung erfolgt auf eigene Gefahr!
1. PostgreSQL Server installieren
Was Sie als Erstes installieren müssen, ist einen PostgreSQL Server. Den passenden Installer finden Sie direkt hier:
https://www.enterprisedb.com/downloads/p...-downloads
Ich nutze Version 14.4 in der Windows 64bit Version. Bei der Installation erst mal alles durchwinken. Nun muss ein Passwort für den database superuser gesetzt werden. Ich verwende der einfacheren Verständlichkeit dieser Anleitung halber das Passwort "XPlanung2022". Im Anschluss muss der Port, über den die Datenbanken angesprochen werden können, festgelegt werden. Ich belasse es hier bei der Voreinstellung 5433. Dann soll man noch Sprache und Ort angeben. Ich wähle "German, Germany". Den Rest durchwinken und die Installation startet. Das dauert ein Weilchen.
Zum Schluss meldet das Setup die erfolgreiche Installation und fragt, ob wir den "Stack Builder" starten wollen. Den Haken lasse ich gesetzt. Ansonsten, falls vergessen, kann man ihn hier aufrufen: Start --> PostgreSQL 14 --> Application Stack Builder
2. PostGIS Funktionalität nachrüsten
Jetzt haben wir die Möglichkeit PostgreSQL Datenbanken anzulegen, aber von PostGIS versteht der Server noch nichts. Das ändern wir jetzt mit dem Stack Builder. Auf dessen Startbildschirm müssen wir auswählen, für welche Installation Zusatzfunktionen installiert werden sollen. Ich wähle hier "PostgreSQL 14 (x64) on port 5433" aus und klicke auf "Weiter". Es öffnet sich ein Baum mit etlichen Optionen (Internetzugang notwendig). Unter "Spacial Extensions" finden wir das PostGIS 3.1 und 3.2 Bundle. Ich habe mich für das aktuelle 3.2 Bundle entschieden, wähle diese aus und klicke auf "Weiter".
Anschließend kann man die Installation über den Stack Builder laufen lassen. Einfach alles durchwinken und Abfragen mit "Ja" bestätigen. Sobald die Installation mit "Completed" bestätigt, kann sie mit einem Klick auf "Close" schließen.
3. Mit pgAdmin 4 auf Server zugreifen
So. Wir haben nun einen PostgreSQL Server auf dem Rechner laufen, der PostGIS kann. Nun müssen wir die entsprechenden Datenbanken mit Herrn Stöbls SQL-Dateien anlegen und vorbereiten.
Dafür öffnen wir zunächst pgAdmin 4 (Start --> PostgreSQL 14 --> pgAdmin 4). Nach dem Start der Software wird unser Passwort abgefragt. Ich gebe also "XPlanung2022" ein.
Im Anschluss kann ich links im Baum auf "Servers" klicken und hier den PostgreSQL Server 14 aufrufen. Das Passwort wird erneut abgefragt. War die Eingabe korrekt, öffnen sich darunter weitere Optionen.
4. Neuen User und neue Datenbank anlegen
Ich bin kein Freund davon, die Standarddatenbank und Standarduser für die XPlanungs-Zwecke zu nutzen. Deshalb lege ich einen neuen User und eine neue Datenbank an. Zuerst der User. Hierfür klicke ich mit einem Rechtsklick unten auf "Login/Group Roles" und wähle "Create... --> Login/Group Role...".
Es öffnet sich ein Dialog zur Erstellung. Unter "Name" gebe ich "xplanung_user" an. Im Reiter "Definition" lege ich als Passwort wieder "XPlanung2022" fest (im Produktiveinsatz ist ein sicheres Passwort natürlich sinnvoller). Im Reiter "Privileges" gebe ich dem Nutzer alle Rechte. Im Anschluss speichere ich den Nutzer. Der Nutzer "xplanung_user" sollte danach auch links im Baum unter "Login/Group Roles" zu sehen sein. (Ansonsten mal einen Rechtsklick auf "Login/Group Roles --> Refresh")
So weit, so gut. Jetzt die neue Datenbank.
Unter dem Menüpunkt "Databases" im Baum gibt es offenkundig bereits eine Standard-Datenbank namens "postgres". Ich möchte aber eine neue, eigene Datenbank anlegen. Deshalb mache ich auf "Databases" einen Rechtsklick und wähle "Create... --> Database". Die Datenbank nenne ich "xplanung_db" und als Owner wähle ich den soeben erstellten Benutzer "xplanung_user" aus. Danach kann ich bereits speichern. Danach sollte unter "Databases" nun auch die Datenbank "xplanung_db" erscheinen (ansonsten mal einen Rechtsklick auf "Databases --> Refresh")
Jetzt klicken wir auf die Datenbank "xplanung_db" im Baum links und anschließend öffnen wir in der oberen Menüleiste über "Tools --> Query Tool". Es öffnet sich rechts ein Befehlsfenster. Dort geben wir den folgenden Befehl ein:
Code:
CREATE EXTENSION postgis;
Dann drücken wir danach auf den Play-Button oberhalb des Befehlsfensters oder drücken die F5 Taste. Im Anschluss sollte unten als Ergebnis etwa das hier erscheinen:
Code:
CREATE EXTENSION
Query returned successfully in 994 msec.
So, es lohnt sich, das hier einmal zum Verständnis zusammenzufassen. Wir haben einen PostgreSQL Datenbankserver, der dank unserer Erweiterungsinstallation über den Stack Builder auch PostGIS kann und auf dem Port 5433 läuft. Wir haben uns mit der Software pgAdmin 4 auf den Server aufgeschaltet und einen neuen Benutzer namens "xplanung_user" erzeugt und ihm das Passwort "XPlanung2022" zugeordnet und festgelegt, dass dieser User volle Rechte hat. Im Anschluss haben wir eine neue Datenbank namens "xplanung_db" erzeugt und festgelegt, dass der Nutzer "xplanung_user" Besitzer dieser Datenbank ist. Außerdem haben wir der Datenbank per Befehl verklickert, dass sie jetzt auch PostGIS versteht.
>> Hier Kaffeepause einfügen <<
Nun bereiten wir alles nach Herrn Ströbls Anleitung vor.
5. Notwendige User-Rollen anlegen
Als Erstes müssen die notwendigen User-Rollen für unsere Datenbank angelegt werden, damit das Ganze mit XPlanung läuft. Herr Ströble hat hierfür eine SQL-Datei (BD_User.sql) geschrieben, welche die notwendigen Befehle automatisch ausführt. Sie befindet sich hier:
https://github.com/bstroebl/xplanPostGIS. Wir müssen die Datei nicht herunterladen. Wir können einfach deren Textinhalt kopieren.
Jetzt wählen wir im Baum unsere Datenbank "xplanung_db" aus und klicken oben in der Menüleiste wieder auf "Tools --> Query Tools". Es öffnet sich rechts erneut ein Befehlseingabefenster. In dieses fügen wir den Inhalt der "DB_User.sql" von Herrn Ströbl ein (bitte exakt ohne Fehler kopieren, altes Zeug vorher rauslöschen, falls vorhanden) und klicken dann auf das "Play" Symbol oberhalb des Eingabefensters (oder F5 Taste drücken). Als Ergebnis sollte uns unten so etwas wie
Code:
GRANT ROLE
Query returned successfully in 34 msec.
angezeigt werden.
Außerdem sollten jetzt, wenn wir erneut im Baum einen Rechtsklick auf "Login/Group Roles --> Refresh" machen, neue User angezeigt werden, zum Beispiel der Nutzer "bp_user".
6. Basischema anlegen
Wir haben nun alle Vorbereitungen getroffen, um unsere Datenbank mit Inhalten zu füllen. Hierzu muss zuerst das Basischema, also quasi die notwendigen Tabellen für die XPlanung-Funktionalität angelegt werden. Herr Ströbl hat hierfür ebenfalls eine SQL-Datei ("XP_Basisschema.sql") zur Verfügung gestellt. Diese findet man ebenfalls hier:
https://github.com/bstroebl/xplanPostGIS.
Auch hier reicht es, den Textinhalt (ohne Fehler) zu kopieren. Da es sich hier aber doch um einige Befehle handelt, gebe ich als Tipp, dass man auch auf das schöne "Kopieren" Symbol ("Copy Raw Contents") in Github rechts neben dem Stift klicken kann, wenn man die Datei in Github angeklickt und geöffnet hat. Das macht das Kopieren deutlich einfacher.
Nun öffnen wir wieder unser pgAdmin 4. Ich empfehle hier das SQL Query Eingabefenster zu schließen und dann im Baum links zu "Databases --> xplanung_db --> Schemas --> Tables" zu navigieren. Nun öffnen wir wieder über das obere Menü mit Klick auf "Tools --> Query Tool" das Befehlseingabefenster. Das sollte jetzt auch wieder leer sein!
Hier fügen wir nun den Inhalt der "XP_Basisschema.sql" ein und klicken wieder auf den Play Button oder drücken die F5 Taste. Als Ergebnis sollte etwas, wie das hier, erscheinen:
Code:
HINWEIS: Spalte »gid« wird mit geerbter Definition zusammengeführt
HINWEIS: Spalte »gid« wird mit geerbter Definition zusammengeführt
HINWEIS: Spalte »gid« wird mit geerbter Definition zusammengeführt
HINWEIS: Spalte »gid« wird mit geerbter Definition zusammengeführt
HINWEIS: Spalte »gid« wird mit geerbter Definition zusammengeführt
HINWEIS: Spalte »gid« wird mit geerbter Definition zusammengeführt
INSERT 0 1
Query returned successfully in 560 msec.
Außerdem müssten nun im Baum links in unserer Datenbank "xplanung_db" unter Schemas, nachdem wir wieder per Rechtsklick auf "Schemas --> Refresh" den Inhalt aktualisiert haben neue Schemata entstanden sein, z.B. "XP_Basisobjekte".
7. Farbschemata und QGIS-Anpassungen
So. Spätestens jetzt lohnt es sich, die Dateien von Herrn Ströbl herunterzuladen und zu sortieren. Wir müssen jetzt nämlich etliche SQL-Befehle ausführen und das ist über Dateien dann doch deutlich leichter. Wir benötigen jedoch nicht alle Dateien. Da die im Master Branch vorhandenen Skripte stets aktuell sind und wir gerade alles von Grund auf neu einrichten, können wir uns die ganzen Konvertierungsskripte ("XXzuXX.sql") sparen. Auch die Bugfixes ("fix_XX.sql") benötigen wir nicht. Die "XP_Basisschema.sql" und "DB_User.sql" können auch weg, denn die haben wir ja bereits verwendet. Die "prepare_for_import.sql" benötigen wir auch nicht und die "Readme.md" darf selbstverständlich auch weg.
Auch das Skript "createdb.sh" ist unnötig, denn wir gehen diese Schritte hier gerade manuell durch.
Wir sollten nun 12 Dateien im Ordner haben, die wir jetzt nacheinander in dieser Reihenfolge
- BP_Fachschema_BPlan.sql
- FP_Fachschema_FPlan.sql
- LP_Fachschema_LPlan.sql
- RP_Fachschema_Raumordnungsplan.sql
- SO_Fachschema_SonstigePlaene.sql
- QGIS.sql
- XP_QGIS.sql
- BP_QGIS.sql
- FP_QGIS.sql
- LP_QGIS.sql
- SO_QGIS.sql
- layer_styles_QGIS.sql
ausführen werden. Dies geschieht auf Basis der folgenden Anleitung mit allen Dateien:
- Datenbank xplanung_db links auswählen
- Query Tool öffnen
- Im Query Tool Datei nach Reihenfolge über Öffnen-Button raus suchen und öffnen (=SQL-Befehl wird ins Befehlsfenster eingefügt)
- Befehle ausführen (Play-Button oder F5 Taste)
- Mit nächster Datei wieder bei Schritt 3 beginnen, bis alle Dateien abgearbeitet sind
Fertig.
>> Hier zweite Kaffeepause einfügen <<
8. Datenbank mit QGIS verbinden
So. Nun öffnen wir QGIS. Dort wählen wir im Menü "Datenbank --> XPlanung -->Einstellungen". Es öffnet sich ein Dialog zur Einrichtung der Datenbank. Hier tragen wir nun die Werte ein, die wir zuvor konfiguriert hatten:
- Service: (egal, ich schreibe "XPlanung-Datenbank")
- Host: localhost (das ist der eigene Rechner, auf dem ja gerade der gesuchte Server läuft)
- Port: 5433 (kommt uns bekannt vor)
- Datenbankname xplanung_db (auch keine Überraschung)
- Benutzer: xplanung_user (auch klar)
- Passwort: XPlanung2022 (...oder eben das eigene gewählte)
Hier kommt dann diese seltsame Bereichabfrage mit der ich nichts anfangen kann.
9. PostGIS Datenbank klassisch verbinden
Man kann eine PostGIS Datenbank aber auch anders mit QGIS verbinden, allerdings befürchte ich, dass das XPlanung Plugin diese Verbindung nicht nutzen kann. Dennoch erwähne ich es mal:
Hierzu einfach links im QGIS Browser im Baum per Rechtsklick auf "PostGIS --> Neue Verbindung..." eine neue Verbindung anlegen.
Name: XPlanung-Datenbank (Name ist frei wählbar)
Dienst: (freilassen)
Host: localhost
Port: 5433
Datenbank: xplanung_db
Jetzt den Reiter "Basic" anklicken, hier den Benutzer und das Passwort (xplanung_user : XPlanung2022) eintragen und im Anschluss auf den Button "Verbindung testen" klicken. Bei mir scheint das zu funktionieren.
Fazit
Tja, das ist erst einmal Stand der Dinge. Die Datenbank ist korrekt vorbereitet, die Verbindung scheint zu klappen und dennoch gibt es etliche fehler. Allerdings wimmelt es im Netz nur so von Leuten, die anscheinend ähnliche Probleme damit haben QGIS und SQL-Datenbanken ordentlich miteinander zu verbinden. Vielleicht wissen Sie, ob ich etwas bei der Anwendung der Software mache? Ansonsten werde ich die Tage mal schauen, dass ich das mit einem frischen QGIs auf einem Linuxsystem ausprobiere.
Beste Grüße
Pascal Geiger