---
title: "空间数据类型概述 - OceanBase 数据库 V4.6.0 | OceanBase 文档中心"
description: 空间数据类型概述 空间数据类型是用于存储和处理地理空间信息的数据类型。OceanBase 数据库 Oracle 模式支持空间数据类型 SDO_GEOMETRY 。 SDO_GEOMETRY 用来存储和处理几何图形数据的数据类型，它是一个复合数据类型，用于表示二维或三维的几何图形。 OceanBase 数据库 Orac…
---
切换语言

- 中文站 - 简体中文
- International - English
- 日本站 - 日本語

文档反馈![](https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*P8CuR4UJ_FkAAAAAAAAAAAAADiGDAQ/original) OceanBase 数据库分布式版 - V 4.6.0

# 空间数据类型概述

更新时间：2026-07-15 15:27:38

[编辑](https://github.com/oceanbase/oceanbase-doc/edit/V4.6.0/zh-CN/700.reference/500.sql-reference/100.sql-syntax/300.common-tenant-of-oracle-mode/300.basic-elements-of-oracle-mode/100.built-in-data-types-of-oracle-mode/1200.spatial-data-type-of-oracle-mode/100.spatial-data-type-overview-of-oracle-mode.md)  

空间数据类型是用于存储和处理地理空间信息的数据类型。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` 成员函数的详细信息，请参见 [空间函数概述](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000005688118)。

### 特性三：SDO_GEOMETRY 类型存储

支持定义表中字段为 `SDO_GEOMETRY` 类型，`SDO_GEOMETRY` 数据类型当作 `BLOB` 列进行存储。

### 特性四：SDO_GEOMETRY 属性访问

`SDO_GEOMETRY` 做为复杂数据类型，包含多个内在属性，支持在 SQL/PL 下访问其属性。

## SDO_GEOMETRY 定义

```sql
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)](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000005688093)。

#### 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` 对象定义如下：**

```sql
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 示例：**

```sql
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 示例：**

```sql
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`。

```shell
SDO_GEOMETRY(2001, NULL, SDO_POINT_TYPE(10, 20, NULL), NULL, NULL)

```

## 相关文档

- 更多有关 `SDO_GEOMETRY` 成员函数的介绍信息，请参见 [空间函数概述](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000005688118)。
 - 更多有关 `SDO_GEOMETRY` 属性访问的信息，请参见 [SDO_GEOMETRY 属性访问](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000005688297)。

 上一篇 下一篇 ![有帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*y6ocSqN8cqsAAAAAAAAAAAAAARQnAQ)![无帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*BG9IQJyLHF8AAAAAAAAAAAAAARQnAQ)![反馈](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*eTWdQKCRKHwAAAAAAAAAAAAAARQnAQ)[AI](https://www.oceanbase.com/obi) 咨询热线
