ดูเหมือนจะไม่มีวิธีในการค้นหาเลเยอร์หลักของออบเจกต์คุณลักษณะโดยตรงหรือไม่ว่าจะถูกเลือกจากวิธีการในคลาส QgsFeature
วิธีการคล้ายกับvlayer.selectedFeatures()
ที่จะทดสอบว่าอยู่ในfeat.id()
vlayer.selectedFeaturesIds()
QgsFeatureIds ไม่ใช่ค่าที่ไม่ซ้ำกันเมื่อเทียบกับเลเยอร์เวกเตอร์อื่น ๆ เฉพาะภายในเลเยอร์ของตนเอง
หรืออีกวิธีหนึ่งคุณสามารถเริ่มต้นด้วยvlayer.selectedFeatures()
และวนซ้ำคุณลักษณะเหล่านั้นแทนคุณลักษณะทั้งหมดของผู้ให้บริการ
อีกวิธีหนึ่งคือการรวบรวมชุด (หรือรายการ) ของรหัสคุณลักษณะที่เลือกและไม่ได้เลือกไว้สำหรับเลเยอร์เวกเตอร์ที่ระบุ:
# 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
ฉันดูเหมือนจะไม่พบการเรียกครั้งเดียวสำหรับการดึงการอ้างอิงถึงคุณสมบัติทั้งหมด (หรือรหัส) สำหรับเลเยอร์เวกเตอร์ (เช่นยังต้องใช้QgsVectorLayer.select()
และทำซ้ำด้วยQgsVectorLayer.nextFeature()
)
แก้ไข : รหัสที่อัปเดตเพื่อให้สะท้อนถึง QgsVectorLaer สามารถจัดการการโทรที่เลือก (ไม่จำเป็นต้องรับผู้ให้บริการโดยตรง) และไม่รบกวนคุณสมบัติที่เลือกจริงในแผนที่ผ้าใบซึ่งจะต้องมีsetSelectedFeatures()
การอัปเดต
แก้ไข 2 : หลังจากสร้างรหัสคุณลักษณะคุณสามารถวนซ้ำและใช้QgsVectorLayer.featureAtId(featid)
เพื่อเข้าถึงคุณลักษณะ