Posted on

QGIS mit Microsoft Access verwenden

Heute geht es um die Verwendung einer sehr häufig genutzten Datenbank, nämlich Microsoft Access im Zusammenspiel mit QGIS. Ich zeige, wie man mit QGIS auf die Daten in Access zugreifen kann und Punktgeometrien darstellen kann.

Als Geograf wünscht man sich natürlich immer eine PostgreSQL- oder doch zumindest eine Spatiallite-Datenbank, wenn es um die Arbeit mit Geodaten geht. Doch zumindest meine Praxis zeigt, dass gerade Microsoft Access in vielen Büros und Gemeinden noch zum Einsatz kommt. Häufig wird dabei eine zweigleisige Strategie benutzt: In Access werden die Sachdaten gespeichert und in einem CAD-Plan oder etwas ähnlichem werden die Geoinformationen gespeichert. Dabei ist zwangsläufig das eine oder das andere nicht auf der selben Aktualität wie das andere.

Deshalb kommt häufig der Wunsch auf, den Plan nicht mehr manuell erstellen zu müssen, sondern ihn aus den Daten der Access-Datenbank erstellen zu lassen. Ein Wechsel der Datenbank steht dabei eigentlich nie zur Debatte, denn die Arbeitsweise mit Access ist etabliert und neue Formulare und Verfahren sind meist nur schwer durchzusetzen.

Aller Unkenrufe zum Trotz ist Microsoft Access zu aller erst ein einfach zu benutzendes Datenbanksystem mit einfacher Formulargestaltung. Man benötigt keinen Server, es ist mehrbenutzerfähig und wohl deshalb sehr beliebt. Sogar ESRI hat eine Erweiterung auf das Access-Dateiformat für ArcGIS entwickelt – die Geodatabase.

Die im Beitrag benutzten Techniken und Schlagworte sind diesmal ODBC, virtuelle Layer, virtuelle Dateien und SQL. Aber kein Grund zur Panik, das klingt schlimmer als es ist.

Machen wir das Beste aus der Situation, also ran an die Buletten!

Eine ODBC-Verbindung zu Microsoft Access herstellen

Die Open Database Connectivity, zu deutsch “Offene Datenbank-Verbindungsfähigkeit” ist ein Werkzeug unter Windows, mit dem man Verbindungen zu Datenbanken, wie einer Access-Datenbank unter einem einzigartigen Namen bereitstellen kann. Das Erscheinungsbild des Einstellungsdialoges weist auf das Alter der Technologie hin, funktioniert aber auch heute noch tadellos. Mit Hilfe einer ODBC-Verbindung kann man Daten aus einer Datenbank auslesen und auch manipulieren.
QGIS nutzt die ODBC-Schnittstelle, um Tabellen aus Access zu laden. Diese Tabellen können wir dann, ähnlich wie Attributtabellen oder importierte CSV-Tabellen behandeln.

Der Dialog zum Erstellen einer ODBC-Verbindung zeigt sich folgendermaßen:

Im Grunde wählt man eine Access-Datenbank aus und vergibt einen eindeutigen Namen, mit dem man die Verbindung identifizieren kann. Das ist schon alles, was zu tun ist. Aufpassen muss man bei der Art der ODBC-Verbindung, es gibt 32-Bit und 64-Bit Verbindungen. Je nach Version des Clients – hier QGIS – muss man die passende ODBC-Verbindung wählen. Bei einem 32-Bit QGIS die 32-Bit ODBC-Verbindung und für ein 64-Bit QGIS eine 64-Bit ODBC-Verbindung. Ach so, und es muss zwingend eine Datenbank Typ MDB sein. Das neue Access-Format funktioniert nicht mit ODBC, zumindest kann man keine *.aacdb Dateien auswählen.

Die ODBC-Verbindung in QGIS nutzen

