# 几何类型
GaussDB支持的几何类型请参见[表1]。最基本的类型是点（point），点是其它几何类型的基础。
 表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/distributed-ref-v10-gaussdb/gaussdb-08-0048.html)。
#### 点
点（point）是几何类型的基本二维构造单位。用以下语法描述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）是用一对对角点来表示的。用以下语法描述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）由一系列连接的点组成。可分为开放路径和闭合路径，开放路径表示路径的首尾点不连接，而闭合路径则认为首尾点存在连接关系。
用下面的语法描述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）由一系列点表示（多边形的顶点）。多边形可以认为是与闭合路径一样，但存储方式不一样，并且多边形有自己的一套支持函数。
用下面的语法描述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）由一个圆心和半径表示。用下面的格式描述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)
```
