ArcGIS ModelBuilder में कलेक्ट वैल्यू आउटपुट से डेटा निर्यात करना?


11

मैं वर्तमान में ModelBuilder के साथ खेल रहा हूं। मैंने इस समय अपने पास मौजूद मॉडल की एक तस्वीर जोड़ी है।

यह मॉडल वर्तमान में 6 आकार-प्रकार का पुनरावृत्त कर रहा है, इसलिए प्रत्येक 'आउटपुट वैल्यू' में एक सूची में 6 आंकड़े हैं। मुझे इन सूचियों से मानों को तालिका / पाठ फ़ाइल या समान में निकालने का कोई तरीका नहीं मिल सकता है।

क्या इसे करने का कोई तरीका है?

नमूना

यह तब दिखाया जाता है जब मैं मॉडल चलाने के बाद 'आउटपुट वैल्यू' खोलता हूं: यहाँ छवि विवरण दर्ज करें

मैं बस उन 6 नंबरों को किसी तरह से हथियाना चाहता हूं ...


यह मूल रूप से वही बात है जो आप यहां पूछ रहे हैं? gis.stackexchange.com/questions/25922/… कलेक्ट वैल्यूज़ बस यही करता है। यदि आप सहायता पढ़ते हैं तो यह आपको बताएगा कि यह उन मूल्यों को एकत्र करता है जिन्हें किसी अन्य उपकरण में पारित किया जा सकता है। तो आप मूल्यों के साथ क्या करने की कोशिश कर रहे हैं? क्या यह सिर्फ उन्हें एक फ़ाइल में लॉग इन करता है या आपको आगे की प्रक्रिया के लिए उनकी आवश्यकता है?
TheJones

मैं बस उन्हें एक फ़ाइल में लॉग इन करना चाहता हूं। मैं उन्हें निकालने के लिए मॉडल बिल्डर में आउटपुट मानों को खिलाने के लिए एक उपकरण नहीं ढूंढ सकता।
जेपीडी

जवाबों:


17

आप गणना मूल्य (डेटा प्रबंधन) उपकरण और कुछ पायथन जादू का उपयोग करके ऐसा कर सकते हैं । यह संबंधित प्रश्न भी देखें: आर्किस मॉडल बिल्डर के लिए मनमाना कोड जोड़ें?

एक बहु-चर चर मानों का अर्धविराम-सीमांकित स्ट्रिंग है, इसलिए multivaluesToCsvनीचे दिया गया कार्य बहु-चर चर को सूचियों में विभाजित करता है और उन्हें पंक्तियों में परिवर्तित करता है जो तब CSV (अल्पविराम से अलग मान) पाठ फ़ाइल में लिखे जाते हैं।

मॉडल पुनरावृत्तियाँ प्रति बार एक बार मॉडल में सभी प्रक्रियाओं को चलाते हैं - यह हमारे गणना मूल्य उपकरण के लिए अवांछनीय है, जिसे हम केवल एक बार अंत में चलाना चाहते हैं। जिस तरह से आप इसे पूरा करते हैं, वह मूल, आंतरिक मॉडल को लपेटने के लिए एक और बाहरी मॉडल बनाकर होता है। यह एक मॉडल के भीतर एक मॉडल को एकीकृत करने में सहायता विषय पर चर्चा की गई है ।

तो यहां आपको यह काम करने के लिए क्या करने की आवश्यकता है:

इनर मॉडल - Iterates फ़ीचर क्लासेस, उन्हें प्रोसेस करता है, मान एकत्र करता है:

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

