J'essaie de créer une jointure / relation dans QGIS où j'ai un fichier de formes de bâtiments et auquel j'aimerais joindre une table non spatiale (.csv) contenant des personnes qui travaillent dans chaque bâtiment. J'ai donc plusieurs enregistrements dans ma table que je voudrais pouvoir joindre à mes fonctionnalités uniques dans mon fichier de formes. Je peux uniquement exécuter une jointure dans QGIS où le premier enregistrement est joint à la fonction de fichier de formes (c'est-à-dire la construction) mais les enregistrements suivants sont supprimés.
Quelqu'un pourrait-il me dire comment terminer cette jointure / relation dans QGIS?
qgis
attribute-joins
Mick
la source
la source
Réponses:
J'ai résolu ce problème en utilisant QGIS 1.7.0 en enregistrant d'abord la couche vectorielle en tant que table de valeurs séparées par des virgules (CSV) avec le champ de géométrie converti en texte bien connu. Pour ce faire, le champ de calque de la boîte de dialogue "Enregistrer le calque vectoriel sous ..." doit lire GEOMETRY = AS_WKT pour créer un champ de texte bien connu de la géométrie avec la colonne nommée WKT.
Le fichier de géométrie CSV a ensuite été joint à la table d'attributs non géométriques dans une jointure un-à-plusieurs sous l'onglet des jointures de propriétés de la table d'attributs non géométriques.
La jointure résultante a été enregistrée sous un autre fichier CSV de géométrie.
Lorsque cette table est ouverte dans QGIS, chaque enregistrement d'attribut était représenté par sa géométrie vectorielle appropriée.
En faisant tout cela, j'ai découvert que le plug-in de texte délimité n'est pas nécessaire pour ouvrir un fichier de géométrie CSV si les délimiteurs sont des virgules et que le champ de géométrie WKT est nommé WKT.
Pour plus de détails sur la façon de procéder, veuillez consulter mon didacticiel sur http://georgiawildlife.com/node/2849 .
la source
ogr2ogr
pour créer les fichiers CSV à partir des fichiers de formes. Ensuite, un simple script R pour fusionner les fichiers sur le champ commun que je voulais et réécrire sur CSV. Puis àogr2ogr
nouveau pour créer le fichier de formes fusionné.Les jointures créées dans les propriétés de calque ajoutent uniquement des colonnes aux entités existantes. Si la couche vectorielle n'a que 160 entités, une jointure ne peut pas augmenter le nombre d'entités!
Utilisez plutôt la fonction de couche virtuelle. Il offre de vraies jointures de type SQL / base de données. Pour un exemple, voir mon récent article: Petits multiples pour les cartes de flux OD utilisant des couches virtuelles
la source
Dans QGIS 1.7, il existe un nouveau moteur pour les jointures (vous le trouverez dans les propriétés vectorielles).
Les tables sans géométrie peuvent désormais être ajoutées à un projet comme n'importe quelle autre couche (vectorielle).
la source
À partir de la version 2.2, QGIS prend en charge les relations un-à-plusieurs. Définissez-les cependant dans les propriétés du projet, et non dans les propriétés du calque vectoriel. Et puis les enregistrements associés apparaîtront dans la table d'attributs de la couche ou identifier les résultats via le formulaire.
Voir la réponse et le lien vers un bon guide ici .
la source
Faites la jointure dans LibreOffice Base.
Vous ne pouvez pas surmonter le fait que vous essayez de gérer une relation 1 à plusieurs.
Pour les non spatiaux à non spatiaux, cela vaut la peine d'apprendre. Je trouve que la plus grande astuce consiste à s'assurer que les champs d'attribut de jointure ont exactement les mêmes termes.
Ouvrez les données spatiales localisées en tant que couche dans QGIS, puis sélectionnez tous les enregistrements de la table attributaire dans QGIS (effacer la sélection, inverser la sélection) et copiez-les dans une nouvelle feuille dans LibreOffice Calc. Vous trouverez que le premier champ est WKT, qui est une description de la fonctionnalité qui peut être universellement utilisée dans le SIG. Calc vous donnera une boîte de dialogue pour importer la table collée, choisissez délimité par des tabulations, assurez-vous que la virgule n'est pas cochée car elle mordra le champ WKT en bits. Mettez ensuite cette table en surbrillance dans Calc, passez à Base, mettez en surbrillance l'icône Tables à gauche et collez. La base passera par une boîte de dialogue pour importer la table. Le champ WKT peut être conservé via la jointure et lorsque le fichier est réimporté dans QGIS en tant que .csv, ils sont utilisés pour déplacer les fonctionnalités. N'oubliez pas la projection.
De cette façon, vous aurez le contrôle total de la jointure et pourrez le faire en «sens inverse». Pour effectuer des jointures dans Base, assurez-vous que le champ de données unique (le 1) est une clé primaire, puis pointez-le sur le "plusieurs" si vous connaissez un concept de 1 à plusieurs ou de 1 à n. Les jointures sont établies en créant des relations | TOOLS |. Comme je l'ai mentionné, vous voudrez probablement donner un coup de pied à quelqu'un lorsque vous trouverez que les champs de jointure contiennent les mêmes informations mais ont utilisé un texte ou une syntaxe différente pour les représenter.
hth
la source
Je ne pense pas que ce soit possible de lier des tables avec une relation 1 à plusieurs dans QGIS. Vous pouvez également essayer gvSIG. Ici, vous pouvez créer 1 à plusieurs liens. Après avoir créé le lien, la sélection d'une entité sur la carte mettra en surbrillance tous les enregistrements associés dans la table liée.
la source