ArcGIS ModelBuilder में मनमाना कोड जोड़ना?


11

क्या आर्कजीआईएस मॉडल में मनमाना कोड स्निपेट जोड़ने का कोई तरीका है?

मैं उन्नत लेबलिंग या फील्ड कैलकुलेटर में "शो कोड ब्लॉक" अभिव्यक्ति बिल्डर के समान कुछ कल्पना करता हूं ।

उदाहरण के लिए मेरी पल की परियोजना उपकरण चलाने वाले व्यक्ति के उपयोगकर्ता नाम को लाने से बहुत लाभान्वित हो सकती है। मुझे पता है कि अजगर में यह एक सरल है import os; os.environ.get('USERNAME')। मुझे लगता है कि मैं उस स्निपेट को लिख सकता हूं get_username.py, इसे Arccatalog में टूलबॉक्स में जोड़ सकता हूं, फिर उस टूल को मॉडल में जोड़ सकता हूं और इसे मेरे वर्तमान टूल के लिए आवश्यक मॉडल पैरामीटर के अनुसार उपयोग कर सकता हूं। इस तरह की एक छोटी सी चीज के लिए बहुत काम है, और अगली बार मुझे कुछ और चाहिए, जैसे कि इनलाइन वैरिएबल प्रतिस्थापन या एक कंपाउंड वैरिएबल

मुझे लगता है कि एक कोड स्निपेट टूल या समान एक सामान्य, मोटे तौर पर सहायक तरीके से इन सभी जरूरतों को संबोधित कर सकता है।


पागल सोचा: अभिव्यक्ति बिल्डर के बजाय, एक अजगर कमांड लाइन विंडो के बारे में क्या है जो मॉडल को फिर से उपयोग करने के लिए इतिहास को बचाता है?
मैट विल्की

2
वास्तव में जो मैं वास्तव में हूँ उसके बाद पूरे पायथन पुस्तकालय को मॉडल बिल्डर के सामने लाने के लिए उसी तरह से होना चाहिए जैसे कि आर्कगिस उपकरण हैं। लेकिन यह सिर्फ पागल बात (सही?) है
मैट विल्की

महान विचार! आप मक्खी पर कोड स्निपेट्स को एक "टूल" में लिखना चाहते हैं जो स्निपेट को संसाधित करेगा और परिणाम वापस करेगा, है ना? तो आपके उदाहरण में, "टूल" वापस आ जाएगा <current username> जो तब डाउनस्ट्रीम के अन्य टूल्स पर लागू हो सकता है।
रयानKalton

@ रयानडाल्टन, हाँ यह बिल्कुल सही है।
मैट विल्की

जवाबों:


3

एक पुरानी पोस्ट का नया उत्तर, यह स्पष्ट करने के लिए कि ऐसा करने के लिए पुन: प्रयोज्य मॉडल कैसे बनाया जाए।

मॉडल खोलें, सम्मिलित करें-> मॉडल केवल उपकरण-> मान की गणना करें।

अभिव्यक्ति में, टाइप करें: getuser()

कोड ब्लॉक में, टाइप करें:

def getuser():
    import getpass
    return getpass.getuser()

( @ChadCooper से उपयोगकर्ता नाम कोड स्निपेट के स्रोत के लिए " विशिष्ट प्रारूप में उपयोगकर्ता नाम प्राप्त करना " देखें )

डेटा प्रकार के लिए, चुनें String

यहाँ छवि विवरण दर्ज करें

आउटपुट सर्कल का नाम बदलें username। अंतिम परिणाम मॉडल जैसा दिखेगा: गणना मूल्य उपकरण का उपयोग करना

और फिर आप इस मॉडल को किसी भी भविष्य के मॉडल में खींच सकते हैं और किसी भी भविष्य के मॉडल या स्क्रिप्ट में% उपयोगकर्ता नाम% नामक चर का संदर्भ दे सकते हैं। सुनिश्चित करें कि यह मॉडल% उपयोगकर्ता नाम% चर का उपयोग करने से पहले चलता है। आप एक पूर्व शर्त का उपयोग करके ऐसा कर सकते हैं ।