बाहरी मॉडल - भीतर का मॉडल चलाता है, आंतरिक मॉडल के पूरा होने पर सिर्फ एक बार वैल्यू टूल की गणना करता है:

  1. एक नया मॉडल बनाएं - यह हमारा "बाहरी" मॉडल होगा।
  2. प्रकार का एक चर जोड़ें Folderआप निर्दिष्ट करने के लिए अनुमति देने के लिए जहां उत्पादन CSV फ़ाइल बनाने के।
  3. आउटपुट CSV फ़ाइल का नामString निर्दिष्ट करने के लिए आपको एक प्रकार का चर जोड़ें ।
  4. नए मॉडल में इनर मॉडल जोड़ें (ArcToolbox से खींचें और ड्रॉप करें या राइट-क्लिक करें और डेटा या टूल जोड़ें, इनर मॉडल पर ब्राउज़ करें और Add पर क्लिक करें)
  5. आंतरिक मॉडल के किसी भी पैरामीटर के लिए वैरिएबल बनाएं जिसे आप बाहरी मॉडल से सेट करने में सक्षम होना चाहते हैं, जैसे कि इनपुट कार्यक्षेत्र (आंतरिक मॉडल पर राइट-क्लिक करें और मेक-वेरिबल-फ्रॉम पैरामीटर चुनें)।
  6. नए मॉडल में कैलकुलेट वैल्यू टूल जोड़ें
  7. परिकलित मान टूल के उपयुक्त बक्से में निम्नलिखित चिपकाएँ:

    अभिव्यक्ति :

    multivaluesToCsv(r"%Output CSV File Location%", "%Output CSV File Name%", "%Feature Class Names%", "%Minimum Distance Values%", "%Average Distance Values%", "%Maximum Distance Values%")
    • यह फ़ंक्शन में मॉडल चर को पारित करने के लिए इन-लाइन चर प्रतिस्थापन का उपयोग करता है । अपने मॉडल चर नामों से मिलान करने के लिए समायोजित करें।
    • rपहले "%Output CSV File Location%"महत्वपूर्ण है: यह इंगित करता है कि यह एक है कच्चे स्ट्रिंग ; क्योंकि विंडोज फाइल सिस्टम पथ में आमतौर पर बैकस्लैश ( पायथन में एक एस्केप कैरेक्टर ) होता है, हमें पायथन को बैकस्लैश और बाद के कैरेक्टर को विशेष चरित्र अनुक्रम के रूप में गलत तरीके से समझने से रोकने के लिए इसका उपयोग करना होगा।
    • इन-लाइन वैरिएबल्स के आसपास उद्धरण देना सुनिश्चित करें क्योंकि उनके बिना पायथन को लगेगा कि वे तार के बजाय पहचानकर्ता हैं।

    कोड ब्लॉक:

    import os, csv
    
    def multivaluesToCsv(csvfilepath, csvfilename, fcnames, minvalues, avgvalues, maxvalues):
        ext = 'csv' # Define output file extension (e.g. csv or txt)
        header = ['FC', 'MIN', 'AVG', 'MAX'] # Define header row (column names)
    
        # Join CSV file path and name, adding extension if necessary
        csvfile = os.path.join(csvfilepath, os.extsep.join((csvfilename, ext)) if not os.path.splitext(csvfilename)[1].lower().endswith(ext) else csvfilename)
    
        # Open text file for writing
        with open(csvfile, 'wb') as f:
            w = csv.writer(f)
            w.writerow(header) # Write header row
            rows = zip(*map(lambda x: x.split(';'), [fcnames, minvalues, avgvalues, maxvalues])) # Transpose the semicolon-delimited values into rows
            w.writerows(rows)
        return csvfile
  8. (वैकल्पिक) इनपुट और आउटपुट चर को मॉडल पैरामीटर के रूप में उजागर करें यदि आप उन्हें मॉडल के टूल संवाद से चलाने में सक्षम होना चाहते हैं या इसे अन्य मॉडल / स्क्रिप्ट के साथ एक साथ चेन कर सकते हैं। बाहरी मॉडल का एकमात्र आउटपुट CSV फ़ाइल है।

  9. (ऑप्शनल) इनपुट वैरिएबल और इनर मॉडल आउटपुट को प्रीकंडिशन के रूप में कैलकुलेटेड वैल्यू टूल से कनेक्ट करें। मुझे नहीं लगता कि इसका वास्तव में कोई प्रभाव पड़ता है, यह सिर्फ दृष्टिगत रूप से स्पष्ट करता है कि क्या चल रहा है।

