ArcGIS 使用空间索引来提高要素类的空间查询性能。识别要素、通过点选或框选来选择要素以及平移和缩放都需要 ArcMap 使用空间索引来查找要素。
在 ArcGIS 的地理数据库中创建空要素类*或导入数据以创建要素类时,将为要素类创建空间索引。空间索引用于查询和编辑数据。
*在 IBM Db2 中创建空要素类时,不会创建空间索引。
空间索引的类型
数据源不同,空间索引也不同。以下地理数据库类型中的要素类使用基于格网的空间索引:
- 个人地理数据库
- 文件地理数据库
- Db2 中的地理数据库
- Oracle 中的地理数据库(如果要素类包含 Esri ST_Geometry 或二进制几何存储字段)
- Microsoft SQL Server 中的地理数据库(如果要素类包含二进制几何存储字段)
以下地理数据库类型中的要素类型使用 R 树空间索引:
- Oracle 中的地理数据库(如果要素类包含 Oracle Spatial (SDO_Geometry) 存储字段)
- IBM Informix 中的地理数据库
- PostgreSQL 中的地理数据库
SQL Server 地理数据库中包含几何或地理存储字段的要素类使用经过修改后的 B 树空间索引。
ArcGIS 如何维护空间索引
在文件、企业级、工作组和桌面地理数据库中完成某些操作后,ArcGIS 会自动重建空间索引以确保索引处于最优状态。下面介绍 ArcGIS 如何管理空间索引:
- 使用新建要素类向导创建空要素类时,将会为文件、工作组、桌面和所有企业级地理数据库(Db2 数据库中的除外)创建空间索引。空间索引用于编辑、查询或运行加载数据命令。在 Db2 的企业级地理数据库中,在将数据加载到空要素类后会创建空间索引。
- 如果从个人地理数据库、shapefile 或 coverage 导入数据,或者将计算机辅助绘图 (CAD) 或智能数据压缩 (SDC) 数据导入文件、企业级、工作组或桌面地理数据库,则会为新的要素类自动计算空间索引。
- 使用 ArcGIS 的复制和粘贴命令将要素类从个人地理数据库复制到文件、企业级、工作组或桌面地理数据库时,将会自动重新构建空间索引。如果从 Oracle Spatial、PostgreSQL 或 Informix 复制要素类,也会重新构建空间索引。如果将要素类从使用基于格网索引的文件或企业级地理数据库(Oracle 二进制和 ST_Geometry、SQL Server 二进制或 Db2)复制到其他使用基于格网索引的地理数据库,则会将索引与源数据一同复制,而不会重新构建。
- 使用用于创建要素类的地理处理工具时,该工具会基于新要素类中的要素创建空间索引。
- 对于没有空间索引的要素类,在保存编辑或使用加载数据命令时,将会在保存编辑或加载数据操作结束时创建空间索引。
- 压缩文件地理数据库要素类使用的空间索引类型与未压缩要素类中使用的空间索引类型不同。在压缩文件地理数据库要素类时,系统会自动重新构建索引。此索引无法修改。解压缩要素类时,将自动重新建立与压缩前要素类所具有的相同的空间索引。
何时更新空间索引
因为 ArcGIS 会维护文件、企业级、工作组和桌面地理数据库中的空间索引,所以用户极少需要手动重新创建空间索引。建议仅在添加了大量与要素类中原有要素大小不同的要素后,才重新创建空间索引。这只适用于在编辑会话中添加要素的情况。例如,如果您开始编辑会话并手动添加大量线要素或使用对象加载器进行加载,则您添加的许多要素可能比要素类中已存在的要素长得多或者短得多。要确保空间索引与新要素实现最佳配合,则应当更新空间索引。
在 ArcGIS 中通过任意方法在个人地理数据库中创建要素类时,ArcGIS 会计算空间索引。个人地理数据库中,针对要素类创建的空间索引基于要素类坐标系地平线且始终处于最优状态;不过,无法对其进行修改。