पायथन का उपयोग करते हुए QGIS में एक चयनित सुविधा के डेटा को प्राप्त करना?


10

मुझे अजगर और क्यूजीआईएस के बारे में एक समस्या / सवाल है। क्या अजगर का उपयोग करके QGIS में एक चयनित सुविधा का डेटा प्राप्त करना संभव है, और यदि ऐसा है तो कैसे?

मेरे उदाहरण में मेरे पास एक परत है जो शहरी नियोजन के लिए कुछ पार्सल दिखाती है। अगर मैं अब पार्सल में से किसी एक का चयन करता हूं तो मैं वास्तव में इस पार्सल के लिए डेटा प्राप्त करना चाहता हूं। इस डेटा को एक पाइथन स्क्रिप्ट द्वारा पढ़ा जाना चाहिए और फिर एक स्वचालित रूप से बनाई गई पीडीएफ फाइल में जोड़ा जाना चाहिए। अंतिम चरण आसान है, लेकिन मुझे इस चयनित सुविधा से डेटा नहीं मिला।

सक्रिय परत से डेटा प्राप्त करना संभव है, लेकिन क्या इस परत की एक चयनित विशेषता से डेटा प्राप्त करना भी संभव है?

क्या आपसे मुझे मदद मिल सकती है। सादर

जवाबों:


15

कॉलिंग layer.selectedFeatures()आपके चयनित फीचर (ओं) के साथ एक सूची लौटाएगा। फिर आप feature.attributeMap()प्रत्येक फीचर की विशेषताओं का शब्दकोश पाने के लिए प्रत्येक चयनित सुविधाओं पर कॉल कर सकते हैं ।

layer = qgis.utils.iface.activeLayer()
selected_features = layer.selectedFeatures()
for i in selected_features:
    attrs = i.attributeMap()
    for (k,attr) in attrs.iteritems():
    print "%d: %s" % (k, attr.toString())

मैंने हाल ही में यहां एक समान प्रश्न का उत्तर दिया था: जब पाइकगिस के साथ एक वेक्टर परत पर पुनरावृत्ति होती है, तो मैं कैसे जांचता हूं कि क्या एक सुविधा का चयन किया गया है?


अजीब, QgsFeature ऑब्जेक्ट जो select_features के परिणाम हैं, उनकी कोई ज्यामिति विधि नहीं है ...
user32882

9

मैं संस्करण 2.0 के बाद से QGIS पायथन एपीआई में परिवर्तन के प्रकाश में पिछले उत्तर के लिए कुछ अपडेट पोस्ट करना चाहता था ।

पहले की तरह, आपको चयनित सुविधाओं की एक सूची मिल जाएगी iface.activeLayer().selectedFeatures(), हालांकि QGISसंस्करणों में >= 2.0अब आप QgsFeature.attributes()इसके बजाय फ़ंक्शन का उपयोग करते हैं QgsFeature.attributeMap()। दो कार्य वास्तव में समान नहीं हैं: attributes()अब एक सूची लौटाता है , जबकि पुराने attributeMap()ने एक शब्दकोश लौटाया है । के लिए API दस्तावेज़ ब्राउज़ करने के लिए कुछ समय निकालें QgsFeature.attributes(), QgsAttributes, आदि को समझने के लिए गुण संग्रहीत / पहुंचा जा सकता है।

यदि आप रुचि रखते हैं, तो आप इस मेलिंग सूची थ्रेड पर एपीआई परिवर्तनों के पीछे कुछ औचित्य के बारे में पढ़ सकते हैं: [क्यूजीस-डेवलपर] नई वेक्टर एपी चुनिंदा विशेषताएं । संक्षेप में (क्यूजीआईएस डेवलपर मार्टिन डोबियास के शब्दों में):

विशेषताओं तक पहुंच: f.attributeMap()अब और नहीं है, क्योंकि विशेषताओं को अब listएक नक्शे (पायथॉन:) के बजाय एक वेक्टर (पायथन:) में संग्रहीत किया जाता है dictQgsFeatureवर्ग पायथन कंटेनर ऑब्जेक्ट 4 का अनुकरण करता है ताकि आप उन विशेषताओं तक पहुंच सकें जैसे कि QgsFeatureउदाहरण एक सूची या शब्दकोश था, जिसमें कुंजियाँ या तो फ़ील्ड इंडेक्स या फ़ील्ड नाम होती हैं:

f[0] ... पहली विशेषता

f["type"] ... "प्रकार" नाम की विशेषता

सभी विशेषताओं को प्राप्त करना अभी भी संभव है: f.attributes()मूल्यों की सूची लौटाता है।

इसलिए विशेष रूप से एक उदाहरण के रूप में कि आपने क्या करने के लिए कहा है (आपके द्वारा चुनी गई एकल सुविधा के लिए डेटा प्राप्त करें), मान लीजिए कि आपके पास cityविशेषताओं वाली एक परत है जिसमें प्रत्येक में एक विशेषता सहित कई विशेषताओं की सूची है countycountyआपके द्वारा चुने गए एक विशिष्ट शहर के लिए मान प्राप्त करने के लिए Helena, AR, पायथन कंसोल में निम्न कार्य करें:

city = iface.activeLayer().selectedFeatures()[0]
city["county"]
# OUTPUTS: u'Phillips'

यदि आप शहर की विशेषता तालिका के सभी क्षेत्रों के मान चाहते हैं, तो आप इसका उपयोग करेंगे:

cityData = city.attributes()

इसके अलावा आप शहर के सभी फ़ील्ड नाम इस उदाहरण से प्राप्त कर सकते हैं। फ़ील्ड्स ()। नाम () जो फ़ील्ड नामों की सूची लौटाएगा।
कैरी एच

1

मैं जे। टेलर द्वारा उपलब्ध कराए गए उत्तर में कुछ उपयोगी जोड़ना चाहता हूं और यह कहना चाहूंगा कि 2012 से वर्तमान स्वीकृत उत्तर अब सही नहीं है:

QgsFeature ऑब्जेक्ट उपयोगी __geo_interface__विशेषता का समर्थन करता है , जो किसी दिए गए फ़ीचर से एक शब्दकोश देता है। शब्दकोश वास्तव में एक जेजेन्सन मानक में है, इसलिए आपको सभी विशेषता-मूल्य जोड़े और ज्यामिति शामिल हैं। यह सुविधा कुछ समय के लिए मौजूद है, पहली बार सीन गिल्लीज द्वारा 2012 में कुछ समय के लिए वर्णित किया गया था, जिसका उदाहरण यहां दिया गया है । मुझे कोई जानकारी नहीं मिली कि यह QGIS के किस संस्करण से उपलब्ध है और मैंने अभी तक QGIS 3 की कोशिश नहीं की है, लेकिन कम से कम QGIS 2.14 से निश्चित रूप से उपलब्ध था।

टी एल; डॉ:

layer = qgis.utils.iface.activeLayer()
selected_features = layer.selectedFeatures()
for i in selected_features:
    attrs = i.__geo_interface__
    print attrs # GeoJSON attributes of a feature
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.