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 QGISversioni >= 2.0ora 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(), QgsAttributesecc 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:) listanziché in una mappa (Python:) dict. QgsFeatureclass emula l'oggetto contenitore python
4 in modo da poter accedere agli attributi come se QgsFeatureistanza 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 cityfunzionalità che contengono ciascuna un elenco di attributi, incluso un countyattributo. Per ottenere il countyvalore 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()