답변:
이 유형의 작업에는 거의 항상 WHERE 절을 작성해야 하므로 적어도 약간의 Python을 사용하는 것이 좋습니다.
또한 이는 IMO ModelBuilder와 관련이있을 수 있지만, 사용자 지정 유효성 검사 및 매개 변수 설정에 대한 제어 기능이 강화 된 Python 스크립트 도구 를 만들면 더 나은 사용자 경험을 제공 할 수 있습니다 (예 : Field 및 MultiValue * 매개 변수 드롭 다운 메뉴). 입력하지 않고 값을 선택할 수 있습니다.
* MultiValue 매개 변수에 대해 실제로 확실하지 않은 경우
그러나 이것은 다른 주제에 대한 고급 연습이므로 Python을 사용하여 WHERE 절을 만드는 ModelBuilder 접근 방식을 고수합니다.
값 계산 도구를 두 번 클릭하여 설정하십시오.
5a. 다음을 표현식 상자에 복사하여 붙여 넣습니다 (변수 이름과 일치하도록 조정).
buildWhereClauseMultiValue(r"%Feature Layer%","%Field%","%Values%")
5b. 다음을 코드 블록 상자에 복사하여 붙여 넣습니다 .
import arcpy
def buildWhereClauseMultiValue(table, field, values):
"""Takes a semicolon-delimited list of values and constructs a SQL WHERE
clause to select those values within a given field and table."""
# Add DBMS-specific field delimiters
fieldDelimited = arcpy.AddFieldDelimiters(arcpy.Describe(table).path, field)
# Split multivalue at semicolons and strip quotes
valueList = [value[1:-1] if (value.startswith("'") and value.endswith("'")) else value for value in values.split(';')]
# Determine field type
fieldType = arcpy.ListFields(table, field)[0].type
# Add single-quotes for string field values
if str(fieldType) == 'String':
valueList = ["'%s'" % value for value in valueList]
# Format WHERE clause in the form of an IN statement
whereClause = "%s IN(%s)" % (fieldDelimited, ', '.join(valueList))
return whereClause
5c. 출력 데이터 유형을 SQL 표현식으로 설정하십시오 .
5d. 확인을 클릭하고 값 계산 도구에서 출력 변수를 마우스 오른쪽 단추로 클릭하고 이름을 "WHERE 절"과 같이보다 설명적인 이름으로 바꾸십시오.
캔버스에 복사 기능 (데이터 관리) 도구를 추가하십시오 . 속성 별 레이어 선택 도구의 출력을 기능 복사 도구에 연결하십시오. 출력 피쳐 클래스 변수를 마우스 오른쪽 버튼으로 클릭하고 모델 매개 변수 및 (선택 사항) 디스플레이에 추가 옵션을 확인하십시오.
이 시점에서 다음과 같이 보일 것입니다 :
언더 모델 -> 모델 속성 메뉴가 그것에게 좋은 이름과 라벨을 부여하고 저장하고 닫습니다.
ArcToolbox에서 모델을 두 번 클릭하여 모델 대화 상자를 엽니 다. 매개 변수를 입력하고 확인을 클릭하십시오. 선택한 기능을 새 기능 클래스로 내보내고 맵에 추가해야합니다 (출력 기능 클래스에서 "디스플레이에 추가"를 선택한 경우).
메모:
피처 레이어 나 필드 매개 변수처럼 사용자가 변경하지 않게하려는 변수를 "파라미터 화"하지 않고 항상 값을 하드 코딩 할 수 있습니다. 나는 일반적인 / 재사용 가능한 도구를 가지고 있기 때문에 모델 매개 변수를 만들었습니다. 실제로 내가 할 일은 단순히 일반 모델을 새 모델로 끌어다 놓은 다음 미리 정의 된 매개 변수를 설정하는 것입니다. 이렇게하면 미리 정의 된 여러 "래퍼"모델을 만들 수 있지만 작업을 수행하는 하나의 기본 모델 만 가질 수 있습니다. 기능을 변경해야하는 경우 한 곳에서만 변경하면됩니다.
운이 좋으면 모델 을 검증 하지 않아도되고 유효성 검사 후에 모델 을 제거하기 위해 더미 데이터를 제공 할 필요가 없습니다 (모든 모델 요소가 공백 / 흰색으로 표시되어 "실행할 준비가되지 않음"을 의미 함) -하지만 모델 대화 상자에서 매개 변수를 채울 때 어쨌든 실행할 수있었습니다).