उपयोगकर्ता इनपुट के साथ ModelBuilder का उपयोग करके विशेषता द्वारा निकालना?


11

ModelBuilder का उपयोग करते हुए, मैं एक उपकरण बनाना चाहता हूं जो उपयोगकर्ता को उन मानों या मूल्यों का चयन करने देगा जो किसी आकृति को निकालने के लिए उपयोग किए जाएंगे।

मेरे पास "Parcel_Type" फ़ील्ड के साथ एक पार्सल परत है। मैं चाहता हूं कि उपयोगकर्ता निकालने के लिए पार्सल के प्रकार को चुनने में सक्षम हो। इसलिए यदि उपयोगकर्ता पार्सल को "ईएल" प्रकार के साथ निकालना चाहता है, तो उसे केवल चर के रूप में "ईएल" दर्ज करना होगा। यदि वह "ईएल" और "सीडीडी" टाइप करना चाहता है, तो उसे बहु-चर के रूप में दर्ज करना होगा। यह मॉडल के साथ एकमात्र मानवीय संपर्क होगा।

तो मैं अपने मॉडल में उन चर का उपयोग कैसे कर सकता हूं?

जवाबों:


14

इस तरह के ऑपरेशन में लगभग हमेशा WHERE क्लॉज लिखना शामिल होता है, इसलिए मुझे लगता है कि कम से कम थोड़ा सा पायथन का उपयोग करना क्रम में है।

इसके अलावा जब यह संभव है ModelBuilder, IMO के साथ, कस्टम सत्यापन के साथ एक पायथन स्क्रिप्ट टूल का निर्माण और पैरामीटर सेटिंग्स पर अधिक नियंत्रण एक बेहतर उपयोगकर्ता अनुभव प्रदान कर सकता है - उदाहरण के लिए, फ़ील्ड और मल्टीव्यू * पैरामीटर ड्रॉप-डाउन मेनू बनाकर। आप उन्हें टाइप करने के बजाय मान ले सकते हैं।

* संभवतः, वास्तव में मल्टीवैल्यू मापदंडों के बारे में निश्चित नहीं है

