系列文章目录
ArcGIS Desktop使用入门(二)常用工具条------标准工具
ArcGIS Desktop使用入门(二)常用工具条------编辑器
ArcGIS Desktop使用入门(二)常用工具条------数据驱动页面
ArcGIS Desktop使用入门(二)常用工具条------基础工具
ArcGIS Desktop使用入门(二)常用工具条------布局工具
ArcGIS Desktop使用入门(二)常用工具条------绘图
ArcGIS Desktop使用入门(二)常用工具条------捕捉
ArcGIS Desktop使用入门(二)常用工具条------编辑折点
ArcGIS Desktop使用入门(二)常用工具条------高级编辑
ArcGIS Desktop使用入门(二)常用工具条------效果
ArcGIS Desktop使用入门(二)常用工具条------地理配准
ArcGIS Desktop使用入门(二)常用工具条------图形
ArcGIS Desktop使用入门(二)常用工具条------插入图例
ArcGIS Desktop使用入门(二)常用工具条------要素缓存
ArcGIS Desktop使用入门(二)常用工具条------数据框工具(旋转视图)
ArcGIS Desktop使用入门(三)常用工具条------拓扑(上篇:地图拓扑)
ArcGIS Desktop使用入门(三)常用工具条------拓扑(下篇:地理数据库拓扑)
ArcGIS Desktop使用入门(三)图层右键工具------缩放至图层、缩放至可见
ArcGIS Desktop使用入门(三)图层右键工具------可见比例范围
ArcGIS Desktop使用入门(三)图层右键工具------使用符号级别
ArcGIS Desktop使用入门(四)工具箱------属性域
ArcGIS Desktop使用入门(四)------ArcMap软件闪退无法打开问题
ArcGIS Desktop使用入门(四)------ArcMap软件彻底卸载删除干净
ArcGIS Desktop使用入门(四)------9版本与10版本区别
ArcGIS Desktop使用入门(四)------ 解决ArcGIS 界面字太小,DPI分辨率高
文章目录
- 系列文章目录
- 前言
- 一、未设置"定义查询"的状态
- 二、本期工具:定义查询
- [三、设置 定义查询](#三、设置 定义查询)
- 四、定义查询的一些特性
- [五、解除 定义查询](#五、解除 定义查询)
- [六、注意事项:ObjectID 的限制](#六、注意事项:ObjectID 的限制)
- [七、ArcGIS Pro 定义查询的进化](#七、ArcGIS Pro 定义查询的进化)
- 总结
前言
本期开始介绍ArcGIS Desktop的一些常用工具,争取做到全面,后续会持续更新。
ArcMap 定义查询:地图数据的"隐形过滤器"
在GIS制图中,我们经常会遇到这样的痛点:加载了一个包含几十万条记录的庞大要素类,但当前地图只需要展示其中某个特定区域或某种特定类型的数据。如果直接复制一份数据再删除不需要的部分,不仅费时费力,还会破坏原始数据的完整性。这时候,ArcMap 中的"定义查询(Definition Query)"功能就成了我们最得力的助手。
一、未设置"定义查询"的状态
未设置定义查询的图层,所有的要素都显示出来,进行多图层叠加操作时,所有的要素都参与。如下图所示:

图层1 和 图层2 相交,图层1所有的要素都参与相交的动作,生成的新图层是图层1所有要素与图层2的交集。
二、本期工具:定义查询
简单来说,定义查询就像是给图层戴上了一副"智能眼镜"。它允许你通过编写 SQL 表达式,在不修改、不删除底层原始数据的前提下,仅过滤并显示数据集中的要素子集。被过滤掉的要素既不会在地图上绘制,也不会出现在属性表中,但只要你清除查询条件,所有数据又会瞬间恢复原状。
在 ArcMap 中应用定义查询的操作非常直观。你只需要在左侧的"内容列表"中右键点击目标图层,选择"属性(Properties)",然后在弹出的对话框中切换到"定义查询(Definition Query)"选项卡。

三、设置 定义查询
在定义查询窗口这里,你可以直接在文本框中输入 SQL 表达式,也可以点击"查询构建器(Query Builder)"通过图形化界面来拼接条件。
操作如下:

我针对图层1 定义了查询:MC= '1',得到的结果就是 图层1 只保留 符合 表达式的 要素,其他要素都被隐身了。
以下是一些常用的表达式构建模板:
- 如果你只想在地图上显示面积超过10000的要素,可以构建类似 SHAPE_Area >10000 的表达式;
- 如果你只想在地图上显示所有地类名称中的一种地类,可以构建类似 DLMC = '旱地' 或者 DLMC IN ( '水田', '水浇地', '旱地') 的表达式;
- 如果是处理 CAD 数据,想要过滤出特定的图层,可以使用 "Layer" = 'V-PROP-LINE'。
- 表达式可以定义多个条件组合查询,只要能成功通过验证,就可以得到自己想要的 查询结果。
设置完成后点击确定,地图就会自动刷新,只呈现你关心的要素子集。
四、定义查询的一些特性
完成定义查询后,该图层的后续分析操作,只有查询后的结果要素进行参与了,被隐藏的要素不再产生作用。
-
图层1导出要素为单独图层或者 导出属性表时,只有定义查询的结果 被导出了。

-
只有定义查询的结果参与后续的图层分析,实现了拆分图层的效果。

-
可以将定义查询的表达式保存成 exp文件,方便以后加载。
对于复杂的项目,你可能需要在同一份数据上切换不同的展示视角。在 ArcMap 中,虽然可以为图层保存多个定义查询,但在同一时间只能激活一个。如果你需要频繁在"全县数据"和"村级数据"之间切换,建议将常用的查询表达式保存为 .exp 文件,这样下次可以直接加载,避免重复输入的麻烦。

-
此外,在处理企业级地理数据库等海量数据时,定义查询还能显著提升地图的渲染性能。在查询属性时,你可以通过"搜索顺序"按钮来决定是先执行空间搜索还是先执行属性搜索。合理调整这一顺序,可以让数据库以最少的计算量返回结果,大大减少等待时间。
五、解除 定义查询
解除定义查询的方法非常简单,只需要把 定义查询的 表达式删除即可,被隐藏的要素就都恢复显示了,该图层又恢复原始状态了。

六、注意事项:ObjectID 的限制
在使用定义查询时,有一个极易踩坑的限制需要特别注意:定义查询强依赖于数据源中的 ObjectID 字段。
如果你的数据来源于普通的文本文件(.txt)、Excel 表格(.xls)或者未注册的 OLE DB 数据,由于它们缺乏 ObjectID,定义查询功能将是不可用的。
遇到这种情况该怎么办?最稳妥的解决方法是将这些表格数据转换为真正的ArcGIS要素类。
你可以在 ArcCatalog 中右键点击包含 XY 坐标的表,选择"从 XY 表创建要素类",或者在 ArcMap 中将其导出为新的图层。这样不仅赋予了数据 ObjectID,还能解锁定义查询、空间选择等所有高级 GIS 功能。
七、ArcGIS Pro 定义查询的进化
随着 Esri 将开发重心转移至 ArcGIS Pro,定义查询功能也迎来了许多人性化的升级。如果你习惯了 ArcMap 的操作,初用 Pro 时可能会发现一些不同,但你会发现 Pro 在体验上更加友好:
-
告别"烧脑"SQL,拥抱中文可视化构建
在 ArcMap 中,构建复杂的查询条件往往需要手动编写 SQL 语句(例如 "NAME" = '北京市'),这对不熟悉 SQL 语法的新手不太友好。
而 ArcGIS Pro 将定义查询彻底"翻译"成了人类可读的语言。在 Pro 的查询构建器中,你不再需要死记硬背 SQL 关键字,只需通过下拉菜单选择"字段"、"等于"、"值"等中文选项,即可像搭积木一样快速构建查询逻辑。
-
多查询管理:从"单线操作"到"多场景切换"
在 ArcMap 中,虽然你可以保存多个查询表达式(.exp 文件),但同一时间图层只能应用一个定义查询,切换时需要反复加载。ArcGIS Pro 则引入了更强大的多查询管理机制。你可以为同一个图层创建多个定义查询(例如"2023年数据"、"2024年数据"),并在它们之间一键切换(设置为活动)。这种机制非常适合需要针对不同情景(如不同年份、不同行政区)进行地图展示的用户。
-
操作入口与交互的优化
ArcMap:通常需要右键图层 -> 属性 -> 切换到"定义查询"选项卡,路径相对较深。
ArcGIS Pro:除了传统的图层属性入口,Pro 将操作前置到了功能区。当你选中图层时,可以直接在顶部功能区的"数据"选项卡中找到"定义查询"组,随时点击对话框启动器进行设置或清除。
总结
掌握定义查询,意味着你学会了在不破坏数据源的前提下灵活掌控地图的呈现。下次面对海量数据时,不妨试试这个强大的"隐形过滤器",让你的制图工作更加高效、优雅。

如果觉得文章不错,请多多点赞添加关注,您的支持就是我的动力。
