ODBC-Verbindung mit QGIS lesen? [geschlossen]

15

Ich habe einen Mitarbeiter, der eine große MS Access-Datenbank verwaltet, die X- und Y-Felder für verschiedene Orte enthält, die er verfolgt. Wir haben die Daten zuvor in CSV exportiert und das QGIS Delimited Text Plugin verwendet, um die Speicherorte zu zeichnen.

Wir möchten diese Daten jetzt direkt in QGIS zeichnen, indem wir über eine ODBC-Verbindung eine Verbindung zur MS Access-Datenbank herstellen (im Gegensatz zum Export nach CSV).

  1. Kann QGIS die Daten aus der ODBC-Verbindung verwenden, um die XY-Positionen zu zeichnen?
  2. Kann es mit der ODBC-Verbindung "live verbunden" werden, so dass beim erneuten Öffnen eines Projekts alle alten und neu hinzugefügten Speicherorte dynamisch "neu kopiert" werden (im Gegensatz zum Exportieren in ein Shapefile, wodurch eine Momentaufnahme in der Zeit erstellt würde)?
  3. Können Sie tabellarische ODBC-Verbindungen erstellen, die mit räumlichen Tabellen in QGIS verknüpft werden können?

All dies können Sie in ArcGIS (Tool "XY-Daten hinzufügen") ausführen. Es wäre also großartig, wenn diese Funktion in QGIS vorhanden wäre. Ich kann einfach nirgendwo etwas finden, das seine Existenz erwähnt.

Ich habe nicht vor, in eine räumliche Datenbank zu wechseln. Als GIS-Person weiß ich, dass es sinnvoll ist, in eine räumliche Datenbank zu wechseln, und ich habe PostGIS verwendet, um diese Art von Daten zu verwalten. Dies sind jedoch derzeit keine Optionen. Der Benutzer ist keine GIS-Person und möchte es auch nicht sein. Er verwaltet seine eigene Datenbank in MS Access und das wird sich nicht ändern. Ich bin und ziehe ihn mit Tritten und Schreien in die GIS-Welt und möchte es so einfach wie möglich machen. Er kann mit dem Exportieren in CSV leben, ich hatte nur gehofft, dass es eine bessere Lösung gibt, die ODBC FÜR MS-ZUGRIFF VERWENDET und die XY-Daten in QGIS anzeigt.

RyanKDalton-OffTheGridMaps
quelle
Dann können Sie meines Wissens mit QGIS nicht tun, was Sie verlangen. Ich bin damit einverstanden, dass ein ODBC-Äquivalent zum CSV-Import eine gewisse Verwendung finden würde, aber für jede Art von Leistung müsste es sich um einen Import und nicht um eine dynamische Verbindung handeln - so wie es das CSV-Plugin ist. Es wird also wahrscheinlich keine Aufnahme geben, es sei denn, Sie unterstützen / entwickeln es selbst.
MerseyViking
@ MV- Ich stimme Ihnen im Allgemeinen zu und sehe Ihre Punkte. Für Nicht-GIS-Benutzer, die in erster Linie daran interessiert sind, ihre Daten einfach zuzuordnen und nicht zu analysieren, ist die Leistung von QGIS jedoch nicht so wichtig. Ich könnte mir vorstellen, dass eine dynamische "Always-Live" -Verbindung zu ihren Daten mit ziemlicher Sicherheit die Performance-Bedenken überwiegt (auch dies aus Sicht eines Nicht-GIS-Benutzers).
RyanKDalton-OffTheGridMaps
Ausgezeichnete Antwort auf eine ähnliche Frage bei QGIS 2.4 Zugriff .MDB Fehler hinzufügen
RyanKDalton-OffTheGridMaps

Antworten:

7

Einschränkung: Ich habe das nicht ausprobiert und bin daher bereit, mich vor jemandem mit direkter Erfahrung zu verbeugen.

Sie können im Dialogfeld "Vektorebene hinzufügen" eine Verbindung zu einer ODBC-Datenquelle herstellen. Wählen Sie einfach "Datenbank" als Quelltyp und ODBC als Datenbanktyp aus. QGIS verwendet den ODBC-Treiber für OGR . Daher gelten die gleichen Einschränkungen: Sie benötigen eine Tabelle mit dem Namen GEOMETRY_COLUMNS usw., sodass Ihr Kollege möglicherweise die Datenbank ändern muss.