रेयान शायद आप इस पर विस्तार कर सकते हैं कि आउटपुट एक [पी] व्यास क्यों है, और मॉड्यूल का उदाहरण दूसरे मॉड्यूल में शामिल किया जा रहा है। मैं शुरू में बहुत उलझन में था कि पी आउटपुट के लिए क्यों है, क्योंकि आम तौर पर इनपुट के बारे में सभी पैरामीटर होते हैं।
मैट विल्की

@mattwilkie, आपको किसी इनपुट पैरामीटर की आवश्यकता नहीं है क्योंकि अजगर स्क्रिप्ट आपके सिस्टम से इनपुट को "पढ़ेगी"। हालाँकि, आपको आउटपुट (उपयोगकर्ता नाम) को एक पैरामीटर बनाने की आवश्यकता है ताकि आप किसी अन्य मॉडल या पायथन स्क्रिप्ट में परिणामों का उपभोग कर सकें। अगला कदम एक "ईमेल स्क्रिप्ट" की तरह उपयोगकर्ता नाम पैरामीटर को पारित करना होगा जो स्वचालित रूप से "टू" ईमेल पते पर इनपुट के रूप में uesrname आउटपुट पैरामीटर का उपयोग करेगा।
रायनकेडलटन

10

वास्तव में आप यह गणना मूल्य (डेटा प्रबंधन) उपकरण के साथ कर सकते हैं ।

यह विशेष रूप से सुरुचिपूर्ण नहीं है (टूल के लिए संपूर्ण स्रोत कोड हर बार लॉग में मुद्रित होता है), और संपादक (वास्तव में सिर्फ एक टेक्स्ट बॉक्स) abysmal है।

मेरा सुझाव है कि आप ऐसे मॉड्यूल लिख सकते हैं जिनसे आप फ़ंक्शंस आयात और कॉल कर सकते हैं और फिर आपको केवल संवाद में बहुत कम स्निपेट लिखने की आवश्यकता होगी। अन्यथा यह बहुत साफ नहीं है।

गणना मूल्य Arcgis v10 के लिए सभी लाइसेंस स्तरों पर उपलब्ध है। V9.x के साथ यह आर्कव्यू के लिए ही उपलब्ध है यदि स्थानिक या 3 डी विश्लेषक एक्सटेंशन स्थापित ( रेफ )।


धन्यवाद! आज मुझे जो कुछ भी चाहिए वह काफी हद तक काम कर रहा है ( %USERNAME%इनसाइड डेटाबेस कनेक्शन में डालें )। संपादक को सहमत करना उस नाम के योग्य नहीं है, पेस्ट गंतव्य के रूप में ठीक काम करता है।
मैट विल्की

1
पुन: 9.x, CV मदद पृष्ठ का शब्दांकन इंगित करता है कि उपकरण उपलब्ध हो सकता है यदि SA / 3D एक्सटेंशन केवल स्थापित हैं । बिना लाइसेंस के या सक्रिय किए बिना इसका उपयोग करना संभव हो सकता है।
मैट विल्की

"मैं उन मॉड्यूलों को लिखने का सुझाव दूंगा जिन्हें आप फिर आयात कर सकते हैं" - यह वास्तव में बहुत अच्छा विचार है!
कर्टिस की कीमत

2

शायद मैं इस प्रश्न को गलत समझ रहा हूं लेकिन ऐसा लगता है कि आर्कटूलबॉक्स के भीतर अजगर स्क्रिप्ट टूल की कार्यक्षमता है, जिसे आप देख रहे हैं:

http://help.arcgis.com/en/arcgisdesktop/10.0/help/index.html#/Integrating_scripts_within_a_model/002w0000006n000000/

http://help.arcgis.com/en/arcgisdesktop/10.0/help/index.html#//001500000006000000.htm

आप वास्तव में कई अन्य स्क्रिप्टिंग भाषाओं का उपयोग / संयोजन कर सकते हैं (इस उदाहरण में R):

http://help.arcgis.com/en/arcgisdesktop/10.0/help/index.html#//002w0000007w000000



3
यह काम करता है (और यह है कि मैं इसे कैसे करूँगा), लेकिन मैट ने विशेष रूप से इस पद्धति को "इतनी छोटी सी बात के लिए बहुत काम" कहा है :)
nmpeterson
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.