认识ArcGIS的空间索引

1.概述

ArcGIS 使用空间索引来提高要素类的空间查询性能。识别要素、通过点选或框选来选择要素以及平移和缩放都需要 ArcMap 使用空间索引来查找要素。

在 ArcGIS 的地理数据库中创建空要素类或导入数据以创建新要素类时,将为要素类创建空间索引。空间索引用于编辑和加载数据。

*在 DB2 的地理数据库中创建空要素类时,不会创建空间索引。

数据源不同,空间索引的工作方式也不同。以下地理数据库类型中的要素类使用基于格网的空间索引:

  • 个人地理数据库
  • 文件地理数据库
  • DB2 中的地理数据库
  • 使用 Esri ST_Geometry 或二进制几何存储的 Oracle 地理数据库
  • 使用二进制几何存储的 SQL Server 地理数据库

使用 Oracle Spatial (SDO_Geometry) 存储、Informix 和 PostgreSQL 的 Oracle 要素类不使用基于格网的空间索引 — 它们使用 R 树索引。同样,使用 SQL Server 空间类型的要素类不使用 Esri 基于格网的空间索引。


2.原理

Oracle 和 DB2 中的 ArcSDE 地理数据库使用格网索引。空间索引通过将格网应用到空间列中的数据构建而成。空间格网索引是二维的,并且涵盖一个要素类范围,类似于一般道路地图上的参考格网。您可以将空间格网索引划分为成一个、两个或三个格网等级,每个等级的像元大小各不相同。必不可少的第一层格网等级的像元大小最小。第二层和第三层格网像元等级为可选等级,将其设置为 0 时不可用。如果启用第二层和第三层格网像元等级,则第二层格网像元的大小至少必须是第一层格网像元大小的三倍,而第三层网格像元的大小至少必须是第二层网格像元大小的三倍。

在下例中,要素类具有两个格网等级。区域形状 101 位于等级 1 的格网像元 4 中。空间索引表上会添加一条记录,这是因为要素所占格网像元数小于四个(本例中仅占一个像元)。区域要素 102 的包络矩形位于等级 1 的像元 1 到 8 中。由于要素的包络矩形所占格网像元数大于四个,因此要素被将提升到等级 2,在等级 2 中,其包络矩形拟合于两个格网像元中。要素 102 在等级 2 中建立索引,而且空间索引表中会添加两条记录。

形状 101 在格网等级 1 上建立索引;形状 102 在格网等级 2 上建立索引,该形状仅占两个格网像元。
形状 101 在格网等级 1 上建立索引;形状 102 在格网等级 2 上建立索引,该形状仅占两个格网像元。

插入、更新或删除要素会更新空间索引。每个要素的范围都会叠加到最低格网等级上,从而获得格网像元的数量。如果要素超过为 SERVER_CONFIG 表中的 MAXGRIDSPERFEAT 值设置的值,则在已定义更高等级的情况下,几何会被提升至下一较高等级。

对于 Oracle 数据库,您可以通过设置用于创建要素类的配置关键字的 S_STORAGE 参数来指定创建空间索引的位置。有关设置配置参数的信息,请参阅 Oracle DBTUNE 配置参数和《ArcSDE 管理命令参考》中的 sdedbtune 命令。


3.设置空间索引快速浏览

空间索引用于在显示、编辑或查询数据时快速定位要素。因此,空间索引非常重要,尤其是在处理大量数据时。

数据源不同,空间索引的工作方式也不同。DB2 中的个人地理数据库、文件地理数据库和企业级地理数据库,使用二进制几何存储机制的 Oracle 和 SQL Server 企业级地理数据库及使用 ST_Geometry 存储机制的 Oracle 企业级地理数据库均使用基于格网的空间索引。Oracle Spatial、Informix 和 PostgreSQL 不使用格网大小 - 它们使用 R 树索引。同样,使用 SQL Server 空间类型的要素类不使用 Esri 空间格网索引。

ArcGIS 如何维护空间索引

