Vous lisez une connexion ODBC à l'aide de QGIS? [fermé]

16

J'ai un collègue qui gère une grande base de données MS Access qui contient des champs X & Y pour divers emplacements qu'il suit. Nous avons précédemment exporté les données vers CSV et utilisé le plug-in de texte délimité QGIS pour tracer les emplacements.

Nous aimerions maintenant tracer ces données directement dans QGIS en nous connectant à la base de données MS Access via une connexion ODBC (par opposition à l'exportation vers CSV).

  1. QGIS peut-il consommer les données de la connexion ODBC pour tracer les emplacements XY?
  2. Peut-il être «lié en direct» à la connexion ODBC de sorte que lorsqu'un projet est rouvert, la couche «replotte» dynamiquement tous les emplacements anciens et nouvellement ajoutés (par opposition à l'exportation vers un fichier de formes, ce qui créerait un instantané dans le temps)?
  3. Pouvez-vous créer des connexions ODBC tabulaires qui peuvent être jointes à des tables spatiales dans QGIS?

Vous pouvez faire tout cela dans ArcGIS (outil "Ajouter des données XY"), donc ce serait génial si cette capacité existait dans QGIS. Je ne trouve aucun endroit qui mentionne son existence.

Je ne prévois pas de passer à une base de données spatiale. En tant que personne SIG moi-même, oui, je sais qu'il est logique de passer à une base de données spatiale, et oui, j'ai utilisé PostGIS pour gérer ce type de données. Mais ce ne sont pas des options pour le moment. L'utilisateur n'est pas un SIG et ne veut pas l'être, et il gère sa propre base de données dans MS Access et cela ne changera pas. Je suis et je le pousse à donner des coups de pied et à crier dans le monde SIG et je veux le rendre aussi facile que possible. Il peut vivre avec l'exportation vers CSV, j'espérais juste qu'il y avait une meilleure solution UTILISER ODBC POUR MS ACCESS et afficher les données XY dans QGIS.

RyanKDalton
la source
À ma connaissance, vous ne pouvez pas faire ce que vous demandez avec QGIS. Je suis d'accord qu'il y aurait une certaine utilité dans un équivalent ODBC de l'importation CSV, mais pour toute sorte de performance, il faudrait que ce soit une importation plutôt qu'une connexion dynamique - tout comme le plugin CSV. Il n'y aura donc probablement pas d'adoption à moins que vous ne la souteniez / développiez vous-même.
MerseyViking
@ MV- Je suis généralement d'accord avec vous et je vois vos points. Cependant, pour les utilisateurs non SIG qui sont principalement intéressés à simplement cartographier leurs données et non à analyser les données, les performances de QGIS ne seraient pas aussi importantes. J'imagine qu'avoir une connexion dynamique, "toujours en direct" à leurs données l'emporterait presque certainement sur les problèmes de performances (en y réfléchissant à nouveau du point de vue des utilisateurs non SIG).
RyanKDalton
Excellente réponse à une question similaire sur QGIS 2.4 access .mdb add error
RyanKDalton

Réponses:

7

Avertissement: je n'ai pas essayé cela, donc je suis prêt à m'incliner devant toute personne ayant une expérience directe.

Vous pouvez vous connecter à une source de données ODBC dans la boîte de dialogue "ajouter une couche vectorielle", sélectionnez simplement "base de données" comme type de source et ODBC comme type de base de données. QGIS utilise le pilote ODBC pour OGR , donc les mêmes mises en garde s'appliqueront - c'est-à-dire que vous aurez besoin d'une table appelée GEOMETRY_COLUMNS et ainsi de suite, donc votre collègue devra probablement modifier la base de données.

Je n'ai pas utilisé Access depuis peu de temps après la sortie de la version 1.0, mais comme il n'est pas activé dans l'espace, vous constaterez probablement que les performances sont un problème. Vraisemblablement, vous n'allez pas simplement abandonner Access et commencer à utiliser une base de données activée spatialement, car il est peu probable que cela soit économiquement viable, mais si votre collègue ressent jamais l'envie de changement, je peux fortement recommander de passer à quelque chose de plus. puissant.

MerseyViking
la source
@ MV- C'est une bonne information à avoir. Je ne savais pas que vous pouviez ajouter des données tabulaires via l'option "ajouter une couche vectorielle". Vous avez raison, cependant, car il n'est pas activé spatialement, vous devrez toujours exporter en quelque sorte vers un format spatial. Et vous avez raison, l'utilisateur ne va pas passer à une base de données activée spatialement car il ne s'agit ni d'un SIG ni d'une base de données. Ils ont juste assez de formation Access pour être dangereux ...
RyanKDalton
7

Avec les nouveaux outils de "traitement" disponibles dans QGIS 2, cela devient un peu plus facile. Bien que je n'aie toujours pas trouvé de moyen de "lier en direct" les données (de sorte que si vous modifiez les valeurs dans la table MS Access, le point se déplace automatiquement), cette méthode semble fonctionner assez bien.

Nous remercions "Christina" et "Bernd" dans la section commentaires de cette page (et bien sûr @underdark pour le blog) pour avoir créé la connexion ODBC à votre base de données MS Access:

Créez une connexion ODBC:

Pour Win7, 32 bits: Accédez au panneau de configuration / outils d'administration / sources de données (ODBC)

