Answers:
这种类型的操作几乎总是涉及编写WHERE子句,因此我认为至少要使用一点点Python。
同样,虽然这可以通过IMO的ModelBuilder实现,但创建具有自定义验证和对参数设置进行更多控制的Python 脚本工具可以提供更好的用户体验-例如,通过使Field和 MultiValue *参数下拉菜单您可以从中选择值,而不必键入它们。
*实际上可能不确定MultiValue参数
但是,由于这是另一个主题的高级练习,因此我将继续使用ModelBuilder方法,仅使用Python创建WHERE子句:
双击“计算值”工具进行设置:
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表达式。
5天 单击“确定”,然后右键单击“计算值”工具中的输出变量,并将其重命名为更具描述性的名称,例如“ WHERE子句”。
将复制功能(数据管理)工具添加到画布。将“按属性选择图层”工具的输出连接到“复制要素”工具。右键单击输出要素类变量,然后检查模型参数和(可选)添加到显示选项。
此时,它应如下所示:
在模型 -> 模型属性菜单下,给它一个好名字和标签,然后保存并关闭它。
在ArcToolbox中双击模型以打开模型对话框。输入参数,然后单击确定。它应该将所选要素导出到新要素类,并将其添加到地图(如果在输出要素类上选中了“添加到显示”)。
笔记:
您可以始终对值进行硬编码,而不希望对用户不希望更改的变量进行“参数化”,例如要素图层或字段参数。我只是喜欢具有通用/可重用的工具,所以我做了这些模型参数。实际上,我要做的就是简单地将通用模型拖放到一个新模型中,然后设置您的预定义参数-这样,您可以创建多个不同的预定义“包装器”模型,但是只有一个基础模型在起作用,所以如果您需要更改其功能,则只需在一个地方进行更改。
如果像我一样幸运的话,您不必验证模型并仅提供一些虚拟数据即可在验证后将其删除(请注意,所有模型元素都是空白/白色,这意味着它们尚未“准备好运行”) -但在模型对话框中填写参数后,我仍然可以运行它。