创建带有 SDO_GEOMETRY 几何存储的要素类时会发生什么?

在地理数据库中创建带有 SDO_GEOMETRY 存储的要素类时会发生以下情况:

创建了具有 SDO_GEOMETRY 列的表。

如果在 Oracle 的地理数据库中创建要素类时指定已将 GEOMETRY_STORAGE 参数设置为 SDO_GEOMETRY 的 DBTUNE 配置关键字,则 ArcGIS 针对 shape 字段使用 SDO_GEOMETRY 列。

以下示例要素类具有唯一标识符 (ObjectID) 字段、名称和人口属性以及 SDO_GEOMETRY shape 列。

名称

数据类型

是否允许为空

NAME

VARCHAR2(32)*

POPULATION

NUMBER(11)

SHAPE

MDSYS.SDO_GEOMETRY

OBJECTID

NUMBER(38)

非空

注注:

*如果使用 Unicode 字符串,则使用 NVARCHAR2(32),而非 VARCHAR2(32)。

在 SDO_GEOMETRY 列上创建空间索引。

默认情况下,ArcGIS 会在要素类的 SDO_GEOMETRY 列上创建 R 树空间索引。ArcGIS 使用 Oracle 的 SDO_FILTER 函数在要素类上执行空间查询;因此,空间查询需要空间索引。

每次在 LOAD_ONLY_IO 和 NORMAL_IO 模式之间切换要素类时,ArcGIS 就会自动删除并重新创建由 ArcGIS 创建的 Oracle 空间索引。当 ArcGIS 将要素类切换到 LOAD_ONLY_IO 模式时,由 Oracle Spatial Index Advisor 应用程序定义或使用 SQL 创建的空间索引不会被删除。

将一条记录添加到 Oracle Spatial 元数据视图。

ArcGIS 创建包含 SDO_GEOMETRY 列的要素类时,所需的 Oracle Spatial 元数据记录会添加到 USER_SDO_GEOM_METADATA 视图中。此元数据包括表名称、SDO_GEOMETRY 列名称、空间参考 ID 和坐标维度信息。

使用 ArcGIS 删除要素类时,也会删除 Oracle Spatial 元数据。

指定坐标维度。

可以 2D (x,y)、带有测量值 (x,y,m) 的 2D、3D (x,y,z) 或带有测量值 (x,y,z,m) 的 3D 形式创建 ArcGIS 几何。创建具有 SDO_GEOMETRY 列的新要素类时,ArcGIS 会将 Oracle Spatial 维度信息置于元数据视图的 DIMINFO 列中。

填充 SDO_GEOMETRY 列。

在地理数据库中存储几何时,ArcGIS 会从名为 SE_SHAPE 的 API 对象中填充 SDO_GEOMETRY 值。SE_SHAPE 对象可以包含简单几何以及可能包括高程、测量值、CAD 数据、注记和表面片的复杂几何。SDO_GEOMETRY 数据类型支持这些几何属性的一部分。由于 SDO_GEOMETRY 和 SE_SHAPE 对象中的各个组成部分没有一对一映射关系,因此在将数据存储到 Oracle Spatial 表中时,ArcGIS 会遵守一组规则:

注注:

ArcGIS 不支持 SDO_GEOMETRY 对象中的异类几何集合,而且 ArcGIS 不会在 SDO_GEOMETRY 对象中编码 SDO_ETYPE 0 元素。SDO_ETYPE 0 元素是特定于应用程序的。

如果存储 CAD 和注记属性,则会向业务表中添加一个附加列。

SDO_GEOMETRY 类型无法存储 ArcGIS 存储必定支持的所有类型的几何元素。当需要存储这些元素时(由创建要素类时所指定的几何类型标记决定),ArcGIS 会向业务表中添加名为 SE_ANNO_CAD_DATA 的列。以本主题第一部分中的要素类为例,业务表现在将包含以下内容:

名称

数据类型

是否允许为空

NAME

VARCHAR2(32)*

POPULATION

NUMBER(11)

SHAPE

MDSYS.SDO_GEOMETRY

SE_ANNO_CAD_DATA

BLOB

OBJECTID

NUMBER(38)

非空

注注:

*如果使用 Unicode 字符串,则使用 NVARCHAR2(32),而非 VARCHAR2(32)。

每当 ArcGIS 检测到数据源中含有 CAD 数据时,ArcGIS 就会将 CAD 数据的简单几何表示写入 SDO_GEOMETRY 值中并将未修改的 CAD 数据写入 SE_ANNO_CAD_DATA 值中。如果数据源中不含 CAD 数据,ArcGIS 会将 SE_ANNO_CAD_DATA 值设置为 NULL。SE_ANNO_CAD_DATA 属性包含来自大量 ArcGIS 组件的数据:

通过 Oracle Spatial 过滤函数对要素类执行空间查询。

ArcGIS 通过 Oracle Spatial SDO_FILTER 函数执行初级空间查询。ArcGIS 会基于应用程序所请求的空间关系执行 SDO_GEOMETRY 的二级过滤。

应用程序也可以将 Oracle Spatial 初级过滤和二级过滤函数包括在提供给 ArcGIS 的 SQL WHERE 子句中。在 WHERE 子句中使用空间过滤时,应用程序可以将空间查询分发到数据库服务器、ArcSDE 应用程序服务器和应用程序自身。

5/10/2014