ModelBuilder를 사용하여 기능 클래스 출력 파일 이름을 반복 하시겠습니까?


11

모델 빌더에서 일련의 피쳐 클래스 (다각형)를 반복하여 일련의 다각형을 래스터로 변환하려고하지만 출력 파일 이름에 문제가 있습니다.

"iterate feature class"도구를 모델 빌더 창에 삽입하고 모든 다각형을 입력으로 저장하는 gdb를 링크하면 출력 피쳐 (녹색 버블)가 자동으로 첫 번째 다각형의 이름이됩니다. 결과적으로 실행하려고하는 모델은 목록의 다음 다각형으로 이동하지 않고 명명 된 다각형으로 반복되는 것처럼 보입니다. 출력 래스터가 만들어 지지만 후속 다각형과 일치하는 새 이름으로 새 래스터를 생성하는 대신 해당 파일 이름을 덮어 씁니다.

내가 도대체 ​​뭘 잘못하고있는 겁니까?

답변:


10

다음은 Aaron이 설명한대로 인라인 대체를 사용하는 모델입니다. 다각형 대 래스터 도구의 출력은 .. \ fGBD_Scratch.gdb \ ras_ % Value % 입니다. 이 경우 고유 한 행을 전달하기 위해 FID로 설정된 반복자에서 값이 제공됩니다. 따라서 첫 번째 래스터 데이터 세트는 ras_1, ras_2 등입니다.

모델


출력에 삽입 된 이름의 양쪽에 단순히 "%"를 추가합니까? 예를 들어 % name % _clip?
macdonaw

예, 예에서 'name'은 모델의 변수, 일반적으로 반복자의 변수입니다.
Hornbydd

1
예, 그러나 귀하의 이름은 % 기호로 시작해서는 안됩니다. 반대 순서로 사용하십시오. 즉 clip_ % Name %
maycca

10

모델 빌더에서 이름 지정을 처리하는 방법에는 여러 가지가 있습니다. ArcGIS에는 다음에 대한 도움말 섹션이 있습니다. 인라인 변수 대체 사용에 대한 빠른 둘러보기 .

반복자에서 고유 한 이름을 신속하게 작성하는 한 가지 매끄러운 방법 은 다음과 같은 형식으로 파일을 출력 하는 %i%또는 %n%시스템 변수 를 호출하는 것입니다. file1, file2, file3, file4 ... %i%시스템 변수는 현재 목록 위치를 참조하고 %n%시스템 변수는 현재 모델 반복을 참조합니다. 이를 사용중인 도구의 출력 매개 변수에 적용하십시오. 예를 들면 다음과 같습니다.

출력 기능 클래스

C:\temp\out%i%.shp

1

작업 공간의 피처 클래스 및 각 피처 클래스의 피처에 대해 하나씩, 두 개의 중첩 루프를 수행하려는 것 같습니다. 이것은 ModelBuilder와 관련하여 고통 스럽지만 가능합니다 .

파이썬으로 손을 더럽 히고 싶다면 (이와 같은 것들을 확실히 추천합니다) 시작하는 예는 다음과 같습니다.

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)

테스트되지 않았지만 아이디어를 얻길 바랍니다. IMO, Python 스크립트는 가장 사소한 작업을 제외한 ModelBuilder 모델보다 훨씬 쉽게 작업 할 수 있습니다.

Python / ArcPy 학습 리소스의 경우이 질문을 더 이상 보지 마십시오. ArcPy 학습을 위한 리소스는 무엇입니까?


모델 빌더의 중첩 루프가 불행합니다. 가능하면 피하십시오.
MOX
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.