การส่งออกข้อมูลจากการรวบรวมค่าเอาท์พุตใน ArcGIS ModelBuilder?


11

ฉันกำลังเล่นกับ ModelBuilder ฉันได้เพิ่มรูปแบบที่ฉันมีในขณะนี้

รุ่นนี้กำลังวนรูปร่างไฟล์ 6 ไฟล์ดังนั้นค่า 'เอาต์พุต' แต่ละอันจะมีตัวเลข 6 ตัวในรายการ ฉันไม่สามารถหาวิธีดึงค่าจากรายการเหล่านี้ลงในไฟล์ตาราง / ข้อความหรือสิ่งที่คล้ายกันได้

มีวิธีทำเช่นนี้หรือไม่?

แบบ

นี่คือสิ่งที่จะปรากฏเมื่อฉันเปิด 'มูลค่าส่งออก' หลังจากใช้งานโมเดล: ป้อนคำอธิบายรูปภาพที่นี่

ฉันแค่ต้องการคว้าตัวเลข 6 ตัวเหล่านั้น ...


นี่เป็นสิ่งเดียวกับที่คุณถามที่นี่ใช่ไหม gis.stackexchange.com/questions/25922/…เก็บค่าทำเช่นนั้น หากคุณอ่านความช่วยเหลือมันจะบอกคุณว่ามันรวบรวมค่าที่สามารถส่งผ่านไปยังเครื่องมืออื่น ดังนั้นคุณพยายามทำอะไรกับค่า มันเป็นเพียงแค่บันทึกพวกเขาไปยังไฟล์หรือคุณต้องการพวกเขาสำหรับการประมวลผลเพิ่มเติมหรือไม่
theJones

ฉันแค่ต้องการบันทึกไว้ในไฟล์ ฉันไม่สามารถหาเครื่องมือเพื่อป้อนค่าเอาต์พุตในตัวสร้างแบบจำลองเพื่อดึงข้อมูล
JPD

คำตอบ:


17

คุณสามารถทำได้โดยใช้เครื่องมือคำนวณมูลค่า (การจัดการข้อมูล)และเวทมนตร์ Python ดูเพิ่มเติมที่เกี่ยวข้องกับคำถามนี้: เพิ่มรหัสโดยพลการในตัวสร้างแบบจำลอง Arcgis?

ตัวแปรหลายค่าเป็นเพียงสตริงอัฒภาคคั่นของค่าดังนั้นสิ่งที่มีmultivaluesToCsvฟังก์ชั่นด้านล่างจะเป็นแยกที่มีหลายตัวแปรเข้ามาในรายการและย้ายพวกเขาเข้าไปในแถวที่เขียนไปแล้วCSV (ค่าคั่นด้วยเครื่องหมายจุลภาค)ไฟล์ข้อความ

ตัววนซ้ำโมเดลเรียกใช้กระบวนการทั้งหมดในรูปแบบหนึ่งครั้งต่อการวนซ้ำ - นี่เป็นสิ่งที่ไม่พึงประสงค์สำหรับเครื่องมือคำนวณมูลค่าซึ่งเราต้องการเรียกใช้ครั้งเดียวในตอนท้าย วิธีที่คุณทำสิ่งนี้ให้สำเร็จคือการสร้างโมเดลภายนอกเพื่อห่อโมเดลต้นแบบด้านใน นี้จะกล่าวถึงในหัวข้อความช่วยเหลือการบูรณาการรูปแบบภายในรูปแบบ

ดังนั้นนี่คือสิ่งที่คุณต้องทำเพื่อให้การทำงานนี้:

Inner Model - ทำซ้ำคลาสคุณลักษณะประมวลผลรวบรวมค่า:

  1. ในโมเดลดั้งเดิมของคุณซึ่งจะเป็นโมเดล "Inner" ของเราให้เพิ่มเครื่องมือ Collect Values ​​อีกอันเพื่อรวบรวมNameค่าของตัวแปรเพื่อให้เราสามารถแมปค่าสถิติระยะทางกับชื่อคลาสคุณลักษณะที่สอดคล้องกัน
  2. เปิดเผยตัวแปรอินพุตและเอาต์พุตเป็นพารามิเตอร์โมเดล (คลิกขวาที่วงรีและตรวจสอบพารามิเตอร์โมเดล) ทำสิ่งนี้สำหรับแต่ละเอาต์พุตของเครื่องมือ Collect Value รวมถึงพารามิเตอร์อินพุตใด ๆ ที่คุณต้องการเช่น Input Workspace
  3. บันทึกและปิดโมเดลด้านใน

