Tampaknya tidak ada cara untuk secara langsung menemukan lapisan induk objek fitur atau apakah itu dipilih dari metode di kelas QgsFeature.
Pendekatan serupa vlayer.selectedFeatures()
adalah untuk menguji apakah feat.id()
ada di vlayer.selectedFeaturesIds()
. QgsFeatureIds bukan nilai unik dibandingkan dengan layer vektor lainnya, hanya di dalam layer mereka sendiri.
Atau, Anda bisa mulai dengan vlayer.selectedFeatures()
dan beralih ke fitur-fitur itu, alih-alih semua fitur penyedia.
Namun pendekatan lain adalah awalnya mengumpulkan set (atau daftar) id fitur yang dipilih dan tidak terpilih untuk lapisan vektor yang diberikan:
# previous relevant code
set_selids = set(vlayer.selectedFeaturesIds())
feat = QgsFeature()
vlayer.select([], QgsRectangle(), False)
set_allids = set()
while vlayer.nextFeature(feat):
set_allids.add(feat.id())
set_notselids = set_allids - set_selids
print set_allids
print set_selids
print set_notselids
Saya sepertinya tidak dapat menemukan satu panggilan untuk mengambil referensi ke semua fitur (atau id) untuk layer vektor (yaitu masih harus menggunakan QgsVectorLayer.select()
dan beralih dengan QgsVectorLayer.nextFeature()
).
Sunting : kode yang diperbarui untuk mencerminkan QgsVectorLaer dapat menangani panggilan pilih (tidak perlu mendapatkan penyedia secara langsung), dan tidak mengacaukan fitur yang dipilih sebenarnya dalam kanvas peta, yang perlu setSelectedFeatures()
diperbarui.
Sunting 2 : setelah membuat set id fitur, Anda dapat mengulanginya dan menggunakannya QgsVectorLayer.featureAtId(featid)
untuk mengakses fitur.