显示图层中的要素子集
在指定一个希望绘制为地图图层的数据集时,您通常只希望绘制数据集中的部分要素。这种情况下,可以定义一个查询表达式以便选择一个用于图层显示的要素子集。这称为定义查询。
例如:
- 您可能只希望显示人口数超过某个阈值的城市。
- 许多数据集(例如,道路和街道数据集)包含要素(类)的子集,您可能希望独立于其他要素而为各个道路类定义地图图层。
- 在另一种情况下,您可能具有大型企业级的数据库,其数据集中包含覆盖较大区域(例如,全国或整个州)的成千上万个要素。不过,在您的地图中,您可能只希望使用这些数据的一个子集。
如果只希望显示和使用图层中所有要素的子集,则可对图层应用一个定义查询。可以直接输入您自己的表达式,或者使用查询构建器 对话框来构建查询表达式。
对具有空间和属性因子的企业级地理数据库要素类执行查询时,您可以通过由搜索顺序按钮启动的对话框选择先执行空间搜索(默认)还是先执行属性搜索。您可以微调查询的执行方式。只有在图层数据源是一个企业级地理数据库要素类时,才出现该按钮。
如果选择了先执行空间搜索选项,定义查询会将要素限制为那些存在于此范围内的要素。如果选择了先执行属性搜索选项,将先选择整个数据集中属性值符合查询条件的所有要素,然后空间搜索将查找在您的范围内可见的要素。
如果您的地图启用了数据驱动页面功能,您就可以使用页面定义查询来指定将根据 SQL 查询绘制图层的哪些要素。虽然与其他定义查询相似,但页面定义查询的不同之处在于仅作用于“数据驱动页面”,并且是动态的。要素基于当前页面进行过滤。迭代页面时,该查询会发生变化,并且系统会绘制一组适合于新页面的新要素。如果您具有一些与页面范围相重叠的要素,并希望这些要素同时显示在多个页面上,则应考虑使用裁剪工具来自定义地图。只有在为地图文档定义了“数据驱动页面”的情况下才会出现该按钮。定义“数据驱动页面”时,该按钮并不出现在当前作为“数据驱动页面”索引图层使用的图层的图层属性中。
如果使用不包含 ObjectID (OID) 字段的表或事件图层(x,y 或路径)数据源,则定义查询不可用。文本文件(.txt 文件)、Excel 数据(.xls 文件)和 OLE DB 数据(例如通过 OLE DB 访问的未注册 Oracle 文件)将出现这种情况。
对于事件数据,解决方法就是从表数据源(而不是事件图层)创建一个要素类。如果所添加的包含 x,y 数据的表中没有 ObjectID 字段,请不要使用 ArcMap 中的文件 > 添加数据 > 添加 XY 数据命令创建基于表的事件图层。相反,启动 ArcCatalog,右键单击表,选择从 XY 表创建要素类从其创建新要素类,然后将该新要素类添加到地图。另外,使用文件 > 添加数据 > 添加 XY 数据或文件 > 添加数据 > 添加路径事件功能从不包含 ObjectID 的表创建事件图层后,您可以导出数据以制作新图层。这可将数据保存到要素类,并进而写入 ObjectID 字段。另一种选择是使用 创建查询表地理处理工具,从而使用 OLE DB 连接创建表,并指定要用于 ObjectID 的列或动态添加 ObjectID。
创建定义查询
- 在内容列表中右键单击图层,然后单击属性。
- 在图层属性 对话框中单击定义查询选项卡。
- 输入查询表达式。有关如何构建有效查询的详细信息,请参阅构建查询表达式。
- 单击确定。
设置完定义查询后,地图将被重新绘制,并会显示使用查询选择的要素子集。每次刷新地图后,都会继续使用此要素子集绘制图层。
要将所有要素重新添加回图层中,只需删除定义查询即可。