Apa cara untuk mendapatkan informasi yang terkandung dalam tabel atribut, katakanlah di kolom 2, baris 2 menggunakan pyqgis?
Apa cara untuk mendapatkan informasi yang terkandung dalam tabel atribut, katakanlah di kolom 2, baris 2 menggunakan pyqgis?
Jawaban:
Untuk mengulang setiap fitur dalam satu layer, gunakan getFeatures()
generator. Ini mengembalikan iterator fitur ( QgsFeature
) di lapisan.
for feature in layer.getFeatures():
pass # do something with feature
Jika Anda hanya tertarik pada fitur tertentu, alih-alih semua fitur di layer, Anda dapat mengaksesnya menggunakan QgsFeatureRequest
dan itu FID:
fid = 1 # the second feature (zero based indexing!)
iterator = layer.getFeatures(QgsFeatureRequest().setFilterFid(fid))
feature = next(iterator)
Setelah Anda memiliki QgsFeature
objek, Anda dapat menggunakan attributes()
metode untuk mengambil atribut (alias kolom atau bidang) yang terkait dengan fitur itu (alias baris), misalnya:
# get the feature's attributes
attrs = feature.attributes()
# print the second attribute (note zero based indexing of Python lists)
print(attrs[1])
Jika Anda ingin mengindeks bidang dengan nama itu, bukan angka, Anda perlu menggunakan pemetaan bidang:
idx = layer.fieldNameIndex('name')
print(feature.attributes()[idx])
Indeks bidang tidak boleh berubah selama loop, jadi Anda hanya perlu menyebutnya sekali.
Ada lebih banyak informasi dan contoh dalam buku masak PyQGIS: http://www.qgis.org/pyqgis-cookbook/vector.html#iterating-over-vector-layer
Memperbarui
Anda dapat mengakses atribut fitur dengan lebih mudah dengan menggunakan QgsFeature
like a dict
, mis
for feature in layer.getFeatures():
name = feature["name"]
Saya tidak yakin versi mana yang masuk atau apakah selalu ada di sana.
Saya pikir saya sebenarnya akan menambahkan beberapa kode, karena googling masalah ini mengembalikan pertanyaan ini ... kebanyakan orang lebih suka penjelasan cepat atau potongan kode ke tautan yang mengarah ke halaman yang memiliki banyak informasi tambahan.
Untuk mendapatkan informasi dalam tabel, Anda harus terlebih dahulu mengakses fitur-fitur layer . Dalam kasus saya, saya menempatkan fitur dalam variabel. Kemudian Anda mengulangi fitur , dan untuk setiap fitur Anda memanggil atributnya , yang kemudian dapat dicetak menggunakan indeks kolom mereka . Misalnya, jika saya ingin mendapatkan semua nilai di kolom kedua, maka saya akan melakukan ini:
lyr = iface.activeLayer()
features = lyr.getFeatures()
for feat in features:
attrs = feat.attributes()
print attrs[1]
Jawaban di atas hanya menunjukkan bagaimana melakukan ini untuk lapisan aktif. Saya akan berpikir, dalam banyak kasus, Anda mungkin ingin menemukan atribut kata untuk lapisan yang bukan lapisan aktif atau lapisan diperiksa di jendela Layers. Kode di bawah ini akan mendapatkan daftar semua lapisan yang telah Anda tambahkan ke jendela Layers Anda (terlepas dari apakah mereka dicentang atau aktif) dan temukan atribut di baris 2, kolom 2.
from qgis.core import QgsProject
layer = QgsProject.instance().mapLayersByName("myLayerName")[0]
value = layer.getFeature(2).attribute(2)
Catatan mapLayersByName mengembalikan daftar lapisan dengan nama yang diberikan. Saya mengasumsikan ada satu untuk contoh ini.