Obtenir la liste des valeurs distinctes du champ du fichier de formes à l'aide de QGIS?

18

J'ai un fichier de formes dont je peux filtrer les fonctionnalités en spécifiant une clause where dans la boîte de dialogue de requête. Fx J'ai un champ nommé 'city_name' et en indiquant 'city_name = "London"' dans la clause where, seul Londres est affiché. Ce que je voudrais faire maintenant, c'est récupérer toutes les valeurs de 'city_name' dans la table attributaire.

Quelque chose comme ca:

select distinct city_name from [attribute table]

J'ai trouvé plusieurs outils dans QGIS traitant apparemment de SQL et j'ai également jeté un coup d'œil aux différents plugins. Mais je n'arrive pas à me connecter à une base de données ou au nom de la table ... quelle base de données ou quelle table dans ce cas?

En fin de compte, je souhaite exporter la liste des résultats et l'utiliser pour un traitement ultérieur.

J'utilise QGIS 1.8.

Raffael
la source

Réponses:

32

Mettre à jour la réponse (version QGIS> = 2.14)

Depuis QGIS 2.14 , vous pouvez utiliser des instructions SQL d'exécution sur n'importe quelle couche vectorielle chargée à l'aide de couches virtuelles .

  1. Après avoir chargé la couche dans QGIS, accédez à Couche> Ajouter une couche> Ajouter / Modifier une couche virtuelle ;
  2. Dans la boîte de dialogue Créer une couche virtuelle, entrez votre instruction SQL dans le champ Requête. Quelque chose comme:

    SELECT DISTINCT city_name FROM layer_name

  3. Pour le jeu de géométrie Pas de géométrie

  4. Cliquez sur OK et une table se chargera dans QGIS avec les valeurs uniques souhaitées.

Remarque: ce tableau sera mis à jour si de nouvelles valeurs sont ajoutées à la colonne city_name.

Réponse héritée (QGIS version <2.14)

Vous avez plusieurs choix pour faire ce que vous demandez.

  1. Importez votre fichier de formes dans une base de données Spatialite ou Postgis, puis vous pouvez interroger votre table à l'aide d'instructions SQL complètes;
  2. Utilisez l'outil Dissoudre (Vector> Outils de géotraitement> Dissoudre) pour dissoudre vos fichiers de formes à l'aide du champ "city_name". Bien qu'il s'agisse d'une méthode étrange, le fichier dbf du fichier de formes résultant fournira la liste dont vous avez besoin;
  3. Jetez un oeil au plugin de statistiques de groupe (1.6) , vous pouvez utiliser "city_name" comme champ de classification et appuyez sur calculer. Il calculera des statistiques sur chaque ville, vous pouvez ensuite copier le résultat et extraire la liste des villes.

Je viens de remarquer que, dans les outils Vector> Analysis , il existe un outil List Values ​​unique qui est précisément ce dont on a besoin pour cette tâche. Si facile ... aucune solution de contournement et aucun besoin de plugins.

Alexandre Neto
la source
6

Utilisez QGIS DB Manager et accédez à votre fichier de formes via des «couches virtuelles»

Vous pouvez ensuite utiliser la fenêtre SQL et écrire votre requête:

entrez la description de l'image ici

DPSSpatial
la source
1
C'est maintenant (QGIS 2.14+) la bonne réponse.
Alexandre Neto
-1

Utilisez le générateur de requêtes dans QGIS, accédez au champ du nom de la ville dans les champs du générateur de requêtes. Accédez aux valeurs, ajoutez tout. Supprimez tous les null.

Créez un script similaire à city name = "london" et city name = "paris" jusqu'à ce que vous ayez la liste complète des noms et exécutez le script. Maintenant, tous les noms de villes sont sélectionnés. Vous pouvez exporter la sélection sous forme de fichier de forme et l'importer dans une base de données postgresql.

Pour utiliser un backend postgresql dans QGIS, installez une pile postgresql avec geoserver, postgresql et une base de données compatible postgis dans postgresql. Vous devrez connecter QGIS au serveur. Jouez un peu et vous le découvrirez.

lewis
la source