首批通过分布式安全可靠测评,为关键业务系统打造
空间数据类型概述
更新时间:2026-07-15 15:27:38
空间数据类型是用于存储和处理地理空间信息的数据类型。OceanBase 数据库 Oracle 模式支持空间数据类型 SDO_GEOMETRY。SDO_GEOMETRY 用来存储和处理几何图形数据的数据类型,它是一个复合数据类型,用于表示二维或三维的几何图形。
OceanBase 数据库 Oracle 模式当前版本仅支持 OGC(OpenGIS Consortium)定义的 7 种空间对象类型,包括 Point(点)、Linestring(线)、Polygon(多边形)、Multipoint(多点)、Multilinestring(多线)、Multipolygon(多个多边形)和 Collection(集合),它们由一组相连的点序列组成。在空间维度方面,支持二维和三维的空间数据。
注意
OceanBase 数据库当前版本不支持点之间通过圆弧连接。
SDO_GEOMETRY 特性
特性一:SDO_GEOMETRY 支持
您可以定义数据类型为 SDO_GEOMETRY,支持 PL/SQL 下操作 SDO_GEOMETRY 数据类型。
特性二:SDO_GEOMETRY 成员函数
SDO_GEOMETRY 数据类型提供了一些成员函数,用于构造、查询和格式转换空间对象。
构造函数:支持通过默认构造函数(
SDO_GEOMETRY())、Well-Known-Binary (WKB) 数据格式以及 Well-Known-Text (WKT) 数据格式创建SDO_GEOMETRY数据类型。查询:
SDO_GEOMETRY提供了一些成员函数用于查询空间对象的属性。例如,get_dims可以用来获取几何图形的维度信息,get_gtype可以获取几何图形的类型代码,st_isvalid可以判断几何图形是否有效。格式转换:
SDO_GEOMETRY支持将空间对象转换为其他格式。例如,get_wkb可以将SDO_GEOMETRY转换为 Well-Known-Binary (WKB) 格式,get_wkt可以将其转换为 Well-Known-Text (WKT) 格式,get_geojson可以将其转换为 JSON 格式。
更多有关 SDO_GEOMETRY 成员函数的详细信息,请参见 空间函数概述。
特性三:SDO_GEOMETRY 类型存储
支持定义表中字段为 SDO_GEOMETRY 类型,SDO_GEOMETRY 数据类型当作 BLOB 列进行存储。
特性四:SDO_GEOMETRY 属性访问
SDO_GEOMETRY 做为复杂数据类型,包含多个内在属性,支持在 SQL/PL 下访问其属性。
SDO_GEOMETRY 定义
CREATE TYPE sdo_geometry AS OBJECT (
SDO_GTYPE NUMBER,
SDO_SRID NUMBER,
SDO_POINT SDO_POINT_TYPE,
SDO_ELEM_INFO SDO_ELEM_INFO_ARRAY,
SDO_ORDINATES SDO_ORDINATE_ARRAY);
参数解释
SDO_GTYPE
SDO_GTYPE 表示几何图形(Geometry)的类型代码,是一个 NUMBER 类型的值,格式为:DLTT。
DLTT 解释如下:
D:表示维度,它的取值可以是 2 或者 3,表示二维或者三维空间。L:表示 Linear Referencing System,对于二维空间对象,L的取值为 0。说明
OceanBase 数据库当前版本
L暂不支持其他取值。TT:表示具体的几何类型(Geometry Type),取值范围从 01 到 07。
| Value | Geometry Type | Description |
|---|---|---|
| DL01 | POINT | 点。 |
| DL02 | LINE | 直线段。 |
| DL03 | POLYGON | 多边形。 |
| DL04 | COLLECTION | 空间对象集合,集合中可以包含不同的空间对象。 |
| DL05 | MULTIPOINT | 包含一个或者多个点的空间对象。 |
| DL06 | MULTILINE | 包含一条或者多条线段的空间对象。OceanBase 数据库当前版本只支持直线段。 |
| DL07 | MULTIPOLYGON | 包含一个或者多个多边形的空间对象。 |
SDO_SRID
SDO_SRID 表示几何图形的空间参考标识符,是一个 NUMBER 类型的值。它确定了几何图形的坐标系和投影方式。
说明
SDO_SRID 与 MySQL 模式的 SRID 含义一样,表示空间坐标系的 ID。更多关于 MySQL 模式空间参考系统的信息,请参见 空间参考系统 (SRS)。
SDO_POINT
SDO_POINT 表示几何图形的点坐标。它包含了几何图形的 X、Y 和可选的 Z 坐标。
SDO_POINT 是 SDO_GEOMETRY 对象的属性之一,用于存储 Point 类型的几何图形的坐标值。当 SDO_ELEM_INFO 和 SDO_ORDINATES 属性均为 NULL,且 SDO_POINT 属性保存有效值时,该对象被认为是一个 Point 类型的几何图形。此时,SDO_POINT 中存储了 Point 的具体坐标值。如果 SDO_ELEM_INFO 和 SDO_ORDINATES 属性为非空,则 SDO_POINT 中的内容会被忽略,而通过 SDO_ELEM_INFO 和 SDO_ORDINATES 存储几何图形的具体坐标。
SDO_POINT_TYPE 对象定义如下:
CREATE TYPE sdo_point_type AS OBJECT (
X NUMBER,
Y NUMBER,
Z NUMBER
);
SDO_ELEM_INFO
SDO_ELEM_INFO 表示几何图形的几何元素信息。SDO_ELEM_INFO 是一个由 NUMBER 类型组成的变长数组,变长数组可以分为多个 3 元组,用来解释 SDO_ORDINATES 属性;3 元组包括:
SDO_STARTING_OFFSET:表示该对象第一个坐标信息在SDO_ORDINATES数组中的起始位置,从 1 开始。SDO_ETYPE:表示对象类型。其中 1,2,1003(表示多边形外环,必须是逆时针),2003(表示多边形内环,必须是顺时针)表示单一对象,只需要 1 个SDO_ELEM_INFO中 3 元组对象就可以定义。SDO_INTERPRETATION:对于单一对象,该属性表示该对象的连接方式及其他特性。
SDO_ELEM_INFO 取值和语义:
| SDO_ETYPE | SDO_INTERPRETATION | Meaning |
|---|---|---|
| 1 | 1 | 点类型(Point type)。 |
| 1 | n > 1 | Point cluster with n points。对于 Collection 中的 Multipoint,会展开成这种类型。 |
| 2 | 1 | 直线连接的线段。 |
| 1003 or 2003 | 1 | 直线连接的多边形,起点和终点需要是一样的;SDO_ETYPE 中第 1 位为 1 表示外环,2 表示内环。 |
| 1003 or 2003 | 3 | 矩形,对普通多边形的优化。只需要记录对角线上两个点的坐标(左下和右上)。 |
SDO_ELEM_INFO_ARRAY 示例:
SDO_ELEM_INFO_ARRAY(1, 1003, 1)
上述示例中,第一个参数的 1 表示从 SDO_ORDINATE_ARRAY 第一个成员开始,第二个参数的 1003 表示是一个多边形外环,第三个参数的 1 表示直线连接。
SDO_ORDINATES
SDO_ORDINATES 表示几何图形的具体坐标值,它是一个由 NUMBER 类型组成的变长数组,长度上限为 1048576。SDO_ORDINATES 数组用于存储空间对象的坐标值,并与 SDO_ELEM_INFO 参数配合使用,以实现几何图形的自解释。
SDO_ORDINATE_ARRAY 示例:
SDO_ORDINATE_ARRAY(10,105, 15,105, 20,110, 10,110, 10,105)
上述示例中,坐标数组表示一个简单的多边形。它包含了五个顶点的坐标值,每个顶点由 X 和 Y 坐标组成,具体为:(10, 105)、(15, 105)、(20, 110)、(10, 110) 和 (10, 105)。这些坐标值按照顺序排列,描述了一个简单的多边形图形。通过配合 SDO_ELEM_INFO 参数提供的几何元素信息,可以解释这些坐标值,确定多边形的边界。
说明
上述示例中,每组坐标值都是一个二维平面上的点,表示几何图形在相应维度上的位置。在这个示例中,只涉及 X 和 Y 坐标,而 Z 坐标未给定,所以在坐标数组中没有 Z 坐标值。
示例
创建一个二维点几何图形对象,其类型代码为 2001,坐标为 X=10,Y=20,Z 坐标为 NULL。没有指定空间参考标识符 SRID、几何元素信息 SDO_ELEM_INFO 和具体坐标值 SDO_ORDINATE_ARRAY。
SDO_GEOMETRY(2001, NULL, SDO_POINT_TYPE(10, 20, NULL), NULL, NULL)
相关文档
- 更多有关
SDO_GEOMETRY成员函数的介绍信息,请参见 空间函数概述。 - 更多有关
SDO_GEOMETRY属性访问的信息,请参见 SDO_GEOMETRY 属性访问。