回答:
このタイプの操作では、ほとんどの場合WHERE句を記述する必要があるため、少なくとも少しのPythonを使用することが適切だと思います。
また、ModelBuilder、IMOでこれを行うことができますが、カスタム検証とパラメーター設定のより詳細な制御を備えたPython スクリプトツールを作成すると、たとえば、Fieldおよび MultiValue *パラメータードロップダウンメニューを作成することにより、ユーザーエクスペリエンスが向上します値を入力する代わりに、値を選択できます。
*おそらく、実際にはMultiValueパラメーターについて不明
ただし、これは別のトピックのより高度な演習であるため、WHERE句を作成するためだけにPythonを使用する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 Expressionに設定します。
5d。[OK]をクリックし、[値の計算]ツールから出力変数を右クリックして、「WHERE句」などのわかりやすい名前に変更します。
コピー機能(データ管理)ツールをキャンバスに追加します。[属性によるレイヤーの選択]ツールの出力を[フィーチャのコピー]ツールに接続します。[ 出力フィーチャクラス ] 変数を右クリックして、[ モデルパラメーター]および(オプションで)[ 表示に追加]オプションを確認します。
この時点で、次のようになります。
下ではモデル - > [ モデルプロパティのメニューはそれを良い名前とラベルを付け、保存して閉じます。
ArcToolboxでモデルをダブルクリックして、モデルダイアログを表示します。パラメータを入力し、[OK]をクリックします。選択したフィーチャを新しいフィーチャクラスにエクスポートし、マップに追加する必要があります(出力フィーチャクラスで[表示に追加]をオンにした場合)。
ノート:
フィーチャレイヤーやフィールドパラメーターのようにユーザーが変更したくない変数を「パラメーター化」せずに、常に値をハードコーディングできます。汎用/再利用可能なツールがあるのが好きなので、それらのモデルパラメータを作成しました。実際、私がすることは、単にジェネリックモデルを新しいモデルにドラッグアンドドロップし、定義済みのパラメーターを設定するだけです。この方法で、いくつかの異なる定義済みの「ラッパー」モデルを作成できます。機能を変更する必要がある場合は、1か所で変更するだけで済みます。
私のように運が良ければ、モデルを検証し、検証後に削除するためだけにダミーデータを提供する必要はありません(すべてのモデル要素が空白/白であることに注意してください。 -しかし、私はモデルダイアログのパラメータを入力するときにとにかくそれを実行することができました)。