हालाँकि, चूंकि यह किसी अन्य विषय के लिए अधिक उन्नत अभ्यास है, इसलिए मैं मॉडलबर्ल दृष्टिकोण पर टिक जाऊंगा, केवल पायथन का उपयोग करके WHERE क्लॉज बनाने के लिए:

  1. एक नया मॉडल बनाएं
  2. चर बनाएं (खाली कैनवास राइट क्लिक करें और क्लिक करें जोड़ें चर ) इनपुट के लिए फ़ीचर लेयर , फील्ड , और MultiValue मानकों।
  3. इनमें से प्रत्येक पर राइट-क्लिक करें और मॉडल पैरामीटर चुनें
  4. कैनवास पर एक गणना मूल्य (डेटा प्रबंधन) उपकरण जोड़ें । इसे 3 वेरिएबल्स को पूर्व शर्त के रूप में कनेक्ट करें (केवल इस मामले में दिखाने के लिए, लेकिन यह अन्य स्थितियों में निष्पादन आदेश में अंतर कर सकता है)।
  5. इसे स्थापित करने के लिए गणना मान टूल पर डबल-क्लिक करें:

    5 ए। अभिव्यक्ति बॉक्स में निम्नलिखित को कॉपी / पेस्ट करें (अपने चर नामों से मिलान करने के लिए समायोजित करें):

    buildWhereClauseMultiValue(r"%Feature Layer%","%Field%","%Values%")

    5 ब। कोड ब्लॉक बॉक्स में निम्नलिखित को कॉपी / पेस्ट करें :

    import arcpy
    
    def buildWhereClauseMultiValue(table, field, values):
        """Takes a semicolon-delimited list of values and constructs a SQL WHERE
        clause to select those values within a given field and table."""
    
        # Add DBMS-specific field delimiters
        fieldDelimited = arcpy.AddFieldDelimiters(arcpy.Describe(table).path, field)
    
        # Split multivalue at semicolons and strip quotes
        valueList = [value[1:-1] if (value.startswith("'") and value.endswith("'")) else value for value in values.split(';')]
    
        # Determine field type
        fieldType = arcpy.ListFields(table, field)[0].type
    
        # Add single-quotes for string field values
        if str(fieldType) == 'String':
            valueList = ["'%s'" % value for value in valueList]
    
        # Format WHERE clause in the form of an IN statement
        whereClause = "%s IN(%s)" % (fieldDelimited, ', '.join(valueList))
        return whereClause

    5c। SQL अभिव्यक्ति होने के लिए आउटपुट डेटा प्रकार सेट करें ।

    5 डी। Ok पर क्लिक करें और कैलकुलेट वैल्यू टूल से आउटपुट वेरिएबल पर क्लिक करें और इसे "WHERE Clause" जैसे कुछ और वर्णनात्मक नाम दें।

  6. कैनवास के लिए एक चुनिंदा परत ( एट्रीब्यूट मैनेजमेंट) टूल जोड़ें । फ़ीचर लेयर और व्हेयर क्लॉज़ वैरिएबल्स को अटैच टू लेटर बाई अटेम्प्ट टूल से कनेक्ट करें।
  7. कैनवास में कॉपी फीचर्स (डेटा मैनेजमेंट) टूल जोड़ें । कॉपी फीचर टूल में एट्रीब्यूट लेयर बाइ सेलेक्ट टूल के आउटपुट को कनेक्ट करें। आउटपुट फ़ीचर क्लास चर पर राइट-क्लिक करें और मॉडल पैरामीटर और (वैकल्पिक रूप से) प्रदर्शन विकल्पों में जोड़ें की जाँच करें।

    इस बिंदु पर इसे कुछ इस तरह से देखना चाहिए: मॉडल कैनवास

  8. मॉडल के तहत -> मॉडल प्रॉपर्टीज मेनू इसे एक अच्छा नाम और लेबल देता है और इसे सेव और बंद करता है।

  9. मॉडल संवाद को लाने के लिए आर्कटूलबॉक्स में मॉडल पर डबल-क्लिक करें। अपने पैरामीटर दर्ज करें और ठीक पर क्लिक करें। इसे चयनित सुविधाओं को एक नई सुविधा वर्ग में निर्यात करना चाहिए और इसे मानचित्र में जोड़ना चाहिए (यदि आपने आउटपुट फीचर वर्ग पर "प्रदर्शन में जोड़ें" की जाँच की है)।

    मॉडल संवाद

टिप्पणियाँ:

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

  • यदि आप मेरे जैसे भाग्यशाली हैं, तो आपको मॉडल को मान्य नहीं करना होगा और केवल सत्यापन के बाद इसे हटाने के लिए कुछ डमी डेटा की आपूर्ति करनी होगी (ध्यान दें कि सभी मॉडल तत्व खाली / सफेद हैं, जिसका अर्थ है कि वे "चलाने के लिए तैयार नहीं हैं" - लेकिन मैं इसे मॉडल संवाद पर मापदंडों को भरने पर वैसे भी चलाने में सक्षम था)।


3

यदि आप अपने GUI आवश्यकताओं @ blah238 द्वारा वर्णित सटीक संवाद के लिए नहीं हैं, तो आप इस वर्कफ़्लो को प्राप्त करने के लिए चयन करें नामक एक साधारण जियोप्रोसेसिंग टूल का उपयोग कर सकते हैं।

इसे खोजने के लिए खोज विंडो का उपयोग करें या आर्कटूलबॉक्स> विश्लेषण उपकरण> अर्क> चयन करें पर जाएं।

चुनें (विश्लेषण) उपकरण आपको एक फीचर वर्ग से किसी भी क्षेत्र (विशेषता) का उपयोग करते हुए सुविधाओं निकालने की सुविधा देता है।

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