अजगर का उपयोग करके QGIS में "गुण द्वारा चयन करें"?


16

क्या पायथन कमांड का उपयोग करके QGIS में "सेलेक्ट बाय अट्रैक्शन" फ़ंक्शन का उपयोग करने का एक तरीका है? मेरे प्लगइन में उपयोगकर्ता को GUI के माध्यम से एक मान दर्ज करना चाहिए और इस मान का उपयोग किसी फ़ंक्शन में किया जाना चाहिए जो उन सभी विशेषताओं का चयन करता है जिनमें यह विशेषता है। कॉलम नाम कोड में तय किया गया है, फ़ंक्शन को केवल सही मान के लिए खोजना चाहिए।

मेरे वर्तमान समाधान में फ़ंक्शन QGIS को एक PostgreSQL डेटाबेस से जोड़ता है और एक SQL स्टेटमेंट चलाता है। यह परिणाम से एक तालिका बनाता है और तालिका को क्यूजीआईएस में शेपफाइल के रूप में कल्पना की जाती है।

प्रिंसिपल में यह सुविधाओं को उजागर करने के लिए पर्याप्त होगा न कि चयन का एक नया शेपफाइल बनाने के लिए। "सेलेक्ट बाय अटेंशन" फ़ंक्शन का उपयोग करना अनावश्यक डेटाबेस कनेक्शन को भी छोड़ देगा।

क्या अजगर में "सेलेक्ट बाय अट्रैक्शन" फ़ंक्शन का उपयोग करने का एक तरीका है ताकि सुविधाओं को उजागर किया जाए? QGIS में फ़ंक्शन का उपयोग करने से क्वेरी से मेल नहीं खाने वाली सभी सुविधाएँ अस्थायी रूप से खाली हो जाती हैं जो ठीक भी होंगी।


1
इन उत्तरों को एक qgis 3 अद्यतन की आवश्यकता है।
मॉन्स्टरमुशरूम

जवाबों:


8

हाँ। आप पायथन बाइंडिंग के माध्यम से सभी विशेषताओं को प्राप्त कर सकते हैं और अपने स्वयं के प्लगइन में अतिरिक्त फ़िल्टरिंग को लागू कर सकते हैं। देखें इस PyQGIS Coobook अंश ठहरनेवाला और कुछ उदाहरण के लिए। आप फिर लौटे शब्दकोश से किसी भी गैर-परिणामी परिणाम को बाहर करेंगे।

विज़ुअलाइज़ेशन के लिए, आपको अभी भी एक और परत बनानी होगी select() इसमें उपयुक्त तर्क नहीं हैं। आप भौतिक फ़ाइलों (कुकबुक में अधिक) बनाने से बचने के लिए मेमोरी लेयर का उपयोग कर सकते हैं।

संपादित करें:

असल में, आप उपयोग कर सकते हैं selectedFeaturesIds()के साथ setSelectedFeatures(ids)सबसेट आपके द्वारा बनाए गए चयन को बदलने के। कार्यान्वयन को सीधे उद्धृत करना:

/** Get a copy of the user-selected features */  
QList<QgsFeature> selectedFeatures();

/** Return reference to identifiers of selected features */
const QSet<qint64> &selectedFeaturesIds() const;

/** Change selection to the new set of features */
void setSelectedFeatures(const QSet<qint64> &ids);

अफ़सोस की बात है! मुझे लगा कि यह क्यूजीआईएस में संभव है, क्योंकि आर्कजीआई में आर्कपी का उपयोग करना भी संभव है। फिर भी आपके उत्तर के लिए धन्यवाद!
userHH

शायद कोई रास्ता हो; मैं अभी यह नहीं जानता। साइट के अन्य उपयोगकर्ताओं को कुछ समय दें - शायद कोई करता है।
lynxlynxlynx

मुझे लगता है कि यह संभव होना चाहिए। QGIS में उन सभी सुविधाओं की कल्पना की जाती है जो चयन के साथ मेल खाती हैं, अन्य सभी सुविधाएँ अस्थायी रूप से खाली हो जाती हैं।
userHH

यह है, मैंने इसे पाया। QGIS कोर में ऐसा करता है, लेकिन ऐसा लगता है कि यह चयन को ठीक से समायोजित करने के लिए पर्याप्त इंटरफ़ेस को उजागर करता है।
lynxlynxlynx

क्या आप मुझे लिंक भेज सकते हैं?
userHH

9

क्यूजीआईएस 2.2 से शुरू यह बहुत ही स्वाभाविक तरीके से समर्थित है। यह QgsFeatureRequest.setFilterExpression( unicode )विधि का उपयोग करके QGIS अभिव्यक्ति इंजन के माध्यम से किया जा सकता है ।

# The important part: get the feature iterator with an expression
it = l.getFeatures( QgsFeatureRequest().setFilterExpression ( u'"Counties" = \'Norwich\'' ) )
# Set the selection
l.setSelectedFeatures( [ f.id() for f in it ] )

इसके बारे में सबसे अच्छी बात: यदि आपके पास हाल ही में क्यूजीआईएस संस्करण (2.10 और बाद में) है, तो इसे डेटाबेस में सीधे फ़िल्टर किया जाएगा, जबकि अन्य समाधानों की तुलना में बहुत अधिक निष्पादन योग्य है जबकि अभी भी बहुत पठनीय है।


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.