在文件、企业级、工作组和桌面地理数据库中完成某些操作后,ArcGIS 会自动重建空间索引以确保索引处于最优状态。下面介绍 ArcGIS 如何管理空间索引:

  • 使用“新建要素类”向导创建空要素类时,将会为(不包括 DB2 数据库中的)文件、工作组、桌面和所有企业级地理数据库创建空间索引。在编辑或使用“加载数据”命令时,将使用空间索引。在 DB2 的企业级地理数据库中,在将数据加载到空要素类后会创建空间索引。
  • 如果从个人地理数据库、shapefile 或 coverage 导入数据,或者将计算机辅助绘图 (CAD) 或智能数据压缩 (SDC) 数据导入文件、企业级、工作组或桌面地理数据库,则会为新的要素类自动计算空间索引。
  • 在使用 ArcCatalog 的“复制”和“粘贴”命令将要素类从个人地理数据库复制到文件、企业级、工作组或桌面地理数据库时,将会自动重新构建空间索引。如果从 Oracle Spatial、PostgreSQL 或 Informix 复制要素类,也会重新构建空间索引。如果将要素类从使用基于格网索引的文件或企业级地理数据库(Oracle 二进制和 ST_Geometry、SQL Server 二进制或 DB2)复制到其他使用基于格网的索引的地理数据库,则会将索引与源数据一同复制,而不会重新计算。
  • 在使用创建要素类的地理处理工具时,会检查新要素类中的要素,并自动计算出新的空间索引。
  • 对于没有空间索引的要素类,在保存编辑或“加载数据”命令时,将会在保存编辑或加载数据操作结束时计算空间索引。
  • 压缩文件地理数据库要素类使用的空间索引类型与未压缩要素类中使用的空间索引类型不同。在压缩文件地理数据库要素类时,系统会自动重新构建索引。此索引无法修改。解压缩要素类时,将自动重新建立与压缩前要素类所具有的相同的空间索引。

何时更新空间索引

因为 ArcGIS 会维护文件、企业级、工作组和桌面地理数据库中的空间索引,所以用户极少需要手动重新创建空间索引。仅在以下极少数情况下需要重新创建空间索引:

  • 在添加了大量与要素类中原有要素大小不同的要素后,需要手动重新计算空间索引。这只适用于在编辑会话中添加要素的情况。例如,您可能启动了一个编辑会话,并手动添加了大量线要素或使用“对象加载器”加载了这些要素。添加的许多要素与要素类中原有的要素相比可能很长或很短。为确保空间索引与新要素的配合达到最优,应当进行更新。

个人地理数据库中的空间索引

在个人地理数据库中创建要素类时,无论是使用“新建要素类”向导、地理处理工具还是任何其他方法,ArcGIS 都将计算空间索引,并且无法修改。空间索引将基于要素类坐标系的范围,并且始终是最优的。


4.修改空间索引

可以在企业级地理数据库或数据库中重新构建要素类的空间索引,这些数据库使用 ST_Geometry 存储类型(Oracle 中)或几何存储(SQL Server 中)。对于企业级地理数据库和数据库中的其他所有存储类型,以及对于文件地理数据库中的要素类,您可以删除和重新创建空间索引,但无法对其进行修改。对于个人地理数据库中的要素类,则不能修改或重新创建空间索引。

可以通过查看要素类属性 对话框常规选项卡中的“几何属性”部分,确定企业级地理数据库内要素类所使用的几何存储类型。

许可 许可:

修改企业级地理数据库中的要素类的空间索引仅对 ArcGIS for Desktop Advanced 和 Standard 可用。

请注意,为企业级地理数据库或数据库中的要素类构建新的空间索引是一项非常占用服务器资源的操作,因此在许多用户登录到服务器时,不应对大型要素类执行该操作。

要修改或重新创建要素类的空间索引,请执行以下操作:

步骤:
  1. 启动 ArcMap 并打开 Catalog 窗口,或启动 ArcCatalog。
  2. 在“目录”树中,连接到包含要修改空间索引的要素类的地理数据库。

    对于企业级地理数据库或数据库,必须以数据所有者身份进行连接才可修改索引。

  3. 右键单击要素类,然后单击属性
  4. 单击索引选项卡。
  5. 修改要素类空间索引的方式取决于要素类包含的空间数据类型。
    • 对于使用 SQL Server 中的 Geometry 存储的要素类,请单击重新计算,以便 ArcGIS 设置格网大小。
    • 对于使用 Oracle 中的 ST_Geometry 的要素类,请单击重新构建
    • 对于文件地理数据库中的要素类,PostgreSQL、DB2 或 Informix 中的要素类,或者使用二进制/SDO_Geometry 存储(Oracle 中)或 Geometry 存储(SQL Server 中)的要素类,可以单击删除来移除空间索引,然后单击创建来创建新的空间索引。重新创建的索引会反映当前数据。
    警告 警告:

    对于包含数百万条记录或更多记录的 Windows Azure SQL Database 中的要素类,请勿删除和重新创建其空间索引。如果 Windows Azure SQL Database 确定对包含数百万条记录的要素类创建空间索引会占用过多服务器资源,则会终止此操作。这会使您的要素类不具有空间索引。

