
# 几何类型
GaussDB支持的几何类型请参见[表1]。最基本的类型：点，是其它类型的基础。
 表1几何类型 
| 名称      | 存储空间     | 说明           | 表现形式                |
|:---|:---|:---|:---|
| point   | 16字节     | 平面中的点        | (x,y)               |
| lseg    | 32字节     | （有限）线段       | ((x1,y1),(x2,y2))   |
| box     | 32字节     | 矩形           | ((x1,y1),(x2,y2))   |
| path    | 16+16n字节 | 闭合路径（与多边形相似） | ((x1,y1),...)       |
| path    | 16+16n字节 | 开放路径         | \[(x1,y1),...\]     |
| polygon | 40+16n字节 | 多边形（与闭合路径相似） | ((x1,y1),...)       |
| circle  | 24 字节    | 圆            | \<(x,y),r\> （圆心和半径） |
   
GaussDB提供了一系列的函数和操作符用来进行各种几何计算，如拉伸、转换、旋转、计算相交等。详细信息请参考[几何函数和操作符](https://support.huaweicloud.com/centralized-devg-v3-gaussdb/gaussdb-42-0362.html#ZH-CN_TOPIC_0000002235339189)。
#### 点
点是几何类型的基本二维构造单位。用下面语法描述point的数值：
```
( x , y )
x , y
```
x和y是用浮点数表示的点的坐标，点的数值类型为float8类型。
点输出使用第一种语法。
示例：
```
gaussdb=# select point(1.1, 2.2);
   point
-----------
 (1.1,2.2)
(1 row)
```
#### 线段
线段（lseg）是用一对点来代表的。用下面的语法描述lseg的数值：
```
[ ( x1 , y1 ) , ( x2 , y2 ) ]
( ( x1 , y1 ) , ( x2 , y2 ) )
( x1 , y1 ) , ( x2 , y2 )
x1 , y1   ,   x2 , y2
```
(x1,y1)和(x2,y2)表示线段的端点，点的数值类型为float8类型。
线段输出使用第一种语法。
示例：
```
gaussdb=# select lseg(point(1.1, 2.2), point(3.3, 4.4));
         lseg
-----------------------
 [(1.1,2.2),(3.3,4.4)]
(1 row)
```
#### 矩形
矩形是用一对对角点来表示的。用下面的语法描述box的值：
```
( ( x1 , y1 ) , ( x2 , y2 ) )
( x1 , y1 ) , ( x2 , y2 )
x1 , y1   ,   x2 , y2
```
(x1,y1)和(x2,y2)表示矩形的一对对角点，点的数值类型为float8类型。
矩形的输出使用第二种语法。
任何两个对角都可以出现在输入中，但按照该种顺序，右上角和左下角的值会被重新排序以存储。
示例：
```
gaussdb=# select box(point(1.1, 2.2), point(3.3, 4.4));
         box
---------------------
 (3.3,4.4),(1.1,2.2)
(1 row)
```
#### 路径
路径由一系列连接的点组成。路径可能是开放的，也就是认为列表中第一个点和最后一个点没有连接，也可能是闭合的，这时认为第一个和最后一个点连接起来。
用下面的语法描述path的数值：
```
[ ( x1 , y1 ) , ... , ( xn , yn ) ]
( ( x1 , y1 ) , ... , ( xn , yn ) )
( x1 , y1 ) , ... , ( xn , yn )
( x1 , y1   , ... ,   xn , yn )
x1 , y1   , ... ,   xn , yn
```
点表示组成路径的线段的端点，点的数值类型为float8类型。方括号（\[\]）表明一个开放的路径，圆括号（()）表明一个闭合的路径。当最外层的括号被省略，如在第三至第五语法，会假定一个封闭的路径。
路径的输出使用第一种或第二种语法输出。
示例：
```
gaussdb=# select path(polygon '((0,0),(1,1),(2,0))');
        path
---------------------
 ((0,0),(1,1),(2,0))
(1 row)
```
#### 多边形
多边形由一系列点代表（多边形的顶点）。多边形可以认为与闭合路径一样，但是存储方式不一样而且有自己的一套支持函数。
用下面的语法描述polygon的数值：
```
( ( x1 , y1 ) , ... , ( xn , yn ) )
( x1 , y1 ) , ... , ( xn , yn )
( x1 , y1   , ... ,   xn , yn )
x1 , y1   , ... ,   xn , yn
```
点表示多边形的顶点，点的数值类型为float8类型。
多边形输出使用第一种语法。
示例：
```
gaussdb=# select polygon(box '((0,0),(1,1))');
          polygon
---------------------------
 ((0,0),(0,1),(1,1),(1,0))
(1 row)
```
#### 圆
圆由一个圆心和半径标识。用下面的格式描述circle的数值：
```
< ( x , y ) , r >
( ( x , y ) , r )
( x , y ) , r
x , y   , r
```
(x,y)表示圆心，r表示半径，点的数值类型为float8类型。
圆的输出用第一种格式。
示例：
```
gaussdb=# select circle(point(0,0),1);
  circle
-----------
 <(0,0),1>
(1 row)
```
