Bunu, Hesaplama Değeri (Veri Yönetimi) aracını ve bazı Python sihirini kullanarak yapabilirsiniz. Bu ilgili soruya da bakın: Arcgis model oluşturucuya rastgele kod eklensin mi?
Çok değerli bir değişken yalnızca noktalı virgülle sınırlanmış bir değer dizesidir, bu nedenle multivaluesToCsv
aşağıdaki işlev, çok değerli değişkenleri listelere böler ve bunları daha sonra bir CSV (virgülle ayrılmış değer) metin dosyasına yazılan satırlara dönüştürür .
Model yineleyiciler , modeldeki TÜM süreçleri bir yineleme başına bir kez çalıştırır - bu, sonunda bir kez çalıştırmak istediğimiz Değeri Hesapla aracımız için istenmeyen bir durumdur. Bunu başarmanın yolu, orijinal iç modeli sarmak için başka bir dış model oluşturmaktır. Bu, bir modeli model içine entegre etme yardım başlığı altında ele alınmıştır .
İşte bu işi yapmak için yapmanız gerekenler:
İç Model - Unsur sınıflarını yineler, işler, değerleri toplar:
- "İç" modelimiz olacak orijinal modelinizde,
Name
mesafe istatistik değerlerini karşılık gelen özellik sınıfı adlarıyla eşleştirebilmemiz için değişkenin değerlerini toplamak üzere başka bir Değerleri Topla aracını ekleyin .
- Giriş ve çıkış değişkenlerini model parametreleri olarak ortaya çıkarın (bir ovali sağ tıklayın ve Model Parametresini kontrol edin). Bunu, Değer Çalışma araçlarının her bir çıktısının yanı sıra Giriş Çalışma Alanı gibi ihtiyacınız olan giriş parametreleri için yapın.
- İç modeli kaydedin ve kapatın.
Dış Model - İç modeli çalıştırır, iç model tamamlandığında Değer Hesaplama aracını yalnızca bir kez çalıştırır:
- Yeni bir model oluşturun - bu bizim "dış" modelimiz olacaktır.
- Çıktı CSV dosyasının nerede oluşturulacağını
Folder
belirtmenize izin vermek için bir tür değişkeni ekleyin .
- Çıktı CSV dosyasının adını
String
belirtmenize izin vermek için bir tür değişkeni ekleyin .
- İç Modeli yeni modele ekleyin (ArcToolbox'tan sürükleyip bırakın veya sağ tıklayıp Veri veya Araç Ekle'ye tıklayın, iç modele göz atın ve Ekle'ye tıklayın)
- Girdi Çalışma Alanı gibi dış modelden ayarlamak istediğiniz iç modelin herhangi bir parametresi için değişkenler oluşturun (iç modeli sağ tıklatın ve Değişken-Parametre Yap'ı seçin).
- Değeri Hesapla aracını yeni modele ekleme
Aşağıdakileri Değer Hesapla aracının ilgili kutularına yapıştırın:
İfade :
multivaluesToCsv(r"%Output CSV File Location%", "%Output CSV File Name%", "%Feature Class Names%", "%Minimum Distance Values%", "%Average Distance Values%", "%Maximum Distance Values%")
- Bu , model değişkenlerini işleve iletmek için satır içi değişken ikamesi kullanır . Model değişken adlarınızla eşleşecek şekilde ayarlayın.
r
Önce "%Output CSV File Location%"
anlamlıdır: bu bir olduğunu gösterir ham dize ; Windows dosya sistemi yolları genellikle ters eğik çizgiler ( Python'da bir kaçış karakteri ) içerdiğinden , Python'un ters eğik çizgileri ve sonraki karakterleri özel karakter dizileri olarak yanlış yorumlamasını önlemek için bunu kullanmalıyız.
- Satır içi değişkenlerin etrafına tırnak işareti koyduğunuzdan emin olun çünkü bunlar olmadan Python, dizeler yerine tanımlayıcı olduklarını düşünür.
Kod Bloğu:
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
(İsteğe bağlı) Modelin araç iletişim kutusundan çalıştırabilmek veya diğer modellerle / komut dosyalarıyla birlikte zincirlemek istiyorsanız giriş ve çıkış değişkenlerini model parametreleri olarak gösterin. Dış modelin tek çıktısı CSV dosyasıdır.
- (İsteğe bağlı) Giriş değişkenlerini ve iç model çıkışlarını Ön Değer olarak Değeri Hesapla aracına bağlayın. Bunun aslında herhangi bir etkisi olduğunu düşünmüyorum, sadece neler olup bittiğini görsel olarak daha net hale getiriyor.
Bunu ModelBuilder ile test ettim ve çalışmasını sağladım (ekran görüntülerine bakın).
İç Model :
Dış Modeli:
İç model tüm işlemlerini özellik sınıfı başına bir kez çalıştırır ve daha sonra CSV dosyasını bir kez ve yalnızca bir kez çıkarmak için Değeri Hesapla aracı sonunda bir kez çalışır.