Pour Win7, 64 bits: au lieu d'utiliser le "panneau de contrôle / outils d'administration / sources de données (ODBC)" par défaut, avec les versions 64 bits, vous devez utiliser C: \ Windows \ SysWOW64 \ odbcad32.exe!

  1. Cliquez sur l'onglet DSN utilisateur puis sur «ajouter»
  2. Faites défiler jusqu'à Microsoft Access Driver (* mdb) et cliquez sur «Terminer»
  3. Donnez un nom à la connexion, puis choisissez «sélectionner» pour accéder à l'emplacement de la base de données, puis cliquez sur «ok» pour quitter la boîte de dialogue et à nouveau pour fermer la fenêtre dsn.

Chargez la couche dans QGIS:

  1. Allez pour ajouter une couche vectorielle et sélectionnez l'option de base de données.
  2. Assurez-vous que la zone «type» de la base de données indique «ODBC» et cliquez sur «nouveau»
  3. Dans la zone de nom, tapez un nom pour la connexion
  4. L'hôte est localhost
  5. Le nom de la base de données est le nom du DSN que vous avez créé à l'étape 4
  6. Toutes les autres cases doivent être vides, mais vous pouvez cocher la case «enregistrer le mot de passe».
  7. Testez la connexion et notez toutes les erreurs. En cas de succès, cliquez sur «ok» pour revenir à la boîte de dialogue «ajouter une couche vectorielle»
  8. Cliquez sur «ouvrir» pour ouvrir cette connexion, et si un mot de passe vous est demandé, cliquez sur «ok». Choisissez votre couche (table de la base de données), en gardant à l'esprit qu'elle peut ne pas avoir de géométrie.

Convertissez les données XY en points:

  1. Avec le tableau dans la table des matières, allez dans "Traitement" -> Boîte à outils -> Géoalgorithmes -> Vecteur -> Création -> "Couche de points du tableau".
  2. Remplissez le formulaire comme indiqué ci-dessous:

Couche de points du tableau

RyanKDalton
la source
Si vous rencontrez des problèmes avec cette approche, vérifiez l' erreur QGIS 2.4 access .mdb add
RyanKDalton
Merci beaucoup pour l'aide sur la connexion de l'accès ms à QGIS. J'utilise les codes de pays à trois lettres comme couche de jointure et cela a très bien fonctionné
Si j'avais une table avec Line ou Polygon, comment pourrais-je alors générer la carte?
MichaelR
5

Bien que je sois toujours intéressé à savoir s'il existe d'autres options, j'ai rencontré un message qui mentionnait que cela était possible en utilisant le plug-in eVis .

La documentation décrit dans la section Connexion à la base de données comment vous pouvez vous connecter à une connexion MS Access ou ODBC pour créer des emplacements de points XY à partir de la base de données, sans créer un instantané statique. J'ai simplement tapé "select * from" et eVis a fait apparaître une boîte de dialogue qui demande le nom du calque et les champs XY.

Malheureusement, cela ne semble pas créer une connexion "liée en direct" à la base de données MS Access car la prochaine fois que le projet s'ouvre, QGIS est confus ("impossible d'ouvrir une ou plusieurs couches de projet"). Cependant, la solution consiste à créer une requête XML prédéfinie que l'utilisateur peut sélectionner.

Bien que ce ne soit pas une solution parfaite, c'est une étape de mieux que d'exporter vers CSV. À l'avenir, je pense que ce serait formidable de voir le plugin Delimited Text développé pour accepter les connexions ODBC à cet effet.

RyanKDalton
la source
Ah! C'est vraiment utile de savoir. Cela implique quelques cerceaux, mais au moins ce devrait être une configuration unique. Rechargera-t-il les données si vous modifiez la vue dans QGIS? Ou le cache-t-il simplement jusqu'à ce que vous réexécutiez manuellement la requête?
MerseyViking
@ MV- D'après ce que je peux dire à travers l'expérimentation, eVis semble créer une couche mise en cache dans QGIS. Par exemple, après avoir chargé la couche avec eVis, j'ai supprimé l'un des enregistrements de la base de données Access, actualisé l'écran QGIS et le point «supprimé» a persisté. Mais lorsque j'ai créé une nouvelle couche en cache, le point supprimé n'a pas été affiché (comme prévu). Le panoramique et le zoom n'ont eu aucun effet sur l'affichage des calques mis en cache.
RyanKDalton
4

une autre approche consisterait à déplacer les données vers les postgis. vous pouvez lire le fichier csv directement avec la commande de copie postgresql. alors vous pouvez créer des points à partir des champs xy.

ensuite, si vous souhaitez utiliser certains rapports ou d'autres fonctionnalités dans l'accès, vous pouvez vous connecter à postgis à partir de l'accès.

l'avantage serait que vous placiez les données spatiales à leur place, dans une base de données spatiales, puis que vous utilisiez odbc pour accéder au traitement des données non spatiales si, pour une raison quelconque, vous souhaitez toujours voir vos données en accès.

il existe d'excellents tutoriels pour postgis / postgresql pour accéder à la connexion sur postgresonline.com. des tutoriels sur l'import vers postgis / postgresql que vous pouvez trouver par les mêmes auteurs sur bostongis.org

/ Nicklas

Nicklas Avén
la source
0

Il existe plusieurs produits de conversion qui peuvent convertir les données d'accès ms en postgres ou SQLite et vice-versa. Le déplacement très rapide des données d'un côté à l'autre. L'utilisation de l'une de ces applications peut vous donner la possibilité d'exécuter QGIS sur un instantané des données.

AndrewM
la source
1
pourriez-vous suggérer un tel outil?
Jens