Iterowanie nazw plików wyjściowych klasy obiektów za pomocą ModelBuilder?

11

Próbuję iterować serię klas elementów (wielokątów) w programie do tworzenia modeli, aby przekonwertować serię wielokątów na rastry, jednak mam problem z nazwami plików wyjściowych.

Po wstawieniu narzędzia „iteruj klasę obiektów” do okna konstruktora modeli i połączeniu mojego gdb przechowującego wszystkie wielokąty jako dane wejściowe, funkcja wyjściowa (zielony bąbelek) automatycznie staje się nazwą mojego pierwszego wielokąta. W rezultacie model, który próbuję uruchomić, wydaje się powracać do tego nazwanego wielokąta, a nie przechodzić do następnego wielokąta na liście. Rastry wyjściowe są tworzone, ale zastępują tę nazwę pliku zamiast generować nowy raster nową nazwą, która pasuje do kolejnych wielokątów.

Co ja robię źle?

macdonaw
źródło

Odpowiedzi:

10

Oto model, w którym zastosowano wbudowane podstawienie zgodnie z opisem Aarona. Zauważ, że wyjście narzędzia Wielokąt do rastra to .. \ fGBD_Scratch.gdb \ ras_ % Wartość% . Wartość pochodzi z iteratora, który w tym przypadku został ustawiony na FID, aby rozdawać unikalne wiersze. Tak więc pierwszym zestawem danych rastrowych byłby ras_1, a następnie ras_2 itd.

Model

Hornbydd
źródło
Czy dodajesz po prostu „%” po obu stronach nazwy wstawionej do wyjścia? na przykład% name% _clip?
macdonaw
Tak, więc w twoim przykładzie „nazwa” to zmienna w twoim modelu, zwykle coś z iteratora.
Hornbydd
1
Tak, ale twoje imię nie powinno zaczynać się od znaku% ... użyj go w odwrotnej kolejności, tj. Clip_% Nazwa%
maycca
10

Istnieje kilka sposobów radzenia sobie z nazywaniem w programie do tworzenia modeli. ArcGIS posiada sekcję pomocy na ten temat: Krótka prezentacja użycia wbudowanego podstawiania zmiennych .

Jednym zręcznym sposobem szybkiego tworzenia unikalnych nazw z iteratora jest wywołanie zmiennych systemowych %i%lub %n%, które generują pliki w następującej postaci: plik1, plik2, plik3, plik4 ... %i%Zmienna systemowa odwołuje się do bieżącej pozycji listy, podczas gdy %n%zmienna systemowa odwołuje się do bieżącej iteracji modelu. Zastosowałbyś to w praktyce w parametrze wyjściowym używanego narzędzia. Na przykład:

Wyjściowa klasa cech

C:\temp\out%i%.shp
Aaron
źródło
1

Wygląda na to, że chcesz wykonać kilka zagnieżdżonych pętli, jedną dla klas elementów w obszarze roboczym i jedną dla elementów w każdej klasie elementów. Jest to bolesne (ale możliwe ) w przypadku ModelBuilder.

Jeśli chcesz ubrudzić sobie ręce przy użyciu Pythona (który zdecydowanie polecam do takich rzeczy), oto przykład na początek:

import arcpy, os

# Your source file geodatabase
input_workspace = r"c:\GISData\input.gdb"

# Your output raster folder
output_workspace = r"c:\GISData\rasters"

# The file extension for the output rasters -- when not saving to a geodatabase, specify .tif for a TIFF file format, .img for an ERDAS IMAGINE file format, or no extension for a GRID raster format.
output_ext = ".img"

# The field used to assign values to the output raster -- hopefully this is the same for all of your feature classes
value_field = "VALUE"

# Note: Instead of hardcoding the above values, you could also use arcpy.GetParameterAsText to allow the user to specify them via script tool parameters

# Set current workspace to the source file geodatabase
arcpy.env.workspace = input_workspace

# Loop over the feature classes
for fc in arcpy.ListFeatureClasses():

  # Get the name of the ObjectID field so we can use it to name the output rasters
  oid_field = arcpy.Describe(fc).OIDFieldName

  # Loop over the features in the current feature class
  for row in arcpy.SearchCursor(fc):

    # Figure out what to name the output raster. In this case we should get something like "c:\GISData\rasters\myFeatureClass_1.img"
    out_raster = os.path.join(output_workspace, "{0}_{1}{2}".format(os.path.basename(fc), row.getValue(oid_field), output_ext))

    # Convert to raster
    arcpy.PolygonToRaster_conversion(row, value_field, out_raster)

Nie przetestowano, ale mam nadzieję, że masz pomysł. IMO, skrypty Pythona są znacznie łatwiejsze w obsłudze niż modele ModelBuilder do wszystkich zadań, z wyjątkiem najbardziej trywialnych.

W przypadku zasobów edukacyjnych Python / ArcPy nie szukaj dalej niż to pytanie: Jakie są zasoby do nauki ArcPy?

blah238
źródło
Zagnieżdżone pętle w narzędziu do tworzenia modeli to nieszczęście. Unikaj, jeśli to możliwe.
Mox