मैंने ModelBuilder के साथ इसका परीक्षण किया है और इसे काम कर रहा हूं (स्क्रीनशॉट देखें)।

इनर मॉडल : इनर मॉडल

बाहरी मॉडल: बाहरी मॉडल

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


नमस्कार, आपके उत्तर में इतना प्रयास करने के लिए धन्यवाद और मेरे देर से उत्तर के लिए क्षमा याचना। जैसा कि आपने वर्णन किया है, मैं मॉडल को चलाने की कोशिश कर रहा हूं, लेकिन मुझे CSV से परेशानी हो रही है। मैंने Excel में एक रिक्त CSV फ़ाइल बनाई है और इसे सहेजा है, फिर इसे मॉडल में लोड किया है। ERROR 000539: रनिंग एक्सप्रेशन में त्रुटि: multivaluesToCsv (r "% CSV फ़ाइल%", "% FC नाम मान%", "% न्यूनतम मान%", "% औसत मान%", "% मान%") <प्रकार 'अपवाद .IOError '>: [Errno 13] अनुमति से इनकार: u'% CSV फ़ाइल% 'निष्पादित करने में विफल (मान की गणना)। मुझे यह त्रुटि मिलती रहती है। मेरे CSV को CSVFile.csv कहा जाता है।
जेपीडी

1
बस इसे ठीक किया - यह सही समाधान है। आपकी मदद के लिए बहुत धन्यवाद!
जेपीडी

पायथन कोड आपके लिए CSV फ़ाइल बनाएगा, इसे पहले से बनाने की कोई आवश्यकता नहीं है। जैसा कि आपने देखा है, यदि आप एक्सेल में फाइल को खोलते हैं, तो वह फाइल को लॉक कर देता है और इसे तब तक पाइथन द्वारा नहीं लिखा जा सकता है जब तक इसे बंद न कर दें।
ब्लाह 238

2
FYI करें मैंने कई बार चलने वाले परिकलित मान से बचने के साथ-साथ उस समस्या को ठीक करने के लिए निर्देश और स्क्रीनशॉट्स का उपयोग किया है जहां पाठ फ़ाइल को पहले से मौजूद होना था (अब आप इसका आउटपुट स्थान और फ़ाइल नाम दो अलग-अलग मापदंडों के रूप में निर्दिष्ट करते हैं)।
blah238

बहुत बढ़िया जवाब! एक सीएसवी फ़ाइल के लिए भूस्थैतिक परत क्रॉस सत्यापन आंकड़ों के आउटपुट के समान समस्या को हल करने में मेरी मदद की। धन्यवाद @ blah238!
कपास .ockwood

1

आउटपुट जो आपके मॉडल का वर्णन करता है, वह विशेषता तालिका में अपडेट किया गया मान है? क्या आप केवल अपडेट की गई आकृति के साथ .dbf फाइल को नहीं खोल सकते हैं?

इसे विफल करते हुए, तालिका चयन (विश्लेषण उपकरण> अर्क) को SQL क्वेरी के साथ काम करना चाहिए।


नमस्कार, आपके उत्तर के लिए धन्यवाद। मुझे डर है कि यह प्रत्येक आकार फ़ाइल की .dbf फ़ाइल को अद्यतन नहीं करता है। मॉडल बिल्डर में 'टेबल सेलेक्ट' जोड़ने से भी काम नहीं चलता, क्योंकि मैं टूल के इनपुट के रूप में 'मिनिमम / एवरेज / मैक्सिमम डिस्टेंस' या 'आउटपुट वैल्यूज' को कनेक्ट नहीं कर सकता।
जेपीडी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.