किसी फीचर ऑब्जेक्ट की पैरेंट लेयर को सीधे खोजने का कोई तरीका प्रतीत नहीं होता है या यह 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
मैं वेक्टर लेयर के लिए सभी सुविधाओं (या ids) के संदर्भ को पुनः प्राप्त करने के लिए एक एकल कॉल नहीं ढूँढ सकता (अर्थात अभी भी उपयोग करना है QgsVectorLayer.select()
और इसके साथ पुनरावृति करना है QgsVectorLayer.nextFeature()
)।
संपादित करें : QgsVectorLaer को प्रतिबिंबित करने के लिए अपडेट किया गया कोड चुनिंदा कॉल को संभाल सकता है (सीधे प्रदाता प्राप्त करने की आवश्यकता नहीं है), और मैप कैनवस में वास्तविक चयनित सुविधाओं को गड़बड़ नहीं करता है, जिसे setSelectedFeatures()
अपडेट करने की आवश्यकता होगी ।
एडिट 2 : फीचर आईडी सेट करने के बाद, आप उन पर पुनरावृति कर सकते हैं और QgsVectorLayer.featureAtId(featid)
सुविधा का उपयोग कर सकते हैं।