Ich nutze QGIS 2.99 um das Verfahren zu demonstrieren, der Dialog ist aber ähnlich in der aktuellen QGIS-Version 2.18. Es sollte kein Problem sein, die Vorgehensweise auch in 2.18 anzuwenden. Falls doch, einfach in die Kommentare schreiben oder sonst wie melden.
Für diesen Blogpost habe ich vier Orte mit Koordinaten und Namen in einer Access-Datenbank gespeichert. Die Koordinaten sind in Gauß-Krüger Zone 2 mit typischen Rechts- und Hochwerten. So sind auch die Spalten in Access benannt. Folgende Screenshots und die Tabelle zeigen die verwendeten Daten:

id name rechtswert hochwert
1 Mitlosheim 2556110.9615 5489015.1827
2 Weiskirchen 2557385.1214 5489912.4784
3 Weiskirchen 2559269.4423 5491401.9892
4 Waldhölzbach 2555303.3954 5490917.4495
Lage und Namen der Ortschaften

Die ODBC-Verbindung in QGIS findet man unter “Vektor->Quelltyp Datenbank->Typ ODBC”. Schließlich wählt man eine neue Verbindung aus, gibt der Sache einen Namen und gibt unter “Datenbank” den weiter oben gewählten ODBC-Verbindungsnamen ein. Der Screenshot zeigt alle von mir gemachten Einstellungen auf einen Blick.

ODBC Verbindung in QGIS einrichten
ODBC Verbindung in QGIS einrichten

QGIS wird vor dem Hinzufügen der Tabelle nach einem Passwort fragen, falls keins definiert ist bestätigt man einfach mit <Return>. Et voilà, die Tabelle “Orte” aus Access ist in QGIS hinzugefügt worden. Im nächsten Schritt machen wir aus der geometrielosen Tabelle eine Tabelle mit einer Punktgeometrie.

Punktlayer aus Koordinaten erzeugen

Eine Möglichkeit, aus der vorliegenden Tabelle einen Layer mit einer Punktgeometrie zu erzeugen, ist einen “Virtuellen Layer” auf Basis der Tabelle “Orte” aus der ODBC-Verbindung zu verwenden. Virtuelle Layer hatte ich bereits in meinem letzten Blogpost über Geometriegeneratoren und Virtuelle Layer behandelt, deshalb werde ich nur kurz zeigen, wie man aus den Koordinaten eine Punktgeometrie erzeugt.

Bevor wir fortfahren können, müssen wir erst noch den Doppelpunkt aus dem Layernamen entfernen. Diese Sonderzeichen machen nur Probleme bei der Verwendung des Layers in der Abfrage des virtuellen Layers. Deshalb habe ich den Layer einfach in “Orte” umbenannt.

QGIS Virtuellen Layer erstellen
QGIS Virtuellen Layer erstellen

Ein Klick auf <Hinzufügen> öffnet ein Fenster, dass nach dem Koordinatensystem fragt, hier ist das Koordinatenbezugssystem (KBS) 31466 für die Gauß-Krüger-Zone 2 anzugeben. Hier noch einmal die SQL-Anweisung im Klartext:

SELECT id, name, make_point( rechtswert, hochwert) as geom
FROM Orte

Im übrigen finde ich den neuen Dialog zur Auswahl eines KBS in QGIS wirklich gut gelungen, das aber nur am Rande. Das Ergebnis, mit Beschriftung aus dem Feld “name”, sieht dann folgendermaßen aus:

Ortschaften aus einem Virtuellen Layer
Ortschaften aus einem Virtuellen Layer

Aktualisierungen der Koordinaten in der Access-Datenbank werden im Normalfall nach einem Neuzeichnen des Layers direkt angezeigt.

Die Alternative: OGR Virtual Files

Eine Alternative zu den virtuellen Layern aus QGIS ist das Pendant “Virtual Files” von GDAL/OGR. Das Format für die virtuellen Dateien ist im Grunde eine XML-Textdatei mit bestimmten Angaben zur ODBC-Datenverbindung und einem Teil, indem man die SQL-Abfrage für den Layer generiert. Also im Prinzip das selbe wie im vorigen Abschnitt, allerdings ausgelagert in eine eigene Konfigurationsdatei. Wer seine Layer über mehrere Programme hinweg definieren möchte, lieber mit einem Texteditor arbeitet oder aus anderen Gründen das XML-Format der Möglichkeit von QGIS bevorzugt, kann so leicht einen Layer erzeugen. Hier einmal die XML-Konfiguration:

<OGRVRTDataSource>
<OGRVrtLayer name="Ortschaften">
<SrcDataSource>ODBC:qgis_odbc,Orte</SrcDataSource>
<SrcSQL>
SELECT id, name, rechtswert, hochwert
FROM Orte
</SrcSQL>
<LayerSRS>EPSG:31466</LayerSRS>
<GeometryType>wkbPoint</GeometryType>
<GeometryField encoding="PointFromColumns" x="rechtswert" y="hochwert" />
</OGRVrtLayer>
</OGRVRTDataSource>

Einfach in einem Editor der Wahl – ich nehme dazu gerne Notepad++ – das XML erstellen und abspeichern. Die Datei kann man dann ganz einfach per Drag&Drop vom Explorer in den QGIS-Layermanager ziehen und die Ansicht genießen. In
<SrcDataSource>ODBC:qgis_odbc,Orte</SrcDataSource>
kann man per Kommata getrennt, mehrere Tabellen angeben und auch mittels Join im SQL verknüpfen. Die meisten Tags sind ja selbsterklärend, lediglich hier
<GeometryField encoding="PointFromColumns" x="rechtswert" y="hochwert" />
wird die Geometrie festgelegt, in dem man die Spalten für die X- und Y-Koordinaten definiert. Aufpassen muss man mit Bindestrichen und ähnlichen Sonderzeichen in den Spaltennamen, die werden nicht gerne genommen und müssen mittels Alias im SQL “entschärft” werden.

Überprüfen kann man die Funktionalität der XML-Datei in der OSGeo4W-Shell, indem man mittels
> ogrinfo ortschaften.xml
schaut, ob Fehlermeldungen auftreten. Läuft alles glatt, lässt sich die Datei auch in QGIS verwenden.

Zusammenfassung

Nach diesem Beitrag sollte es kein Problem mehr sein, zu einer Access-Datenbank eine ODBC-Verbindung aufzubauen und die in der Datenbank vorhandenen Tabellen in QGIS zu verwenden. Dabei kann man die integrierten Mechaniken in QGIS nutzen oder alternativ auf XML-Dateien zurückgreifen. Jede Methode hat ihre Vor- und Nachteile, letztendlich führen aber beide zum selben Ziel.

Als Randnotiz möchte ich noch auf die Möglichkeit hinweisen, Geometrien in QGIS auch mit Hilfe der Funktion geom_from_wkt zu erzeugen. WKT ist das Well-Known-Text Format zur Beschreibung von Geometrien in menschenlesbarer Form. Hat man dieses in einer Spalte in Access stehen, lassen sich natürlich auch ganz einfach Linien- und Polygonlayer erzeugen.
Fraglich bleibt natürlich, wie das WKT in die Access-Datenbank kommt. Man könnte natürlich die Geometrien in QGIS digitalisieren und dann per Copy&Paste nach Access kopieren, aber da beißt sich die Katze irgendwie in den Schwanz und man sollte vielleicht einen anderen Workflow in Betracht ziehen.

Sollte noch etwas unklar sein oder nicht wie hier beschrieben funktionieren, kann mich auch kontaktieren oder einfach unten in die Kommentare schreiben.
Ich nehme auch noch Vorschläge für meinen nächsten Blogpost entgegen. Im Moment steht mir der Sinn nach etwas Statistik und etwas mehr Kartografie. Die letzten beiden Beiträge waren ja eher technischer Natur, aber ich würde mich auch über Vorschläge freuen. Also, Vorschläge für den nächsten Post können hier in den Kommentaren oder per Email, Twitter und dem Rest gemacht werden.