Stai leggendo la connessione ODBC usando QGIS? [chiuso]


16

Ho un collega che gestisce un grande database MS Access che contiene campi X e Y per varie posizioni che tiene traccia. Abbiamo precedentemente esportato i dati in CSV e utilizzato il plug-in di testo delimitato QGIS per tracciare le posizioni.

Vorremmo ora tracciare questi dati direttamente in QGIS collegandoli al db di MS Access tramite una connessione ODBC (anziché esportare in CSV).

  1. QGIS può utilizzare i dati dalla connessione ODBC per tracciare le posizioni XY?
  2. Può essere "collegato in tempo reale" alla connessione ODBC in modo tale che quando un progetto viene riaperto, il livello "sostituisce" dinamicamente tutte le posizioni vecchie e appena aggiunte (al contrario dell'esportazione in shapefile, che creerebbe un'istantanea nel tempo)?
  3. È possibile creare connessioni ODBC tabulari che possono essere unite a tabelle spaziali all'interno di QGIS?

Puoi fare tutto questo in ArcGIS (strumento "Aggiungi dati XY"), quindi sarebbe fantastico se questa funzionalità esistesse in QGIS. Non riesco proprio a trovare da nessuna parte che menziona la sua esistenza.

Non ho intenzione di passare a un database spaziale. Come persona GIS, sì, so che ha senso passare a un database spaziale e sì, ho usato PostGIS per gestire questo tipo di dati. Ma queste non sono opzioni in questo momento. L'utente non è una persona GIS né vuole esserlo, e gestisce il proprio database in MS Access e questo non cambierà. Lo sto tirando a calci e urlando nel mondo GIS e voglio renderlo il più semplice possibile. Può vivere con l'esportazione in CSV, speravo solo che ci fosse una soluzione migliore UTILIZZANDO ODBC PER MS ACCESS e visualizzare i dati XY in QGIS.


Quindi, per quanto ne sappia, non puoi fare ciò che chiedi a QGIS. Sono d'accordo che ci sarebbe un certo uso in un equivalente ODBC dell'importazione CSV, ma per qualsiasi tipo di prestazione dovrebbe essere un'importazione piuttosto che una connessione dinamica, proprio come il plug-in CSV. Quindi non è probabile che ci sia un assorbimento a meno che tu non lo supporti / sviluppi da solo.
MerseyViking

@ MV- In genere sono d'accordo con te e vedo i tuoi punti. Tuttavia, per gli utenti non gis che sono principalmente interessati a mappare semplicemente i loro dati e non analizzare i dati, le prestazioni di QGIS non sarebbero così significative di un problema. Immagino che avere una connessione dinamica, "sempre in diretta" con i loro dati avrebbe quasi sicuramente superato le preoccupazioni relative alle prestazioni (ripensandoci di nuovo dal punto di vista degli utenti non GIS).
RyanKDalton,

Ottima risposta a una domanda simile all'accesso QGIS 2.4 .mdb aggiungi errore
RyanKDalton

Risposte:


7

Avvertenza: non l'ho provato, quindi sono disposto a inchinarmi a chiunque abbia esperienza diretta.

È possibile connettersi a un'origine dati ODBC nella finestra di dialogo "Aggiungi livello vettoriale", selezionare "database" come tipo di origine e ODBC come tipo di database. QGIS utilizza il driver ODBC per OGR , quindi verranno applicate le stesse avvertenze: è necessario disporre di una tabella denominata GEOMETRY_COLUMNS e così via, quindi il collega probabilmente dovrà modificare il database.

Non uso Access da poco dopo il rilascio della versione 1.0, ma poiché non è abilitato spazialmente, è probabile che le prestazioni rappresentino un problema. Presumibilmente non lascerai semplicemente Access e inizi a utilizzare un database abilitato spazialmente, perché è improbabile che sia economicamente fattibile, ma se il tuo collega sente il bisogno di cambiare, ti consiglio vivamente di passare a qualcosa di più potente.


@ MV- Questa è una buona informazione da avere. Non mi ero reso conto che potresti aggiungere dati tabulari tramite l'opzione "Aggiungi livello vettoriale". Hai ragione, però, poiché non è abilitato spazialmente, dovresti comunque esportare in un formato spaziale. E hai ragione, l'utente non passerà a un db abilitato spazialmente perché non sono né un GIS né un database. Hanno abbastanza accesso all'addestramento per essere pericolosi ...
RyanKDalton,

7

Con i nuovi strumenti "Elaborazione" disponibili in QGIS 2, questo diventa un po 'più semplice. Anche se non ho ancora trovato il modo di "collegare in diretta" i dati (in modo che se si modificano i valori nella tabella MS Access, il punto si sposta automaticamente), questo metodo sembra funzionare abbastanza bene.

Il merito va a "Christina" e "Bernd" nella sezione commenti di questa pagina (e ovviamente @underdark per il blog) per come creare la connessione ODBC al database MS Access:

Creare una connessione ODBC:

Per Win7, 32 bit: vai al pannello di controllo / strumenti di amministrazione / origini dati (ODBC)

