Bạn có thể làm điều này bằng cách sử dụng công cụ Tính giá trị (Quản lý dữ liệu) và một số phép thuật Python. Xem thêm câu hỏi liên quan này: Thêm mã tùy ý vào trình xây dựng mô hình Arcgis?
Một biến multivalue chỉ là một chuỗi dấu chấm phẩy phân định các giá trị, vì vậy những gì các multivaluesToCsv
chức năng dưới đây làm là chia các biến multivalue vào danh sách và transpose chúng thành hàng sau đó được ghi vào một CSV (giá trị bằng dấu phẩy) tập tin văn bản.
Trình lặp mô hình chạy TẤT CẢ các quy trình trong mô hình một lần mỗi lần lặp - điều này là không mong muốn đối với công cụ Tính giá trị của chúng tôi, mà chúng tôi chỉ muốn chạy một lần vào cuối. Cách bạn thực hiện điều này là bằng cách tạo một mô hình bên ngoài khác để bọc mô hình bên trong ban đầu. Điều này được thảo luận trong chủ đề trợ giúp Tích hợp một mô hình trong một mô hình .
Vì vậy, đây là những gì bạn cần làm để làm việc này:
Mô hình bên trong - Lặp lại các lớp tính năng, xử lý chúng, thu thập các giá trị:
- Trong mô hình ban đầu của bạn, sẽ là mô hình "bên trong" của chúng tôi, hãy thêm một công cụ Thu thập giá trị khác để thu thập các
Name
giá trị của biến để chúng tôi có thể ánh xạ các giá trị thống kê khoảng cách đến các tên lớp tính năng tương ứng của chúng.
- Đặt các biến đầu vào và đầu ra dưới dạng tham số mô hình (nhấp chuột phải vào hình bầu dục và kiểm tra Tham số mô hình). Làm điều này cho từng đầu ra của các công cụ Thu thập giá trị cũng như bất kỳ tham số đầu vào nào bạn cần, chẳng hạn như Không gian làm việc đầu vào.
- Lưu và đóng mô hình bên trong.
Mô hình bên ngoài - Chạy mô hình bên trong, chạy công cụ Tính toán giá trị chỉ một lần khi mô hình bên trong hoàn thành:
- Tạo một mô hình mới - đây sẽ là mô hình "bên ngoài" của chúng tôi.
- Thêm một biến loại
Folder
để cho phép bạn chỉ định nơi tạo tệp CSV đầu ra.
- Thêm một biến loại
String
để cho phép bạn chỉ định tên của tệp CSV đầu ra.
- Thêm Mô hình bên trong vào mô hình mới (kéo và thả từ ArcToolbox hoặc nhấp chuột phải và Thêm dữ liệu hoặc Công cụ, duyệt đến mô hình bên trong và nhấp vào Thêm)
- Tạo các biến cho bất kỳ tham số nào của mô hình bên trong mà bạn muốn có thể đặt từ mô hình bên ngoài, chẳng hạn như Không gian làm việc đầu vào (bấm chuột phải vào mô hình bên trong và chọn Tạo tham số biến từ tham số).
- Thêm công cụ Tính giá trị cho mô hình mới
Dán phần sau vào các hộp thích hợp của công cụ Tính giá trị:
Biểu hiện :
multivaluesToCsv(r"%Output CSV File Location%", "%Output CSV File Name%", "%Feature Class Names%", "%Minimum Distance Values%", "%Average Distance Values%", "%Maximum Distance Values%")
- Điều này sử dụng thay thế biến trong dòng để truyền các biến mô hình vào hàm. Điều chỉnh để phù hợp với tên biến mô hình của bạn.
- Cái
r
trước "%Output CSV File Location%"
rất có ý nghĩa: điều này chỉ ra rằng đây là một chuỗi thô ; bởi vì các đường dẫn hệ thống tệp Windows thường chứa dấu gạch chéo ngược ( ký tự thoát trong Python), chúng ta phải sử dụng điều này để ngăn Python hiểu sai các dấu gạch chéo ngược và các ký tự tiếp theo thành chuỗi ký tự đặc biệt.
- Hãy chắc chắn đặt dấu ngoặc kép quanh các biến trong dòng bởi vì không có chúng, Python sẽ nghĩ chúng là các định danh thay vì chuỗi.
Khối mã:
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
(Tùy chọn) Đặt các biến đầu vào và đầu ra dưới dạng tham số mô hình nếu bạn muốn có thể chạy chúng từ hộp thoại công cụ của mô hình hoặc xâu chuỗi nó với các mô hình / tập lệnh khác. Đầu ra duy nhất của mô hình bên ngoài là tệp CSV.
- (Tùy chọn) Kết nối các biến đầu vào và đầu ra mô hình bên trong với công cụ Tính giá trị làm điều kiện tiên quyết. Tôi không nghĩ rằng điều này thực sự có bất kỳ ảnh hưởng nào, nó chỉ làm cho nó rõ ràng hơn về những gì đang diễn ra.
Tôi đã thử nghiệm điều này với ModelBuilder và làm cho nó hoạt động (xem ảnh chụp màn hình).
Mô hình bên trong :
Mô hình bên ngoài:
Mô hình bên trong chạy tất cả các quy trình của nó một lần cho mỗi lớp tính năng và sau đó công cụ Tính giá trị chạy một lần ở cuối để xuất tệp CSV một lần và chỉ một lần.