โมเดลด้านนอก - รันโมเดลด้านในรันเครื่องมือคำนวณค่าเพียงครั้งเดียวเมื่อโมเดลภายในเสร็จสิ้น:

  1. สร้างโมเดลใหม่ - นี่จะเป็นโมเดล "outer" ของเรา
  2. เพิ่มตัวแปรประเภทFolderเพื่อให้คุณระบุตำแหน่งที่จะสร้างไฟล์ CSV เอาต์พุต
  3. เพิ่มตัวแปรประเภทStringเพื่อให้คุณสามารถระบุชื่อของไฟล์ CSV เอาต์พุต
  4. เพิ่มโมเดลด้านในเข้ากับโมเดลใหม่ (ลากและวางจาก ArcToolbox หรือคลิกขวาและเพิ่มข้อมูลหรือเครื่องมือเรียกดูโมเดลด้านในแล้วคลิกเพิ่ม)
  5. สร้างตัวแปรสำหรับพารามิเตอร์ใด ๆ ของโมเดลภายในที่คุณต้องการตั้งค่าจากโมเดลภายนอกเช่น Input Workspace (คลิกขวาที่โมเดลภายในและเลือก Make Variable-From Parameter)
  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%"เป็นสำคัญ: นี้บ่งชี้ว่านี่เป็นสตริงดิบ ; เนื่องจากเส้นทางของระบบไฟล์ Windows มักจะมีเครื่องหมายแบ็กสแลช ( อักขระเลี่ยงใน Python) เราต้องใช้วิธีนี้เพื่อป้องกัน Python ไม่ให้ตีความผิดแบ็กสแลชและอักขระที่ตามมาเป็นลำดับอักขระพิเศษ
    • ตรวจสอบให้แน่ใจว่าใส่เครื่องหมายคำพูดล้อมรอบตัวแปรในบรรทัดเนื่องจากไม่มีไพ ธ อนคิดว่าพวกเขาเป็นตัวระบุแทนที่จะเป็นสตริง

    บล็อครหัส:

    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 และทำให้มันใช้งานได้ (ดูภาพหน้าจอ)

รูปแบบภายใน : Inner Model

รุ่นภายนอก: โมเดลภายนอก

โมเดลภายในเรียกใช้กระบวนการทั้งหมดหนึ่งครั้งต่อคลาสคุณลักษณะจากนั้นเครื่องมือคำนวณค่าจะรันหนึ่งครั้งที่ส่วนท้ายเพื่อส่งออกไฟล์ CSV ครั้งเดียวและครั้งเดียว


สวัสดีขอขอบคุณที่ใช้ความพยายามอย่างมากในการตอบและขอโทษสำหรับการตอบกลับของฉัน ฉันพยายามเรียกใช้โมเดลตามที่คุณอธิบาย แต่ฉันมีปัญหากับ CSV ฉันสร้างไฟล์ CSV เปล่าใน Excel แล้วบันทึกจากนั้นโหลดลงในโมเดล ข้อผิดพลาด 000539: ข้อผิดพลาดในการรันนิพจน์: multivaluesToCsv (r "% CSV ไฟล์%", "% ชื่อค่า FC%", "% ค่าขั้นต่ำ%", "% ค่าเฉลี่ยขั้นต่ำ%", "% ค่าสูงสุด%%") <ข้อยกเว้น 'ชนิด .IOError '>: [Errno 13] ปฏิเสธการอนุญาต: u'% CSV ไฟล์% 'ล้มเหลวในการดำเนินการ (คำนวณค่า) ฉันได้รับข้อผิดพลาดนี้ต่อไป CSV ของฉันเรียกว่า CSVFile.csv
JPD

1
เพียงแก้ไขมัน - นี่เป็นโซลูชั่นที่สมบูรณ์แบบ ขอบคุณมากสำหรับความช่วยเหลือของคุณ!
JPD

รหัส Python จะสร้างไฟล์ CSV ให้คุณโดยไม่จำเป็นต้องสร้างมันขึ้นมาก่อน อย่างที่คุณเห็นถ้าคุณเปิดไฟล์ใน Excel มันจะล็อคไฟล์และ Python ไม่สามารถเขียนได้จนกว่าคุณจะปิดมัน
blah238

2
FYI ฉันได้อัปเดตคำแนะนำและภาพหน้าจอเพื่อใช้แบบจำลองที่ซ้อนกันเพื่อหลีกเลี่ยงการคำนวณค่าที่ใช้งานหลายครั้งรวมทั้งแก้ไขปัญหาที่ไฟล์ข้อความต้องมีอยู่ก่อน (ตอนนี้คุณระบุตำแหน่งเอาต์พุตและชื่อไฟล์เป็นพารามิเตอร์แยกสองตัว)
blah238

คำตอบที่ยอดเยี่ยม! ช่วยฉันแก้ปัญหาที่คล้ายกันในการแสดงผลสถิติการตรวจสอบความถูกต้องของเลเยอร์ Geostatistical ไปยังไฟล์ csv ขอบคุณ @ blah238!
Cotton.Rockwood

1

ผลลัพธ์ที่โมเดลของคุณอธิบายนั้นเป็นเพียงค่าที่อัปเดตในตารางแอตทริบิวต์ใช่หรือไม่ คุณไม่สามารถเปิดไฟล์. dbf ที่เกี่ยวข้องกับ Shapefile ที่อัปเดตได้หรือไม่

ความล้มเหลวนี้การเลือกตาราง (เครื่องมือวิเคราะห์> แยกข้อมูล) ควรทำงานกับแบบสอบถาม SQL


สวัสดีขอขอบคุณสำหรับคำตอบของคุณ ฉันเกรงว่าจะไม่อัปเดตไฟล์. dbf ของแต่ละไฟล์รูปร่าง การเพิ่ม 'เลือกตาราง' ในตัวสร้างแบบจำลองไม่ทำงานเนื่องจากฉันไม่สามารถเชื่อมต่อ 'ระยะห่างต่ำสุด / เฉลี่ย / สูงสุด' หรือ 'ค่าเอาต์พุต' เป็นอินพุตสำหรับเครื่องมือ
JPD
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.