Volevo solo pubblicare alcuni aggiornamenti alla risposta precedente alla luce delle modifiche all'API QGIS Python dalla versione 2.0 .
Come prima, si otterrebbe un elenco di funzionalità selezionate con iface.activeLayer().selectedFeatures()
, tuttavia nelle QGIS
versioni >= 2.0
ora si utilizza la funzione QgsFeature.attributes()
anziché QgsFeature.attributeMap()
. Le due funzioni non sono esattamente le stesse: attributes()
ora restituisce un elenco , mentre il vecchio attributeMap()
restituiva un dizionario . Prendetevi un momento per sfogliare la documentazione delle API per QgsFeature.attributes()
, QgsAttributes
ecc per capire come attributi sono memorizzati / accessibili.
Se sei interessato, puoi leggere alcune delle motivazioni alla base delle modifiche all'API su questo thread della mailing list: [Qgis-developer] nuove funzionalità di selezione di API vettoriali . In breve (nelle parole dello sviluppatore di QGIS Martin Dobias):
Accesso agli attributi: non esiste f.attributeMap()
più, poiché gli attributi sono ora memorizzati in un vettore (Python:) list
anziché in una mappa (Python:) dict
. QgsFeature
class emula l'oggetto contenitore python
4 in modo da poter accedere agli attributi come se QgsFeature
istanza fosse un elenco o un dizionario, con le chiavi che sono indici di campo o nomi di campo:
f[0]
... primo attributo
f["type"]
... attributo denominato "tipo"
È ancora possibile ottenere tutti gli attributi: f.attributes()
restituisce un elenco di valori.
Quindi, come esempio specifico di ciò che ti è stato chiesto come fare (ottenere i dati per una singola funzione che hai selezionato), supponi di avere un livello di city
funzionalità che contengono ciascuna un elenco di attributi, incluso un county
attributo. Per ottenere il county
valore per una città specifica selezionata (ad esempio Helena, AR
), procedi come segue nella console di Python:
city = iface.activeLayer().selectedFeatures()[0]
city["county"]
# OUTPUTS: u'Phillips'
Se vuoi i valori di tutti i campi nella tabella degli attributi della città, allora dovresti semplicemente usare:
cityData = city.attributes()