Możesz to zrobić za pomocą narzędzia Calculate Value (Data Management) i niektórych magii Python. Zobacz także podobne pytanie: Dodać dowolny kod do konstruktora modeli Arcgis?
Zmienna wielowartościowym jest po prostu ciągiem średnik rozdzielany wartości, więc to, co multivaluesToCsv
poniżej funkcja nie jest podzielony zmiennych wielowartościowych na listy i ich transpozycji do wierszy, które są następnie zapisywane do pliku CSV (wartości oddzielonych przecinkami) pliku tekstowego.
Iteratory modeli uruchamiają WSZYSTKIE procesy w modelu raz na iterację - jest to niepożądane w przypadku naszego narzędzia Oblicz wartość, które chcemy uruchomić tylko raz na końcu. Sposób, w jaki to osiągasz, polega na utworzeniu innego, zewnętrznego modelu w celu owinięcia oryginalnego modelu wewnętrznego. Jest to omówione w temacie pomocy Integrowanie modelu w modelu .
Oto, co musisz zrobić, aby to działało:
Model wewnętrzny - Iteruje klasy elementów, przetwarza je, zbiera wartości:
- W swoim oryginalnym modelu, który będzie naszym „wewnętrznym” modelem, dodaj kolejne narzędzie Zbieraj wartości, aby zebrać wartości
Name
zmiennej, abyśmy mogli zmapować wartości statystyki odległości na odpowiadające im nazwy klas obiektów.
- Odsłoń zmienne wejściowe i wyjściowe jako parametry modelu (kliknij owal prawym przyciskiem myszy i sprawdź parametr modelu). Zrób to dla każdego z wyników narzędzi Zbieraj wartość, a także dla wszystkich potrzebnych parametrów wejściowych, takich jak Obszar roboczy wprowadzania.
- Zapisz i zamknij model wewnętrzny.
Model zewnętrzny - uruchamia model wewnętrzny, uruchamia narzędzie Oblicz wartość tylko raz, gdy model wewnętrzny zostanie ukończony:
- Utwórz nowy model - będzie to nasz „zewnętrzny” model.
- Dodaj zmienną typu,
Folder
aby umożliwić określenie miejsca utworzenia wyjściowego pliku CSV.
- Dodaj zmienną typu,
String
aby umożliwić określenie nazwy wyjściowego pliku CSV.
- Dodaj model wewnętrzny do nowego modelu (przeciągnij i upuść z ArcToolbox lub kliknij prawym przyciskiem myszy i Dodaj dane lub narzędzie, przejdź do modelu wewnętrznego i kliknij Dodaj)
- Utwórz zmienne dla dowolnych parametrów modelu wewnętrznego, które chcesz ustawić z modelu zewnętrznego, takich jak wejściowy obszar roboczy (kliknij model wewnętrzny prawym przyciskiem myszy i wybierz polecenie Utwórz zmienną z parametru).
- Dodaj narzędzie Oblicz wartość do nowego modelu
Wklej następujące elementy w odpowiednie pola narzędzia Oblicz wartość:
Wyrażenie :
multivaluesToCsv(r"%Output CSV File Location%", "%Output CSV File Name%", "%Feature Class Names%", "%Minimum Distance Values%", "%Average Distance Values%", "%Maximum Distance Values%")
- Wykorzystuje to podstawianie zmiennych w linii, aby przekazać zmienne modelu do funkcji. Dostosuj, aby dopasować nazwy zmiennych modelu.
r
Zanim "%Output CSV File Location%"
jest znacząca: oznacza to, że jest to surowy ciąg ; ponieważ ścieżki systemu plików Windows zwykle zawierają ukośniki odwrotne ( znak zmiany znaczenia w Pythonie), musimy tego użyć, aby zapobiec błędnej interpretacji ukośników i kolejnych znaków jako specjalnych sekwencji znaków przez Python.
- Pamiętaj, aby wstawiać cudzysłowy wokół zmiennych wbudowanych, ponieważ bez nich Python pomyśli, że są to identyfikatory zamiast ciągów.
Blok kodu:
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
(Opcjonalnie) Ujawnij zmienne wejściowe i wyjściowe jako parametry modelu, jeśli chcesz je uruchomić z okna dialogowego narzędzia modelu lub połączyć je z innymi modelami / skryptami. Jedynym wyjściem modelu zewnętrznego jest plik CSV.
- (Opcjonalnie) Połącz zmienne wejściowe i dane wyjściowe modelu wewnętrznego z narzędziem Oblicz wartość jako warunki wstępne. Nie sądzę, żeby to faktycznie miało jakikolwiek efekt, po prostu wyjaśnia wizualnie, co się dzieje.
Przetestowałem to z ModelBuilder i sprawiłem, że działa (patrz zrzuty ekranu).
Model wewnętrzny :
Model zewnętrzny:
Model wewnętrzny uruchamia wszystkie procesy raz na klasę elementów, a następnie narzędzie Oblicz wartość uruchamia się na końcu, aby wyprowadzić plik CSV tylko raz.