Chciałem tylko opublikować kilka aktualizacji poprzedniej odpowiedzi w świetle zmian w QGIS Python API od wersji 2.0 .
Tak jak poprzednio, otrzymasz listę wybranych funkcji iface.activeLayer().selectedFeatures()
, jednak w QGIS
wersjach >= 2.0
używasz teraz tej funkcji QgsFeature.attributes()
zamiast QgsFeature.attributeMap()
. Dwie funkcje nie są dokładnie takie same: attributes()
teraz zwraca listę , podczas gdy stara attributeMap()
zwróciła słownik . Poświęć chwilę, aby zapoznać się z dokumentacją API dla QgsFeature.attributes()
, QgsAttributes
itp zrozumieć, w jaki sposób atrybuty są przechowywane / dostępne.
Jeśli jesteś zainteresowany, możesz przeczytać o uzasadnieniu zmian API w tym wątku na liście mailowej: [Qgis-developer] nowe funkcje wyboru interfejsu wektorowego . W skrócie (słowami dewelopera QGIS, Martina Dobiasa):
Dostęp do atrybutów: f.attributeMap()
już nie ma, ponieważ atrybuty są teraz przechowywane w wektorze (Python:) list
zamiast mapy (Python:) dict
. QgsFeature
klasa emuluje obiekt kontenera Python
4, dzięki czemu można uzyskać dostęp do atrybutów tak, jakby QgsFeature
instancja była listą lub słownikiem, przy czym kluczami są indeksy pól lub nazwy pól:
f[0]
... pierwszy atrybut
f["type"]
... atrybut o nazwie „typ”
Nadal można uzyskać wszystkie atrybuty: f.attributes()
zwraca listę wartości.
Jako przykład konkretnie tego, o co pytałeś (jak uzyskać dane dla pojedynczej wybranej funkcji), załóżmy, że posiadasz warstwę zawierającą city
funkcje, z których każda ma listę atrybutów, w tym county
atrybut. Aby uzyskać county
wartość dla wybranego miasta (powiedzmy Helena, AR
), wykonaj następujące czynności w konsoli Python:
city = iface.activeLayer().selectedFeatures()[0]
city["county"]
# OUTPUTS: u'Phillips'
Jeśli chcesz wartości wszystkich pól w tabeli atrybutów miasta, po prostu użyj:
cityData = city.attributes()