Per Win7, 64 bit: invece di utilizzare il "pannello di controllo / strumenti di amministrazione / origini dati (ODBC)" predefinito - in questo modo, con le versioni a 64 bit, è necessario utilizzare C: \ Windows \ SysWOW64 \ odbcad32.exe!

  1. Fare clic sulla scheda DSN dell'utente e quindi 'aggiungi'
  2. Scorri verso il basso fino a Microsoft Access Driver (* mdb) e fai clic su "Fine"
  3. Assegna un nome alla connessione, quindi scegli "seleziona" per selezionare la posizione del database, quindi fai clic su "OK" per uscire dalla finestra di dialogo e di nuovo per chiudere la finestra DSN.

Carica il livello in QGIS:

  1. Vai per aggiungere il livello vettoriale e selezionare l'opzione del database.
  2. Assicurati che la casella "tipo" del database indichi "ODBC" e fai clic su "nuovo"
  3. Nella casella nome digitare un nome per la connessione
  4. L'host è localhost
  5. Il nome del database è il nome del DNS creato nel passaggio 4
  6. Tutte le altre caselle devono essere vuote ma è possibile selezionare la casella "Salva password".
  7. Testare la connessione e prendere nota di eventuali errori. In caso di successo, fai clic su "OK" per tornare alla finestra di dialogo "Aggiungi livello vettoriale"
  8. Fai clic su "Apri" per aprire questa connessione e, se ti viene richiesta la password, fai clic su "OK". Scegli il tuo livello (tabella dal database), tenendo presente che potrebbe non avere alcuna geometria.

Converti i dati XY in punti:

  1. Con la tabella nel sommario, vai su "Elaborazione" -> Casella degli strumenti -> Geoalgoritmi -> Vettore -> Creazione -> "Livello punti dalla tabella".
  2. Compila il modulo come mostrato di seguito:

Livello punti dalla tabella


Se si riscontrano problemi con questo approccio, controllare l' accesso QGIS 2.4 .mdb aggiungi errore
RyanKDalton

Mille grazie per l'aiuto sulla connessione dell'accesso ms a QGIS. Sto usando i codici di tre lettere del paese come livello di join e ha funzionato molto bene

Se avessi una tabella con Linea o Poligono, come potrei generare la mappa?
Michael R

5

Mentre sono ancora interessato a sapere se ci sono altre opzioni disponibili, mi sono imbattuto in un messaggio che diceva che ciò era possibile utilizzando il plug-in eVis .

La documentazione descrive nella sezione Connessione database come è possibile connettersi a una connessione MS Access o ODBC per creare posizioni di punti XY dal database, senza creare uno snapshot statico. Ho semplicemente digitato "select * from" e eVis ha fatto apparire una finestra di dialogo che chiede il nome del layer e i campi XY.

Questo purtroppo non sembra creare una connessione "live-linked" al db di MS Access perché alla successiva apertura del progetto, QGIS è confuso ("impossibile aprire uno o più layer di progetto"). La soluzione a questo, tuttavia, è quella di creare una query XML predefinita che l'utente può selezionare.

Quindi, sebbene non sia una soluzione perfetta, questo è un passo in più rispetto all'esportazione in CSV. In futuro penso che sarebbe bello vedere il plug-in Delimited Text espanso per accettare le connessioni ODBC per questo scopo.


Ah! È davvero utile saperlo. Implica alcuni cerchi, ma almeno dovrebbe essere un set unico. Ricaricherà i dati se cambi la vista in QGIS? O lo memorizza solo nella cache fino a quando non esegui nuovamente la query manualmente?
MerseyViking,

@ MV- Da quello che posso dire attraverso la sperimentazione, eVis sembra creare un livello memorizzato nella cache in QGIS. Ad esempio, dopo aver caricato il layer con eVis, ho eliminato uno dei record dal DB di Access, aggiornato lo schermo QGIS e il punto "cancellato" persisteva. Ma quando ho creato un nuovo livello memorizzato nella cache, il punto eliminato non veniva visualizzato (come previsto). La panoramica e lo zoom non hanno avuto alcun effetto sulla visualizzazione del layer memorizzato nella cache.
RyanKDalton,

4

un approccio alternativo sarebbe quello di spostare i dati su Postgis. puoi leggere il file csv direttamente con il comando di copia postgresql. allora puoi creare punti dai campi xy.

quindi se si desidera utilizzare alcuni rapporti o altre funzionalità di accesso, è possibile connettersi a Postgis dall'accesso.

il vantaggio sarebbe che si inseriscono i dati spaziali a cui appartengono, in un database spaziale e quindi si utilizza nuovamente odbc per accedere per gestire i dati non spaziali se per qualche motivo si desidera ancora vedere i propri dati in accesso.

ci sono ottimi tutorial per postgis / postgresql per accedere alla connessione in postgresonline.com. tutorial su impöorting a postgis / postgresql che puoi trovare dagli stessi autori su bostongis.org

/ Nicklas


0

Esistono diversi prodotti di conversione che possono convertire i dati ms-access in postgres o SQLite e viceversa. Sposta i dati molto rapidamente da un lato all'altro. L'uso di una di queste applicazioni può offrire la possibilità di eseguire QGIS su un'istantanea dei dati.


1
potresti suggerire un simile strumento?
Jens,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.