Bagaimana cara Mendapatkan fitur berdasarkan atributnya (mirip dengan Iqueryfilter di arcobjects) di Qgis menggunakan python? Alih-alih mendapatkan semua fitur dan memfilternya secara manual, apakah ada opsi untuk menggunakan tempat klausa untuk memfilternya?
Contoh: Saya memiliki nama bidang yang disebut 'Kabupaten'. Ini memiliki lebih dari lima puluh ribu fitur. Yaitu tidak mungkin mengambil semua fitur dan memfilternya karena memakan waktu. Jadi saya bisa menanyakannya dengan menggunakan iqueryfilter.whereclause = 'Counties = Norwich' di arcobjects. Hal serupa yang saya butuhkan di PyQgis.
Jawaban:
Mesin ekspresi QGIS dapat melakukan ini menggunakan
QgsFeatureRequest.setFilterExpression( unicode )
metode (Sejak QGIS 2.2)Dimulai dengan QGIS 2.10 bahkan mungkin bahwa pemfilteran sedemikian rupa akan memberi Anda beberapa kinerja ekstra dibandingkan jenis pemfilteran lainnya (seperti implementasi python).
Pada dasarnya ini berlaku jika tiga kondisi berikut dipenuhi:
Anda menggunakan layer dengan penyedia postgis.Saat ini (2.16), lebih banyak dari sekadar penyedia postgis yang mengimplementasikan ini (spatialite, ogr, oracle ...).>
,=
,IN
,NOT NULL
... yang didukung)Dengan QGIS 3.0 bahkan dimungkinkan untuk melakukannya
sumber
Posting ini - yang dapat dianggap sebagai jawaban untuk pertanyaan duplikat - merinci cara mengambil semua atribut dari sebuah layer. Penulis menjelaskan proses yang Anda cari sebagai memfilter data secara manual setelah dikembalikan. Ini adalah referensi yang cukup lengkap dan tautannya akan sangat membantu Anda.
sumber
Dengan menggunakan query sql juga mudah mungkin dengan
ogr
. Anda dapat menjalankan kode ini misalnya di konsol python QGIS atau skrip mandiri.Contoh :
sumber
Menentukan filter SQL belum didukung menggunakan QGIS API pada versi 1.9.
Seperti yang saya pahami dari artikel milis ini , dukungan untuk "SQL penyedia asli" hanya akan ada di rilis mendatang.
sumber