使用定义查询过滤要素
将数据集作为图层添加至地图或场景时,有时您只想使用和绘制数据集中的部分要素。 示例包括以下内容:
在世界城市数据集中,仅使用人口超过 100 万的城市
在水文线数据集中,仅使用常流河
在宗地数据集中,仅使用划分为商业区域的宗地
定义查询可用于定义一个过滤器,该过滤器限制图层从数据集中检索的要素。 这意味着定义查询不仅会影响绘图,还会影响图层属性表中显示的要素,且可以通过地理处理工具进行选择、标注、标识和处理。

如果要限制绘制的要素,但在查询和处理中保留所有要素,请考虑改用显示过滤器。 定义查询和显示过滤器可以在图层上一起使用,但定义查询用于限制图层中的可用要素,而显示过滤器仅用于限制要显示的要素。
定义查询由一个或多个子句组成。 子句有两种类型:属性子句和空间子句。 所有子句均使用 SQL 语法编写,并使用查询构建器构造。 有关如何使用子句和查询以及如何将查询保存至文件和从文件加载查询,请参阅查询表达式简介。
图层可以具有多个与之关联的定义查询,但一次只能有不超过一个定义查询处于活动状态。 即使为图层定义了多个查询,它们也可以全部关闭,这意味着不会主动应用查询。
注:
本主题概述了要素图层上的定义查询,但定义查询可以在独立表中以同样方式使用。
为图层
要在图层上创建定义查询,请执行以下步骤:
确保已在内容窗格中选择了一个图层。
在要素图层选项卡集上,单击数据选项卡。
在数据选项卡的定义查询组中,单击构建定义查询按钮
以打开图层属性对话框,并打开其定义查询选项卡。单击新建定义查询按钮,或单击其下拉菜单以在设计器模式(使用子句)、编辑器模式(使用 SQL 代码)或查询表达式文件
(.exp)中创建查询。在查询构建器中,从菜单中选择构造子句所需的值。 这些菜单及其值仅适用于基础源数据。
也可以单击添加子句
向查询中添加其他属性子句。 根据需要从新子句的菜单中选择值。 重复此步骤添加更多属性子句,或单击其下拉菜单添加空间子句。可以单击设置
修改查询或其字段值的显示。 在适用时,这些设置会应用到所有查询。单击按升序排列字段在下拉菜单中以字母顺序显示字段名称。 按降序排列字段可按字母顺序的对字段名称进行倒序排序。 单击按原始顺序排列字段可将字段恢复为其默认顺序。
默认选中显示字段别名。 单击显示字段名称在子句的字段下拉菜单中包含表名称。 如果图层参与共享公共字段名称的连接,则此操作非常有用。
默认选中显示可见字段。 单击显示所有字段在子句的字段下拉菜单中显示隐藏字段。
SQL 自动完成是默认启用的编辑器模式设置,用于在编写 SQL 代码时提供建议。 单击此设置可禁用 SQL 自动完成功能。
默认选中仅显示域和子类型值。 单击显示所有值以在字段的唯一值下拉菜单中包含所有无效或错误值。
单击按升序对查询进行排序
可按查询名称的字母顺序重新排列所有查询,或单击按降序对查询进行排序
可按字母倒序重新排列查询。如果选择了查询,请单击复制所选查询
以创建查询的副本。
或者可将鼠标悬停在查询名称上,然后单击以进行重命名。
(可选)单击验证 SQL 表达式是否有效
来验证查询。要验证并最终确定查询,在查询构建器中,单击应用。
如果这是图层上的唯一定义查询,则它将成为活动定义查询,并立即应用。 如果图层上还有其他定义查询,请单击设置为活动
以将定义查询应用于图层。
向定义查询
除了使用一个或多个子句创建定义查询外,定义查询还可能包括空间子句。 与通过指定字段或值范围过滤从数据集检索的要素的常规子句不同,空间子句使用图层或空间范围的几何。
一个定义查询只能包含一个空间子句。
注:
虽然要素图层支持该子句,但某些其他图层类型不支持空间子句。 查看图层类型的文档,以确定图层类型是否支持空间子句。
按照以下步骤向现有定义查询添加空间子句:
如有必要,右键单击内容窗格中的某个图层,然后单击属性即可打开图层属性对话框。
在定义查询选项卡上,单击编辑以修改现有查询,或按照上述工作流中的步骤 1 至 6 创建新的定义查询。
单击添加子句下拉菜单,然后单击添加空间子句。
空间子句几何对话框随即显示。
在空间子句几何对话框中,选择以下选项之一:
选择图层 - 使用活动地图中图层的几何。 无法选择图形图层和多面体图层。 您可以使用图层中所有要素的几何、仅已选要素的几何或仅视图中要素的几何。 如果用于生成几何的图层被编辑或从地图中移除,则空间子句几何不受影响。
选择自定义范围 - 使用来自以下来源之一的自定义范围:
当前可见范围
所有图层中的数据范围
图层中所有要素或元素的范围
所有已选要素或元素的范围
您也可以更改显示单位以自定义范围。
在列表中选择一个图层或范围选项,为空间子句生成几何。 随即显示几何的预览。
单击确定。
空间子句已添加到查询。 在编辑器和设计器模式下,空间子句显示在属性子句表达式下方。 AND 运算符会将空间子句追加到表达式的其余部分。
注:
形状字段名称和相交运算符是空间子句的必需组成部分。 这些值无法修改。
设置活动定义查询
您可以为图层或表定义多个定义查询并在它们之间进行切换。 无论何时仅有一个查询处于可用状态,或无任何查询处于可用状态。 定义查询将作为图层属性进行存储。
要在活动定义查询之间进行切换,请执行以下步骤:
确保在内容窗格中选择了该图层。
在要素图层选项卡集上,单击数据选项卡。
在数据选项卡的定义查询组中,从定义查询菜单中选择要应用于图层的查询。
或者,可从图层属性对话框的定义查询选项卡中设置活动查询。
单击设置为活动
,然后单击应用将该查询应用于图层。 任何其他查询都将变为非活动状态。 可在属性对话框的底部为活动查询命名。 如果已列出多个查询且活动查询位于视图范围之外,请单击显示活动定义查询
以滚动至该活动查询。单击清除活动查询
,然后单击应用不再向图层或表应用任何查询。 所有查询均保留在图层或表中,但当前未应用任何查询。
提示:
可在内容窗格中过滤图层列表以仅显示具有活动定义查询的图层。
修改现有查询
在内容窗格中选择图层后,在要素图层选项卡集上的数据选项卡的定义查询组中,单击构建定义查询按钮
以打开图层属性对话框,其中定义查询选项卡处于打开状态。 要修改定义查询,请将鼠标悬停在该查询上,然后执行以下任意操作:
要修改、添加或移除定义查询中的子句,请单击查询单元格中的编辑。
要编辑查询中的子句,请根据需要调整值。
要从查询中移除子句,请单击移除子句
。要向查询添加子句,请单击添加子句
。要编辑现有查询的空间子句几何,请单击几何
。如果图层的数据源是企业级地理数据库要素类,且希望在数据库过滤要素后于客户端应用空间子句,请单击菜单图标
并选中设置属性子句优先级选项。
单击应用以将更改应用于定义查询。
要从图层或表中移除定义查询,请在未处于编辑模式的情况下,将鼠标悬停在定义查询单元格上,然后单击移除定义查询
。要重命名定义查询,请单击定义查询的名称,然后输入新名称。
要将查询语法导出到查询表达式文件 (
.exp),请在未处于编辑模式的情况下,将鼠标悬停在定义查询单元格上,然后单击保存定义查询
。要将当前查询替换为来自查询表达式文件 (
.exp) 的不同查询,请在未处于编辑模式的情况下,将鼠标悬停在定义查询单元格上,然后单击加载定义查询
。要复制定义查询,请在未处于编辑模式的情况下,将鼠标悬停在定义查询单元格上,然后单击复制所选查询
。
同时在多个图层上设置定义查询
如果多个图层共享具有公用名称的定义查询,即使查询的内容不同,也可以同时激活这些图层的查询。 这表示您可以为某一情景构造多个相关查询,并同时应用这些查询。 您随后可以根据需要切换至不同的查询集以满足不同情景。
要将具有公用名称的定义查询同时应用于多个图层,请执行以下步骤:
确保在内容窗格中选择了图层。
在要素图层选项卡集上,单击数据选项卡。
在数据选项卡的定义查询组中,从定义查询菜单中选择要应用于图层的查询。
仅显示所有选定图层具有公用名称的定义查询。
自动化定义查询创建
使用 ArcPy 函数组合,可以通过 Python 自动创建和操作定义查询。 有关此主题的信息(包括代码示例),请参阅图层类文档。
还可以使用从所选内容生成定义查询工具基于要素图层上的所选内容生成定义查询。
共享具有定义查询的图层
将图层作为要素服务或在地图图像图层中进行共享时,仅保留并使用活动定义查询。 其他所有非活动定义查询都将被删除。
如果查询包含空间子句,则返回错误。 有关详细信息,请参阅00428:服务器不支持定义查询空间子句。