Ich habe Access seit der Veröffentlichung von Version 1.0 nicht mehr verwendet, aber da es nicht räumlich aktiviert ist, werden Sie wahrscheinlich feststellen, dass die Leistung ein Problem darstellt. Vermutlich werden Sie Access nicht einfach fallen lassen und mit der Verwendung einer räumlich aktivierten Datenbank beginnen, da dies wahrscheinlich nicht wirtschaftlich ist. Sollte Ihr Kollege jedoch jemals den Drang nach Änderungen verspüren, kann ich Ihnen dringend empfehlen, etwas mehr zu tun mächtig.

MerseyViking
quelle
@ MV- Das ist eine gute Information. Ich wusste nicht, dass Sie über die Option "Vektorebene hinzufügen" Tabellendaten hinzufügen können. Sie haben jedoch Recht, da es nicht räumlich aktiviert ist, müssten Sie es dennoch in ein räumliches Format exportieren. Und Sie haben Recht, der Benutzer wird nicht zu einer räumlich aktivierten Datenbank wechseln, da es sich weder um ein GIS noch um eine Datenbank handelt. Sie haben gerade genug Zugangstraining, um gefährlich zu sein ...
RyanKDalton-OffTheGridMaps
7

Mit den neuen "Processing" -Tools in QGIS 2 wird dies etwas einfacher. Obwohl ich immer noch keine Möglichkeit gefunden habe, die Daten live zu verknüpfen (wenn Sie also die Werte in der MS Access-Tabelle ändern, verschiebt sich der Punkt automatisch), scheint diese Methode ziemlich gut zu funktionieren.

Dank geht an "Christina" und "Bernd" im Kommentarbereich dieser Seite (und natürlich an @underdark für den Blog), wie die ODBC-Verbindung zu Ihrer MS Access-Datenbank hergestellt wird:

Erstellen Sie eine ODBC-Verbindung:

Für Win7, 32 Bit: Gehen Sie zu Systemsteuerung / Verwaltungstools / Datenquellen (ODBC).

Für Win7, 64-Bit: Anstelle der Standardeinstellung "Systemsteuerung / Verwaltung / Datenquellen (ODBC)" müssen Sie bei 64-Bit-Versionen C: \ Windows \ SysWOW64 \ odbcad32.exe verwenden!

  1. Klicken Sie auf die Registerkarte Benutzer-DSN und dann auf "Hinzufügen".
  2. Scrollen Sie nach unten zum Microsoft Access-Treiber (* mdb) und klicken Sie auf "Fertig stellen".
  3. Geben Sie der Verbindung einen Namen und wählen Sie "Auswählen", um zum Speicherort der Datenbank zu navigieren. Klicken Sie dann auf "OK", um den Dialog zu schließen und das dsn-Fenster erneut zu schließen.

Lade die Ebene in QGIS:

  1. Gehen Sie zum Hinzufügen einer Vektorebene und wählen Sie die Datenbankoption.
  2. Stellen Sie sicher, dass im Feld 'Typ' der Datenbank 'ODBC' steht, und klicken Sie auf 'Neu'.
  3. Geben Sie im Feld Name einen Namen für die Verbindung ein
  4. Der Gastgeber ist localhost
  5. Der Datenbankname ist der Name des DNS, den Sie in Schritt 4 erstellt haben
  6. Alle anderen Felder sollten leer sein, aber Sie können das Kästchen "Passwort speichern" ankreuzen.
  7. Testen Sie die Verbindung und notieren Sie sich etwaige Fehler. Wenn dies erfolgreich war, klicken Sie auf "OK", um zum Dialogfeld "Vektorebene hinzufügen" zurückzukehren
  8. Klicken Sie auf "Öffnen", um diese Verbindung zu öffnen, und klicken Sie auf "OK", wenn Sie nach dem Kennwort gefragt werden. Wählen Sie Ihren Layer (Tabelle aus der Datenbank) aus, wobei zu berücksichtigen ist, dass er möglicherweise keine Geometrie aufweist.

Konvertieren Sie die XY-Daten in Punkte:

  1. Gehen Sie mit der Tabelle im Inhaltsverzeichnis zu "Verarbeitung" -> Toolbox -> Geoalgorithmen -> Vektor -> Erstellung -> "Punkte-Layer aus Tabelle".
  2. Füllen Sie das Formular wie folgt aus:

Punktebene aus Tabelle

