W jaki sposób można uzyskać informacje zawarte w tabeli atrybutów, powiedzmy w kolumnie 2, wiersz 2, używając pyqgis?
W jaki sposób można uzyskać informacje zawarte w tabeli atrybutów, powiedzmy w kolumnie 2, wiersz 2, używając pyqgis?
Odpowiedzi:
Aby zapętlić każdą funkcję w warstwie, użyj getFeatures()
generatora. Zwraca iterator funkcji ( QgsFeature
) w warstwie.
for feature in layer.getFeatures():
pass # do something with feature
Jeśli interesuje Cię tylko konkretna funkcja, zamiast wszystkich funkcji w warstwie, możesz uzyskać do niej dostęp za pomocą a QgsFeatureRequest
i jej FID:
fid = 1 # the second feature (zero based indexing!)
iterator = layer.getFeatures(QgsFeatureRequest().setFilterFid(fid))
feature = next(iterator)
Po utworzeniu QgsFeature
obiektu możesz użyć attributes()
metody do pobrania atrybutów (aka kolumn lub pól) powiązanych z tą funkcją (aka wiersz), np .:
# get the feature's attributes
attrs = feature.attributes()
# print the second attribute (note zero based indexing of Python lists)
print(attrs[1])
Jeśli chcesz zindeksować pole według jego nazwy, a nie liczby, musisz użyć odwzorowań pól:
idx = layer.fieldNameIndex('name')
print(feature.attributes()[idx])
Indeks pola nie powinien się zmieniać podczas pętli, więc wystarczy go wywołać tylko raz.
Więcej informacji i przykładów znajduje się w książce kucharskiej PyQGIS: http://www.qgis.org/pyqgis-cookbook/vector.html#iterating-over-vector-layer
Aktualizacja
Można znacznie łatwiej uzyskać dostęp do atrybutów przy użyciu funkcji QgsFeature
jak dict
np
for feature in layer.getFeatures():
name = feature["name"]
Nie jestem pewien, która wersja się pojawiła lub czy zawsze tam była.
Pomyślałem, że rzeczywiście dodam trochę kodu, ponieważ google przeglądanie tego problemu zwraca to pytanie ... większość ludzi woli szybkie wyjaśnienie lub fragment kodu zamiast linku prowadzącego do strony zawierającej wiele dodatkowych informacji.
Aby uzyskać informacje w tabeli, musisz najpierw uzyskać dostęp do funkcji warstwy . W moim przypadku funkcje umieszczam w zmiennej. Następnie przeglądasz funkcje i dla każdej funkcji wywołujesz jej atrybuty , które można następnie wydrukować za pomocą indeksu kolumny . Na przykład, jeśli chciałbym uzyskać wszystkie wartości w drugiej kolumnie, zrobiłbym to:
lyr = iface.activeLayer()
features = lyr.getFeatures()
for feat in features:
attrs = feat.attributes()
print attrs[1]
Powyższe odpowiedzi pokazują tylko, jak to zrobić dla warstwy aktywnej. Myślę, że w wielu przypadkach możesz chcieć znaleźć wspomniany atrybut dla warstwy, która nie jest warstwami aktywnymi, lub warstwy zaznaczonej w oknie Warstwy. Poniższy kod wyświetli listę wszystkich warstw dodanych do okna Warstwy (niezależnie od tego, czy są zaznaczone czy aktywne) i znajdzie atrybut w wierszu 2, kolumnie 2.
from qgis.core import QgsProject
layer = QgsProject.instance().mapLayersByName("myLayerName")[0]
value = layer.getFeature(2).attribute(2)
Uwaga mapLayersByName zwraca listę warstw o podanej nazwie. Zakładam, że istnieje jeden dla tego przykładu.