Ottenere un elenco di valori distinti dal campo shapefile utilizzando QGIS?


18

Ho uno shapefile di cui posso filtrare le caratteristiche specificando una clausola where nella finestra di dialogo della query. Fx Ho un campo chiamato 'city_name' e dichiarando 'city_name = "London"' nella clausola dove viene visualizzata solo Londra. Quello che vorrei fare ora è recuperare tutti i valori in "nome_città" dalla tabella degli attributi.

Qualcosa del genere:

select distinct city_name from [attribute table]

A quanto pare ho trovato diversi strumenti in QGIS che si occupano di SQL e ho anche dato una rapida occhiata ai diversi plugin. Ma non riesco a collegarmi a un database o al nome della tabella ... quale database o quale tabella in quel caso?

Alla fine voglio esportare l'elenco dei risultati e usarlo per un'ulteriore elaborazione.

Sto usando QGIS 1.8.

Risposte:


32

Risposta di aggiornamento (versione QGIS> = 2.14)

Da QGIS 2.14 , è possibile utilizzare le istruzioni SQL Run su qualsiasi livello vettoriale caricato utilizzando i livelli virtuali .

  1. Dopo aver caricato il livello in QGIS, vai su Livello> Aggiungi livello> Aggiungi / Modifica livello virtuale ;
  2. Nella finestra di dialogo Crea livello virtuale, inserisci l'istruzione SQL nel campo Query. Qualcosa di simile a:

    SELEZIONA DISTINCT city_name FROM layer_name

  3. Per la geometria impostare Nessuna geometria

  4. Fare clic su OK e una tabella verrà caricata in QGIS con i valori univoci desiderati.

Nota: questa tabella verrà aggiornata se vengono aggiunti nuovi valori alla colonna city_name.

Risposta legacy (versione QGIS <2.14)

Hai alcune scelte per fare ciò che chiedi.

  1. Importa il tuo file di forma in un database Spatialite o Postgis e quindi puoi eseguire una query sulla tabella utilizzando istruzioni SQL complete;
  2. Usa lo strumento Dissolve (Vettore> Strumenti di geoprocessing> Dissolvi), per dissolvere i tuoi file di forma usando il campo "nome_città". Sebbene sia un metodo strano, il file dbf del file di forma risultante fornirà l'elenco necessario;
  3. Dai un'occhiata al plug-in delle statistiche di gruppo (1.6) , puoi usare "nome_città" come campo di classificazione e premere calcola. Calcolerà alcune statistiche su ogni città, è quindi possibile copiare il risultato ed estrarre l'elenco delle città.

Ho appena notato che, in Vector> Strumenti di analisi , esiste uno strumento Elenco valori unici che è esattamente ciò di cui si ha bisogno per questo compito. Così facile ... senza soluzioni alternative e senza bisogno di plugin.


6

Usa QGIS DB Manager e accedi al tuo shapefile tramite 'livelli virtuali'

È quindi possibile utilizzare la finestra SQL e scrivere la query:

inserisci qui la descrizione dell'immagine


1
Questa è ora (QGIS 2.14+) la risposta corretta.
Alexandre Neto,


-1

Usa il generatore di query in QGIS, vai al campo del nome della città nei campi del generatore di query. Vai ai valori, aggiungi tutto. Elimina eventuali null.

Crea uno script simile a city name = "london" e city name = "paris" fino a quando non hai l'elenco completo dei nomi ed esegui lo script. Ora vengono selezionati tutti i nomi di città. È possibile esportare selezionati come file di forme e importarli in un database postgresql.

Per usare un backend postgresql su QGIS installare uno stack postgresql con geoserver, postgresql e un database abilitato postgis in postgresql. Dovrai connettere QGIS al server. Gioca un po 'e lo scoprirai.

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.