RyanKDalton-OffTheGridMaps
quelle
Wenn Sie Probleme mit diesem Ansatz haben, überprüfen Sie QGIS 2.4-Zugriff .mdb Fehler hinzufügen
RyanKDalton-OffTheGridMaps
Vielen Dank für die Hilfe beim Verbinden von ms access mit QGIS. Ich verwende Ländercodes mit drei Buchstaben als Verbindungsschicht und es hat sehr gut
Wenn ich eine Tabelle mit Linie oder Polygon hätte, wie könnte ich dann die Karte generieren?
MichaelR
5

Ich bin zwar immer noch daran interessiert zu hören, ob andere Optionen verfügbar sind, aber ich bin auf einen Nachrichtenbeitrag gestoßen , in dem erwähnt wurde, dass dies mit dem eVis-Plugin möglich ist .

In der Dokumentation wird im Abschnitt Datenbankverbindung beschrieben, wie Sie eine Verbindung zu einer MS Access- oder ODBC-Verbindung herstellen können, um XY-Punktpositionen aus der Datenbank zu erstellen, ohne einen statischen Snapshot zu erstellen. Ich habe einfach "select * from" eingegeben und eVis hat ein Dialogfeld geöffnet, in dem nach dem Ebenennamen und den XY-Feldern gefragt wird.

Dies scheint leider keine "live-verknüpfte" Verbindung zur MS Access-Datenbank herzustellen, da QGIS beim nächsten Öffnen des Projekts verwirrt ist ("nicht in der Lage, eine oder mehrere Projektebenen zu öffnen"). Die Lösung hierfür besteht jedoch darin, eine vordefinierte XML-Abfrage zu erstellen , die der Benutzer auswählen kann.

Dies ist zwar keine perfekte Lösung, aber ein Schritt besser als der Export in CSV. Ich denke, dass es in Zukunft großartig wäre, wenn das Delimited Text-Plugin erweitert würde, um ODBC-Verbindungen für diesen Zweck zu akzeptieren.

RyanKDalton-OffTheGridMaps
quelle
Ah! Das ist wirklich nützlich zu wissen. Es beinhaltet einige Reifen, aber zumindest sollte es eine einmalige Einrichtung sein. Lädt es die Daten neu, wenn Sie die Ansicht in QGIS ändern? Oder wird es nur zwischengespeichert, bis Sie die Abfrage manuell erneut ausführen?
MerseyViking
@ MV- Soweit ich experimentieren kann, scheint eVis eine zwischengespeicherte Ebene in QGIS zu erstellen. Nachdem ich zum Beispiel die Ebene mit eVis geladen habe, habe ich einen der Datensätze aus der Access-Datenbank gelöscht, den QGIS-Bildschirm aktualisiert und der "gelöschte" Punkt blieb bestehen. Als ich jedoch eine neue zwischengespeicherte Ebene erstellte, wurde der gelöschte Punkt nicht angezeigt (wie erwartet). Schwenken und Zoomen hatten keine Auswirkungen auf die Anzeige der zwischengespeicherten Ebene.
RyanKDalton-OffTheGridMaps
4

Ein alternativer Ansatz wäre, die Daten nach postgis zu verschieben. Sie können die CSV-Datei direkt mit dem Befehl postgresql copy lesen. dann können sie punkte aus den xy-feldern erzeugen.

Wenn Sie Berichte oder andere Funktionen für den Zugriff verwenden möchten, können Sie über den Zugriff eine Verbindung zu Postgis herstellen.

Der Vorteil ist, dass Sie die räumlichen Daten dort ablegen, wo sie hingehören, in einer räumlichen Datenbank und dann mit odbc zurück auf die nicht räumlichen Daten zugreifen, wenn Sie aus irgendeinem Grund Ihre Daten weiterhin im Zugriff sehen möchten.

Es gibt großartige Tutorials für postgis / postgresql, um auf die Verbindung in postgresonline.com zuzugreifen. Anleitungen zum Impöortieren von Postgis / Postgresql finden Sie von denselben Autoren auf bostongis.org

/ Nicklas

Nicklas Avén
quelle
0

Es gibt verschiedene Konvertierungsprodukte, die MS-Access-Daten in Postgres oder SQLite und zurück konvertieren können. Sie bewegen die Daten sehr schnell von einer Seite zur anderen. Wenn Sie eine dieser Anwendungen verwenden, können Sie möglicherweise QGIS für einen Snapshot der Daten ausführen.

AndrewM
quelle
1
könntest du so ein tool vorschlagen?
Jens