คุณสามารถทำได้โดยใช้เครื่องมือคำนวณมูลค่า (การจัดการข้อมูล)และเวทมนตร์ Python ดูเพิ่มเติมที่เกี่ยวข้องกับคำถามนี้: เพิ่มรหัสโดยพลการในตัวสร้างแบบจำลอง Arcgis?
ตัวแปรหลายค่าเป็นเพียงสตริงอัฒภาคคั่นของค่าดังนั้นสิ่งที่มีmultivaluesToCsv
ฟังก์ชั่นด้านล่างจะเป็นแยกที่มีหลายตัวแปรเข้ามาในรายการและย้ายพวกเขาเข้าไปในแถวที่เขียนไปแล้วCSV (ค่าคั่นด้วยเครื่องหมายจุลภาค)ไฟล์ข้อความ
ตัววนซ้ำโมเดลเรียกใช้กระบวนการทั้งหมดในรูปแบบหนึ่งครั้งต่อการวนซ้ำ - นี่เป็นสิ่งที่ไม่พึงประสงค์สำหรับเครื่องมือคำนวณมูลค่าซึ่งเราต้องการเรียกใช้ครั้งเดียวในตอนท้าย วิธีที่คุณทำสิ่งนี้ให้สำเร็จคือการสร้างโมเดลภายนอกเพื่อห่อโมเดลต้นแบบด้านใน นี้จะกล่าวถึงในหัวข้อความช่วยเหลือการบูรณาการรูปแบบภายในรูปแบบ
ดังนั้นนี่คือสิ่งที่คุณต้องทำเพื่อให้การทำงานนี้:
Inner Model - ทำซ้ำคลาสคุณลักษณะประมวลผลรวบรวมค่า:
- ในโมเดลดั้งเดิมของคุณซึ่งจะเป็นโมเดล "Inner" ของเราให้เพิ่มเครื่องมือ Collect Values อีกอันเพื่อรวบรวม
Name
ค่าของตัวแปรเพื่อให้เราสามารถแมปค่าสถิติระยะทางกับชื่อคลาสคุณลักษณะที่สอดคล้องกัน
- เปิดเผยตัวแปรอินพุตและเอาต์พุตเป็นพารามิเตอร์โมเดล (คลิกขวาที่วงรีและตรวจสอบพารามิเตอร์โมเดล) ทำสิ่งนี้สำหรับแต่ละเอาต์พุตของเครื่องมือ Collect Value รวมถึงพารามิเตอร์อินพุตใด ๆ ที่คุณต้องการเช่น Input Workspace
- บันทึกและปิดโมเดลด้านใน
โมเดลด้านนอก - รันโมเดลด้านในรันเครื่องมือคำนวณค่าเพียงครั้งเดียวเมื่อโมเดลภายในเสร็จสิ้น:
- สร้างโมเดลใหม่ - นี่จะเป็นโมเดล "outer" ของเรา
- เพิ่มตัวแปรประเภท
Folder
เพื่อให้คุณระบุตำแหน่งที่จะสร้างไฟล์ CSV เอาต์พุต
- เพิ่มตัวแปรประเภท
String
เพื่อให้คุณสามารถระบุชื่อของไฟล์ CSV เอาต์พุต
- เพิ่มโมเดลด้านในเข้ากับโมเดลใหม่ (ลากและวางจาก ArcToolbox หรือคลิกขวาและเพิ่มข้อมูลหรือเครื่องมือเรียกดูโมเดลด้านในแล้วคลิกเพิ่ม)
- สร้างตัวแปรสำหรับพารามิเตอร์ใด ๆ ของโมเดลภายในที่คุณต้องการตั้งค่าจากโมเดลภายนอกเช่น Input Workspace (คลิกขวาที่โมเดลภายในและเลือก Make Variable-From Parameter)
- เพิ่มเครื่องมือคำนวณมูลค่าให้กับโมเดลใหม่
วางสิ่งต่อไปนี้ลงในกล่องที่เหมาะสมของเครื่องมือคำนวณค่า:
การแสดงออก :
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
(ไม่บังคับ) เปิดเผยตัวแปรอินพุตและเอาต์พุตเป็นพารามิเตอร์โมเดลหากคุณต้องการรันจากไดอะล็อกเครื่องมือของโมเดลหรือโยงกับโมเดล / สคริปต์อื่น ๆ เอาต์พุตเพียงอย่างเดียวของโมเดลตัวนอกคือไฟล์ CSV
- (ไม่บังคับ) เชื่อมต่อตัวแปรอินพุทและเอาท์พุทโมเดลด้านในเข้ากับเครื่องมือคำนวณมูลค่าเป็นเงื่อนไขเบื้องต้น ฉันไม่คิดว่านี่จะมีผลกระทบใด ๆ จริง ๆ มันแค่ทำให้ชัดเจนมากขึ้นเกี่ยวกับสิ่งที่เกิดขึ้น
ฉันได้ทดสอบสิ่งนี้กับ ModelBuilder และทำให้มันใช้งานได้ (ดูภาพหน้าจอ)
รูปแบบภายใน :
รุ่นภายนอก:
โมเดลภายในเรียกใช้กระบวนการทั้งหมดหนึ่งครั้งต่อคลาสคุณลักษณะจากนั้นเครื่องมือคำนวณค่าจะรันหนึ่งครั้งที่ส่วนท้ายเพื่อส่งออกไฟล์ CSV ครั้งเดียวและครั้งเดียว