「複数値選択リストの生成」というタイトルの ESRIのブログサイトにあるモデルとスクリプトの組み合わせを適応させようとしてい ます。
ただし、埋め込みスクリプトで使用される検証の一部は、適切に機能するために「周波数」ツールに依存していると結論付けましたが、これはAdvancedライセンス(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
です。