ESRI의 블로그 사이트 '다중 값 선택 목록 생성' 에있는 모델 및 스크립트 조합을 수정하려고합니다 .
그러나 임베디드 스크립트에 사용 된 유효성 검사 중 일부는 제대로 작동하기 위해 '주파수'도구에 의존하지만이 기능은 Advanced license (lame)에서만 사용할 수 있습니다. 블로그 게시물에서는 워크 플로와 모델 및 스크립트를 다운로드 할 수있는 위치에 대해 설명합니다 (하지만 요청시 여기에 게시하겠습니다). 내가 알 수있는 한, 내가 따르는 기능의 핵심은 다중 값 선택 목록을 생성합니다.
..은 유효성 검사 스크립트가 올바르게 작동하는 것으로 가정합니다. 유효성 검사가 없으면 필드에서 값을 목록으로 표시 할 수 없습니다. 이 유효성 검사 스크립트에서 제거하여 제거 할 수있는 기능이 있습니까? 아니면 해결 방법이 있습니까? 유효성 검사 프로세스에 익숙하지 않습니다. 다음은 유효성 검사를위한 코드입니다 (코드 샘플로 게시하려고했지만 따르기가 더 쉬운 것 같습니다).
[ 편집자 주 : 여기에 실제 검증 코드가 있습니다. 이미지가 올바르지 않습니다]
import arcpy
class ToolValidator(object):
"""Class for validating a tool's parameter values and controlling
the behavior of the tool's dialog."""
def __init__(self):
"""Setup arcpy and the list of tool parameters."""
self.params = arcpy.GetParameterInfo()
def initializeParameters(self):
"""Refine the properties of a tool's parameters. This method is
called when the tool is opened."""
return
def updateParameters(self):
"""Modify the values and properties of parameters before internal
validation is performed. This method is called whenever a parmater
has been changed."""
if self.params[1].altered: #Set condition - if the input field value changes
if self.params[1].value: #if the field parameter has a value
for field in arcpy.Describe(self.params[0].value).fields: #iterate through fields in the input dataset
if field.name.lower() == self.params[1].value.value.lower(): #find the field object with the same name as field parameter
try:
if self.params[2].values: #if this parameter has seleted values
oldValues = self.params[2].values #set old values to the selected values
except Exception:
pass
values = set() #create an empty set
fieldname = self.params[1].value.value #set the value of variable fieldname equal to the input field value
FrequencyTable = arcpy.Frequency_analysis (self.params[0].value, "in_memory\Frequency", self.params[1].value.value, "") #for large tables create a frequency table
cursor = arcpy.SearchCursor(FrequencyTable, "", "", self.params[1].value.value, "{0} A".format(self.params[1].value.value)) #open a search cursor on the frequency table
for row in cursor: #loop through each value
values.add(row.getValue(fieldname)) #add the value to the set
self.params[2].filter.list = sorted(values) #set the filter list equal to the sorted values
newValues = self.params[2].filter.list
try:
if len(oldValues): # if some values are selected
self.params[2].values = [v for v in oldValues if v in newValues] # check if seleted values in new list,
# if yes, retain the seletion.
except Exception:
pass
def updateMessages(self):
"""Modify the messages created by internal validation for each tool
parameter. This method is called after internal validation."""
return
유효성 검사가 핵심 요소라는 내 가정 (테스트를 통해)이 거짓이며 다른 값으로 값을 선택 가능한 목록으로 표시하지 못하게 할 수 있습니까? 미리 감사드립니다. 이러한 유형의 기능을 사용하면 회사에서 배포하려는 몇 가지 주요 워크 플로를 채택 할 수 있습니다.
arcpy.da.SearchCursor
에서 이전보다이 작업에 훨씬 빠르고 적합하기 때문에 묻습니다arcpy.SearchCursor
.