विशेषता तालिका में मौजूद जानकारी को प्राप्त करने का तरीका क्या है, कॉलम 2, पंक्ति 2 में pyqgis का उपयोग करके कहें?
विशेषता तालिका में मौजूद जानकारी को प्राप्त करने का तरीका क्या है, कॉलम 2, पंक्ति 2 में pyqgis का उपयोग करके कहें?
जवाबों:
एक परत में हर सुविधा पर लूप करने के लिए, getFeatures()जनरेटर का उपयोग करें । यह QgsFeatureपरत में सुविधाओं का पुनरावृत्ति करता है ( )।
for feature in layer.getFeatures():
pass # do something with feature
यदि आप परत में सभी विशेषताओं के बजाय केवल किसी विशेष सुविधा में रुचि रखते हैं, तो आप इसका उपयोग करके इसका उपयोग कर सकते हैं QgsFeatureRequestऔर यह FID है:
fid = 1 # the second feature (zero based indexing!)
iterator = layer.getFeatures(QgsFeatureRequest().setFilterFid(fid))
feature = next(iterator)
एक बार जब आपके पास एक QgsFeatureवस्तु होती है, तो आप attributes()उस सुविधा (उर्फ पंक्ति) से जुड़ी विशेषताओं (उर्फ कॉलम या फ़ील्ड) को पुनः प्राप्त करने के लिए विधि का उपयोग कर सकते हैं , जैसे:
# get the feature's attributes
attrs = feature.attributes()
# print the second attribute (note zero based indexing of Python lists)
print(attrs[1])
यदि आप फ़ील्ड को एक नंबर के बजाय नाम से अनुक्रमित करना चाहते हैं, तो आपको फ़ील्ड मैपिंग का उपयोग करने की आवश्यकता है:
idx = layer.fieldNameIndex('name')
print(feature.attributes()[idx])
फ़ील्ड इंडेक्स लूप के दौरान नहीं बदलना चाहिए, इसलिए आपको केवल एक बार कॉल करना होगा।
PyQGIS रसोई की किताब में अधिक जानकारी और उदाहरण हैं: http://www.qgis.org/pyqgis-cookbook/vector.html#iterating-over-vector-layer
अपडेट करें
आप इस QgsFeatureतरह dict, जैसे, का उपयोग करके सुविधा विशेषताओं को अधिक आसानी से एक्सेस कर सकते हैं
for feature in layer.getFeatures():
name = feature["name"]
मुझे यकीन नहीं है कि कौन सा संस्करण आया या यदि यह हमेशा रहा है।
सोचा था कि मैं वास्तव में कुछ कोड जोड़ूंगा, क्योंकि इस समस्या को हल करने के बाद यह प्रश्न वापस आ जाता है ... ज्यादातर लोग एक त्वरित स्पष्टीकरण या एक कोड स्निपेट को एक लिंक पर पसंद करते हैं, जो एक पृष्ठ पर ले जाता है जिसमें बहुत अधिक जानकारी होती है।
तालिका में जानकारी प्राप्त करने के लिए आपको सबसे पहले परत की विशेषताओं का उपयोग करना होगा । मेरे मामले में मैंने सुविधाओं को एक चर में रखा। फिर आप सुविधाओं के माध्यम से लूप करते हैं , और प्रत्येक विशेषता के लिए आप इसकी विशेषताओं को कॉल करते हैं , जो तब उनके कॉलम इंडेक्स का उपयोग करके मुद्रित किया जा सकता है । उदाहरण के लिए, यदि मैं दूसरे कॉलम में सभी मान प्राप्त करना चाहूंगा, तो मैं यह करूंगा:
lyr = iface.activeLayer()
features = lyr.getFeatures()
for feat in features:
attrs = feat.attributes()
print attrs[1]
ऊपर दिए गए उत्तर केवल यह दिखाते हैं कि सक्रिय परत के लिए यह कैसे करना है। मुझे लगता है, कई मामलों में आप एक परत के लिए उक्त विशेषता ढूंढना चाहते हैं जो कि सक्रिय परत या परत खिड़की में जाँच की गई परत नहीं है। नीचे दिए गए कोड में उन सभी परतों की एक सूची मिलेगी, जिन्हें आपने अपनी परत विंडो में जोड़ा है (भले ही वे जाँची या सक्रिय हों) और पंक्ति 2, कॉलम 2 में विशेषता ढूंढें।
from qgis.core import QgsProject
layer = QgsProject.instance().mapLayersByName("myLayerName")[0]
value = layer.getFeature(2).attribute(2)
नोट MapLayersByName दिए गए नाम के साथ परतों की एक सूची देता है। मैं इस उदाहरण के लिए मौजूद हूं।