5.性能提示

以下信息可帮助您提高和维护文件地理数据库的性能:

  • 创建新要素类时的默认分辨率是 0.1 毫米或按数据集的坐标系单位计算的等效值。x,y 分辨率的默认值几乎对所有情况都适用。如果数据没有这么精确,则创建要素类时可选择设置一个较大的 x,y 分辨率。以较大的 x,y 分辨率来存储坐标可降低存储要求并提高性能。这不仅适用于文件地理数据库,也适用于 ArcSDE 地理数据库。有关 x,y 分辨率的详细信息,请参阅要素类基础知识
  • 与其他任何数据源一样,只创建真正需要的属性索引,因为添加的每个索引都会稍微降低要素类或表的编辑速度。每次编辑某个创建了索引的属性时,ArcGIS 都必须更新此索引。如果需要经常编辑某个字段,尽可能避免为其创建索引。
  • 如果要在一个较大的数据集中添加、编辑或删除大量要素或记录,无论是通过编辑会话、地理处理工具还是 Catalog 目录树,在开始之前先删除空间索引以及任何受影响的属性索引,然后在完成更改后再重新添加这些索引,将会节省时间。

    每次添加、编辑或删除要素类或记录时,ArcGIS 都需要更新索引。如果只对较小的数据集进行更改或只对几条记录进行更改(如 100 万条记录中的 10 条),则 ArcGIS 在每次增量更改之后更新索引所耗费的时间可以忽略不计。但是,如果对大量记录进行更改(如 100 万条中的 300,000 条),为大量的增量更改更新索引所耗费的时间就要远远超过按开始前先删除索引,完成更改后再添加这些索引所消耗的时间。对于其他情况,决定是否要删除索引会涉及到取舍问题,并且可能不十分明显。同样,用 ArcObjects 编写加载程序或转换程序的开发人员每次要加载大量记录时,都应考虑使用只加载模式。只加载模式会暂停所有属性和空间索引的更新,直到要素被导入。导入所有要素之后,所有记录的索引(现有的以及新的)都会自动更新。可通过 IFeatureClassLoad 接口设置此模式。

  • 与个人地理数据库一样,如果频繁添加或删除数据,则应定期紧缩文件地数据库。而且,在执行了任何大规模更改后,也应对文件地理数据库执行一次紧缩操作。紧缩可重新整理磁盘上的数据存储,从而改善性能。有关详细信息,请参阅紧缩文件地理数据库和个人地理数据库
  • 与使用任何其他存储在文件系统中的文件类型时一样,请将计算机维持在经过良好维护和调整的状态下。如果使用的是 Windows,请偶尔运行一次磁盘碎片整理程序来维护整个文件系统的性能。磁盘碎片整理程序是 Windows 操作系统随附的工具;有关详细信息,请参阅操作系统的联机帮助。
  • 空间索引格网大小过小或过大会导致加载时间变长并降低空间搜索性能。ArcGIS 会在大多数操作结束时自动重新构建空间索引,以确保格网大小处于最优状态。需要您手动重新计算索引的情况极少。但是,在编辑会话中添加大量要素时,可能存在需要手动重新计算的情况。有关详细信息,请参阅设置空间索引


  • 2
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
当出现"arcgis空间索引不存在"的错误提示时,一般有两个可能的原因。 首先,可能是由于数据库或数据源中没有为数据集创建空间索引所导致的。在ArcGIS中,空间索引用于加快数据集的查询和空间分析操作速度,如果没有创建空间索引,系统无法对数据进行高效的空间查询。为了解决这个问题,我们可以在ArcGIS中使用相应的工具去创建空间索引。具体的操作步骤是:选择要创建空间索引的数据集,右键点击,选择“管理”或“管理索引”,然后在弹出菜单中选择“创建空间索引”。 另外,可能是由于数据库连接的问题所致。当我们使用ArcGIS连接到数据库时,需要确保数据库连接字符串的正确性。如果连接字符串中的参数或参数值有误,系统将无法建立与数据库之间的连接,导致无法访问或使用数据库中的空间索引。如果数据集所在的数据库连接字符串发生了变化或有误,我们需要在ArcGIS中重新配置正确的数据库连接字符串,然后重新连接数据库,以确保能够访问到正确的空间索引。 总之,当出现"arcgis空间索引不存在"的错误提示时,我们需要检查数据库中是否已为数据集创建了空间索引,如果没有,则需要使用ArcGIS工具创建;另外,还需要检查数据库连接字符串是否正确配置,如果有误则需要重新配置正确的数据库连接信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值