什么是 Oracle Spatial?
Oracle Spatial 是 Oracle 数据库管理系统 (DBMS) 的一个扩展模块,为 Oracle 新增了一种空间类型和多项空间查询功能。可以通过 Oracle 提供的两个主要选项来使用此扩展模块。
- Oracle Spatial 是 Oracle 数据库企业版中的可选功能。除了提供 SDO_Geometry 类型之外,Oracle Spatial 还可提供多项附加地理空间功能。
- Oracle Locator 提供了 Oracle Spatial 功能的子集。它作为一项标准功能包括在 Oracle 数据库标准版和企业版中。除了其他功能以外,Oracle Locator 还为该内容提供了 Oracle Spatial 几何类型(称为 SDO_Geometry)和 SQL API。
Oracle Spatial 和包含 ArcGIS 在内的许多地理信息系统具有重复的功能。大多数 ArcGIS 用户在应用 Oracle Spatial 时,主要是将其用作在 Oracle DBMS 中存储和访问地理数据库的可选机制。实际上,ArcGIS 用户每次在 Oracle 地理数据库中新建要素类或栅格数据集时都可以对存储要素或栅格几何的方式进行选择 - 可以使用地理数据库选项,也可以使用 Oracle Spatial 数据存储选项。
ArcSDE 支持 Oracle Spatial 的对象关系模型,并将其作为一种用于存储空间数据的可选方法。确切地说,可使用 Oracle Spatial 或 Oracle Locator 几何来存储和管理 ArcSDE 地理数据库中数据集的要素和栅格内容。
Oracle Spatial 数据存储概述
Oracle Spatial 可提供空间几何类型 (MDSYS.SDO_GEOMETRY)、空间元数据模式、索引建立方法、功能和实现规则,具体说明如下:
Oracle Locator 是 Oracle Spatial 的子集。Oracle Locator 包括 SDO_GEOMETRY 数据类型和一些 Oracle Spatial 所提供的功能。可以将 Oracle Locator 与 ArcSDE 结合使用。通过参阅 Oracle 文档,可以详细了解 Oracle Spatial 与 Oracle Locator 之间的差异。在本主题中涉及的“Oracle Spatial”均可用“Oracle Locator”来代替。
- SDO_GEOMETRY
使用 Oracle 的可扩展对象关系型系统可实现 Oracle Spatial 几何类型 SDO_GEORASTER。SDO_GEOMETRY 类型可存储几何信息,包括几何类型、空间参考 ID、插值类型(直线与曲线)及坐标值。ArcSDE 地理数据库中的 SDO_GEOMETRY 类型支持单个点、多部分 (multipart) 点、线和面几何。根据 OpenGIS 简单要素规范中的定义,可以将几何描述为在坐标之间进行线性插值。此外,还可以通过圆曲线或结合使用两种插值方法来构造几何。应用程序负责通过 Oracle 的对象关系 SQL 接口正确执行对 SDO_GEOMETRY 类型内容的插入、更新及提取。应用程序还要确保所有几何内容均符合 Oracle Spatial 文档中定义的规则。Oracle 可提供插入几何后执行的几何验证例程。此外,从 Oracle 11.1.0.7 开始,将在索引插入时验证几何。
注意:Oracle 的几何验证例程所使用的规则与 ArcSDE 几何验证规则并不完全相同。但 ArcSDE 会写入满足 Oracle 验证规则的 SDO_GEOMETRY。
- 元数据模式
有关每个 SDO_GEOMETRY 列的信息都应记录到 Oracle Spatial 元数据模式中,但 Oracle Spatial 不会自动执行此操作。(Oracle Spatial 元数据模式作为每个模式的 USER_SDO_GEOM_METADATA 视图显示。)创建 SDO_GEOMETRY 列的软件必须为这些列插入元数据。ArcSDE 会为其创建的任何 SDO_GEOMETRY 要素类执行此操作。元数据包含空间列名称、所属表和所有者的名称、Oracle 空间参考标识符 (SRID)、维数、每个维度的范围及其坐标容差。
- 空间索引
使用空间索引可以根据要素的几何位置快速访问要素。对于 SDO_GEOMETRY,创建 R 树空间索引通常是最有效和最便捷的方式,而且它是 Oracle 推荐在大多数情况下使用的索引类型。可以借助 Oracle Spatial 提供的 Spatial Index Advisor 工具来确定给定表的最佳空间索引类型。此外,还可以参阅《Oracle Spatial 用户指南和参考》详细了解支持的空间索引类型、各种类型的创建方式以及不同空间索引方法的优势和局限性。
- 空间功能
Oracle Spatial 对 SQL 进行了扩展,提供了用于初级过滤和二级过滤的空间搜索功能。在 SQL 查询中包括 SDO_FILTER 可利用空间索引执行初步空间搜索。空间谓词(如 SDO_RELATE 和 SDO_CONTAINS)会返回 SDO_GEOMETRY 对象对的二级关系。Oracle Spatial 具有可更改 SDO_GEOMETRY 值的形式的空间变换函数。例如,使用 SDO_BUFFER 函数计算新 SDO_GEOMETRY 对象的坐标时,会将该对象视为在原始几何给定距离范围内的缓冲多边形。其他空间变换函数包括 SDO_DIFFERENCE 和 SDO_INTERSECTION。
- 坐标参考和 SRID
Oracle Spatial 通过使用 SRID 值提供对大量预定义坐标参照系的访问。存储在 SDO_GEOMETRY 对象中的 SRID 值为存储在该对象中的几何指定了坐标参考。如果 SDO_GEOMETRY 对象中的 SRID 值不为 NULL,则此值即为包含每个 SRID 详细信息的表的外键。该表名为 MDSYS.CS_SRS。SDO_TRANSFORM 函数使用空间参考 ID 建立坐标参考变换。ArcSDE 在创建 ArcSDE 空间参考时也会使用此信息。