8.8. 几何类型

几何数据类型表示二维空间对象。 Table 8.20显示了 PostgreSQL 中可用的几何类型。

表 8.20. 几何类型

NameStorage SizeDescriptionRepresentation
point16 bytes在飞机上点(x,y)
line32 bytesInfinite line{A,B,C}
lseg32 bytes有限线段((x1,y1),(x2,y2))
box32 bytesRectangular box((x1,y1),(x2,y2))
path16+16n bytes封闭路径(类似于多边形)((x1,y1),...)
path16+16n bytesOpen path[(x1,y1),...]
polygon40+16n bytes多边形(类似于封闭路径)((x1,y1),...)
circle24 bytesCircle\ <(x,y),r>(中心点和半径)

一组丰富的函数和运算符可用于执行各种几何运算,例如缩放,平移,旋转和确定相交。它们在Section 9.11中说明。

8.8.1. Points

点是几何类型的基本二维构建基块。使用以下两种语法之一指定类型point的值:

( x , y )
  x , y

其中* x y *是各自的坐标,以浮点数表示。

使用第一种语法输出点。

8.8.2. Lines

线由线性方程* A * x * B * y * C * = 0 表示,其中* A B *都不都是零。 line类型的值以以下形式 Importing 和输出:

{ A, B, C }

或者,可以使用以下任何形式的 Importing:

[ ( x1 , y1 ) , ( x2 , y2 ) ]
( ( x1 , y1 ) , ( x2 , y2 ) )
  ( x1 , y1 ) , ( x2 , y2 )
    x1 , y1   ,   x2 , y2

其中(x1,y1)(x2,y2)是线上的两个不同点。

8 .8.3. 线段

线段由成对的点对点表示。使用以下任何一种语法来指定类型lseg的值:

[ ( x1 , y1 ) , ( x2 , y2 ) ]
( ( x1 , y1 ) , ( x2 , y2 ) )
  ( x1 , y1 ) , ( x2 , y2 )
    x1 , y1   ,   x2 , y2

其中(x1,y1)(x2,y2)是线段的 endpoints。

使用第一种语法输出线段。

8.8.4. Boxes

框由与框的对角相对的点对表示。使用以下任何一种语法来指定类型box的值:

( ( x1 , y1 ) , ( x2 , y2 ) )
  ( x1 , y1 ) , ( x2 , y2 )
    x1 , y1   ,   x2 , y2

其中(x1,y1)(x2,y2)是盒子的两个相对角。

使用第二种语法输出框。

可以在 Importing 中提供任意两个相对的角,但是将根据需要对值进行重新排序以按 Sequences 存储右上角和左下角。

8.8.5. Paths

路径由连接点列表表示。路径可以是* open ,其中列表中的第一个和最后一个点被视为未连接;也可以是 closed *,其中第一个和最后一个点被视为已连接。

使用以下任何一种语法来指定类型path的值:

[ ( x1 , y1 ) , ... , ( xn , yn ) ]
( ( x1 , y1 ) , ... , ( xn , yn ) )
  ( x1 , y1 ) , ... , ( xn , yn )
  ( x1 , y1   , ... ,   xn , yn )
    x1 , y1   , ... ,   xn , yn

这些点是组成路径的线段的 endpoints。方括号([])表示开放路径,括号(())表示封闭路径。当省略最外面的括号时(如第三到第五种语法),则假定为封闭路径。

视情况使用第一或第二语法输出路径。

8.8.6. Polygons

多边形由点列表(多边形的顶点)表示。多边形与封闭路径非常相似,但是它们的存储方式不同,并且具有自己的一组支持例程。

使用以下任何一种语法来指定类型polygon的值:

( ( x1 , y1 ) , ... , ( xn , yn ) )
  ( x1 , y1 ) , ... , ( xn , yn )
  ( x1 , y1   , ... ,   xn , yn )
    x1 , y1   , ... ,   xn , yn

这些点是组成多边形边界的线段的 endpoints。

使用第一种语法输出多边形。

8.8.7. Circles

圆由中心点和半径表示。使用以下任何一种语法来指定类型circle的值:

< ( x , y ) , r >
( ( x , y ) , r )
  ( x , y ) , r
    x , y   , r

其中(x,y)是中心点,* r *是圆的半径。

使用第一种语法输出圆。