Anda dapat melakukan ini menggunakan alat Hitung Nilai (Manajemen Data) dan beberapa sihir Python. Lihat juga pertanyaan terkait ini: Tambahkan kode arbitrer ke pembuat model Arcgis?
Sebuah variabel multivalue hanya string koma-delimited nilai-nilai, jadi apa yang multivaluesToCsv
fungsi di bawah ini dilakukan adalah membagi variabel multivalue ke dalam daftar dan transpos mereka ke dalam baris yang kemudian ditulis ke CSV (comma-terpisah nilai) file teks.
Model iterator menjalankan SEMUA proses dalam model sekali per iterasi - ini tidak diinginkan untuk alat Nilai Hitung kami, yang kami hanya ingin menjalankan sekali di akhir. Cara Anda mencapainya adalah dengan menciptakan model luar lain untuk membungkus model dalam asli. Ini dibahas dalam topik bantuan Mengintegrasikan model dalam model .
Jadi, inilah yang perlu Anda lakukan agar ini berfungsi:
Inner Model - Iterate kelas fitur, proses, dan kumpulkan nilai:
- Dalam model asli Anda, yang akan menjadi model "dalam" kami, tambahkan alat Kumpulkan Nilai lain untuk mengumpulkan nilai
Name
-nilai variabel sehingga kami dapat memetakan nilai statistik jarak ke nama kelas fitur yang sesuai.
- Paparkan variabel input dan output sebagai parameter model (klik kanan oval dan periksa Parameter Model). Lakukan ini untuk setiap output dari alat Kumpulkan Nilai serta parameter input apa pun yang Anda perlukan seperti Input Workspace.
- Simpan dan tutup model bagian dalam.
Model Luar - Menjalankan model dalam, menjalankan alat Hitung Nilai hanya sekali ketika model dalam selesai:
- Buat model baru - ini akan menjadi model "luar" kami.
- Tambahkan variabel tipe
Folder
untuk memungkinkan Anda menentukan di mana membuat file CSV output.
- Tambahkan variabel tipe
String
untuk memungkinkan Anda menentukan nama file CSV output.
- Tambahkan Inner Model ke model baru (seret dan lepas dari ArcToolbox atau klik kanan dan Tambah Data atau Alat, telusuri model bagian dalam dan klik Tambah)
- Buat variabel untuk setiap parameter model dalam yang Anda ingin dapat atur dari model luar, seperti Input Workspace (klik kanan model bagian dalam dan pilih Make Variable-From Parameter).
- Tambahkan alat Hitung Nilai ke model baru
Rekatkan yang berikut ini ke kotak yang sesuai pada alat Calculate Value:
Ekspresi :
multivaluesToCsv(r"%Output CSV File Location%", "%Output CSV File Name%", "%Feature Class Names%", "%Minimum Distance Values%", "%Average Distance Values%", "%Maximum Distance Values%")
- Ini menggunakan substitusi variabel in-line untuk meneruskan variabel model ke dalam fungsi. Sesuaikan agar sesuai dengan nama variabel model Anda.
- The
r
sebelum "%Output CSV File Location%"
signifikan: ini menunjukkan bahwa ini adalah string mentah ; karena jalur sistem file Windows biasanya berisi backslash ( karakter pelarian dengan Python), kita harus menggunakan ini untuk mencegah Python dari salah mengartikan backslash dan karakter berikutnya sebagai urutan karakter khusus.
- Pastikan untuk menempatkan tanda kutip di sekitar variabel in-line karena tanpa mereka Python akan berpikir mereka adalah pengidentifikasi, bukan string.
Blok Kode:
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
(Opsional) Ekspos variabel input dan output sebagai parameter model jika Anda ingin dapat menjalankannya dari dialog alat model atau rantai bersama dengan model / skrip lain. Output tunggal dari model luar adalah file CSV.
- (Opsional) Hubungkan variabel input dan output model dalam ke alat Calculate Value sebagai prasyarat. Saya tidak berpikir ini sebenarnya memiliki efek apa pun, hanya membuatnya lebih jelas secara visual tentang apa yang terjadi.
Saya telah menguji ini dengan ModelBuilder dan membuatnya berfungsi (lihat screenshot).
Model batin :
Model Luar:
Model dalam menjalankan semua prosesnya sekali per kelas fitur, dan kemudian alat Hitung Nilai berjalan sekali di akhir untuk menghasilkan file CSV sekali dan hanya sekali.