PostGIS几何类型&操作符&基本函数整理

2018/11 24 14:11

 

目录

一、几何类型

1、点(point)

2、线(line)

3、线段(lseg)

4、矩形(box)

5、路径(path)

6、多边形(polygon)

7、圆(circle)

示例:

二、几何操作符

三、几何函数

四、几何类型转换函数


 

PostgreSQL支持的几何类型如下表:

名字

存储空间

描述

表现形式

point

16字节

平面上的点

(x,y)

line

32字节

直线

{A,B,C}

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> 

(中心点与半径)

 

详细说明:

1、点(point)

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

(x,y)
   x,y

其中xy是相应的坐标,作为浮点数。

使用第一种语法输出点。

 

2、线(line)

线由线性方程Ax + By + C= 0表示,其中AB不都为零。类型的值 line以下列形式输入和输出:

{ A,B,C}

或者,可以使用以下任何形式进行输入:

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

其中(x1y1)和(x2y2)是线上的两个不同点。

 

3、线段(lseg)

线段由成对的点表示,这些点是段的端点。lseg类型的值使用下列语法中的任何一种来指定:

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

其中(x1y1)和(x2y2)是线段的端点。

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

 

4、矩形(box)

矩形是由矩形的对角线的点对来表示的。box 使用下列语法中的任何一种来指定类型的值:

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

其中(x1y1)和(x2y2)是矩形的任意两个相对的角。

使用第二种语法输出矩形。

可以在输入时提供任两个相对的角,但是值将根据需要重新排序,以便按顺序存储右上角和左下角。

所以建议在输入时提供右上角和左下角。

 

5、路径(path)

路径由连接点列表表示。路径可以是开放的(其中列表中的第一和最后一个点被认为是未连接的),或者是闭合的(其中第一和最后一个点被认为是连接的)。

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

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

其中点是包括路径的线段的端点。方括号([])表示开放路径,而圆括号(())表示闭合路径。当省略最外面的括号时,如在第三到第五语法中,假设闭合路径。

其中点是包括路径的线段的端点。方括号([])表示开放路径,而小括号(())表示闭合路径。当最外括号被省略时,如在第三到第五语法中,表示默认为一条闭合路径。

根据需要,建议使用第一或第二语法输出路径。

 

6、多边形(polygon)

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

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

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

其中点是包括多边形边界的线段的端点。

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

 

7、圆(circle)

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

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

其中(xy)是中心点,r是圆的半径。

建议使用第一种语法输出圆。

 

示例:

test=# select point'(1,1)';
 point 
-------
 (1,1)
(1 row)

test=# select line'{1,1,1}';
  line   
---------
 {1,1,1}
(1 row)

test=# select lseg'(1,1),(2,2)';
     lseg      
---------------
 [(1,1),(2,2)]
(1 row)

test=# select box'(1,1),(2,2)';
     box     
-------------
 (2,2),(1,1)
(1 row)

test=# select path'(1,1),(2,2),(2,1)';
        path         
---------------------
 ((1,1),(2,2),(2,1))
(1 row)

test=# select path'[(1,1),(2,2),(2,1)]';
        path         
---------------------
 [(1,1),(2,2),(2,1)]
(1 row)

test=# select polygon'((1,1),(2,2),(2,1))';
       polygon       
---------------------
 ((1,1),(2,2),(2,1))
(1 row)

test=# select circle'<(0,0),1>';
  circle   
-----------
 <(0,0),1>
(1 row)

 

二、几何操作符

操作符

描述

示例

结果

+

平移

select box ‘((0,0),(1,1))’ + point ‘(2.0,0)’;

(3,1),(2,0)

平移

select box ‘((0,0),(1,1))’ – point ‘(2.0,0)’;

(-1,1),(-2,0)

*

伸缩/旋转

select box ‘((0,0),(1,1))’ * point ‘(2.0,0)’;

(2,2),(0,0)

/

伸缩/旋转

select box ‘((0,0),(2,2))’ / point ‘(2.0,0)’;

(1,1),(0,0)

#

交点或者交面

select box'((1,-1),(-1,1))’ # box'((1,1),(-1,-1))’;

(1,1),(-1,-1)

#

pathpolygon的顶点数

select #path'((1,1),(2,2),(2,1))’;

3

@-@

长度或周长

select @-@ path'((1,1),(2,2),(2,1))’;

3.41421356237309

@@

中心

select @@ circle'<(0,0),1>’;

(0,0)

##

第一个操作数和第二个操作数的最近点

select point ‘(0,0)’ ## lseg ‘((2,0),(0,2))’;

(1,1)

<->

间距

select circle ‘<(0,0),1>’ <-> circle ‘<(5,0),1>’;

3

&&

是否有重叠

select box ‘((0,0),(1,1))’ && box ‘((0,0),(2,2))’;

t

<<

是否严格在左

select circle ‘((0,0),1)’ << circle ‘((5,0),1)’;

t

>>

是否严格在右

select circle ‘((0,0),1)’ >> circle ‘((5,0),1)’;

f

&<

是否没有延伸到右边

select box ‘((0,0),(1,1))’ &< box ‘((0,0),(2,2))’;

t

&>

是否没有延伸到左边

select box ‘((0,0),(3,3))’ &> box ‘((0,0),(2,2))’;

t

<<|

是否严格在下

select box ‘((0,0),(3,3))’ <<| box ‘((3,4),(5,5))’;

t

|>>

是否严格在上

select box ‘((3,4),(5,5))’ |>> box ‘((0,0),(3,3))’;

t

&<|

是否没有延伸到上面

select box ‘((0,0),(1,1))’ &<| box ‘((0,0),(2,2))’;

t

|&>

是否没有延伸到下面

select box ‘((0,0),(3,3))’ |&> box ‘((0,0),(2,2))’;

t

<^

是否低于(允许接触)

select box ‘((0,0),(3,3))’ <^ box ‘((3,3),(4,4))’;

t

>^

是否高于(允许接触)

select box ‘((0,0),(3,3))’ >^ box ‘((3,3),(4,4))’;

f

?#

是否相交

select lseg ‘((-1,0),(1,0))’ ?# box ‘((-2,-2),(2,2))’;

t

?-

是否水平对齐

select ?- lseg ‘((-1,1),(1,1))’;

t

?-

两边图形是否水平对齐

select point ‘(1,0)’ ?- point ‘(0,0)’;

t

?|

是否竖直对齐

select ?| lseg ‘((-1,0),(1,0))’;

f

?|

两边图形是否竖直对齐

select point ‘(0,1)’ ?| point ‘(0,0)’;

t

?-|

是否垂直

select lseg ‘((0,0),(0,1))’ ?-| lseg ‘((0,0),(1,0))’;

t

?||

是否平行

select lseg ‘((-1,0),(1,0))’ ?|| lseg ‘((-1,2),(1,2))’;

t

@>

是否包含

select circle ‘((0,0),2)’ @> point ‘(1,1)’;

t

<@

是否包含于或在图形上

select point ‘(1,1)’ <@ circle ‘((0,0),2)’;

t

~=

是否相同

select polygon ‘((0,0),(1,1))’ ~= polygon ‘((1,1),(0,0))’;

t

 

三、几何函数

函数

返回值类型

描述

示例

结果

area(object)

double precision

面积

select area(circle'((0,0),1)’);

3.14159265358979

center(object)

point

中心

select center(box'(0,0),(1,1)’);

(0.5,0.5)

diameter(circle)

double precision

直径

select diameter(circle ‘((0,0),2.0)’);

4

height(box)

double precision

矩形竖直高度

select height(box ‘((0,0),(1,1))’);

1

isclosed(path)

boolean

是否为闭合路径

select isclosed(path ‘((0,0),(1,1),(2,0))’);

t

isopen(path)

boolean

是否为开放路径

select isopen(path ‘[(0,0),(1,1),(2,0)]’);

t

length(object)

double precision

长度

select length(path ‘((-1,0),(1,0))’);

4

npoints(path)

int

path中的顶点数

select npoints(path ‘[(0,0),(1,1),(2,0)]’);

3

npoints(polygon)

int

多边形的顶点数

select npoints(polygon ‘((1,1),(0,0))’);

2

pclose(path)

path

将开放path转换为闭合path

select pclose(path ‘[(0,0),(1,1),(2,0)]’);

 ((0,0),(1,1),(2,0))

popen(path)

path

将闭合path转换为开放path

select popen(path ‘((0,0),(1,1),(2,0))’);

[(0,0),(1,1),(2,0)]

radius(circle)

double precision

圆半径

select radius(circle ‘((0,0),2.0)’);

2

width(box)

double precision

矩形的水平长度

select width(box ‘((0,0),(1,1))’);

1

 

四、几何类型转换函数

函数

返回

类型

描述

示例

结果

box(circle)

box

圆形转矩形

select box(circle ‘((0,0),2.0)’);

(1.41421356237309,1.41421356237309),(-1.41421356237309,-1.41421356237309)

box(point)

box

点转空矩形

select box(point ‘(0,0)’);

(0,0),(0,0)

box(pointpoint)

box

点转矩形

select box(point ‘(0,0)’, point ‘(1,1)’);

(1,1),(0,0)

box(polygon)

box

多边形转矩形

select box(polygon ‘((0,0),(1,1),(2,0))’);

(2,1),(0,0)

bound_box(boxbox)

box

将两个矩形转换成一个边界矩形

select bound_box(box ‘((0,0),(1,1))’, box ‘((3,3),(4,4))’);

(4,4),(0,0)

circle(box)

circle

矩形转圆形

select circle(box ‘((0,0),(1,1))’);

<(0.5,0.5),0.707106781186548>

circle(pointdouble precision)

circle

圆心与半径转圆形

select circle(point ‘(0,0)’, 2.0);

<(0,0),2>

circle(polygon)

circle

多边形转圆形

select circle(polygon ‘((0,0),(1,1),(2,0))’);

<(1,0.333333333333333),0.924950591148529>

line(pointpoint)

line

点转直线

select line(point ‘(-1,0)’, point ‘(1,0)’);

{0,-1,0}

lseg(box)

lseg

矩形转线段

select lseg(box ‘((-1,0),(1,0))’);

[(1,0),(-1,0)]

lseg(pointpoint)

lseg

点转线段

select lseg(point ‘(-1,0)’, point ‘(1,0)’);

[(-1,0),(1,0)]

path(polygon)

path

多边形转path

select path(polygon ‘((0,0),(1,1),(2,0))’);

((0,0),(1,1),(2,0))

point(double precisiondouble precision)

point

创建点

select point(23.4, -44.5);

(23.4,-44.5)

point(box)

point

矩形中心点

select point(box ‘((-1,0),(1,0))’);

(0,0)

point(circle)

point

圆中心点

select point(circle ‘((0,0),2.0)’);

(0,0)

point(lseg)

point

线段中心点

select point(lseg ‘((-1,0),(1,0))’);

(0,0)

point(polygon)

point

多边形的中心

select point(polygon ‘((0,0),(1,1),(2,0))’);

(1,0.333333333333333)

polygon(box)

polygon

矩形转4点多边形

select polygon(box ‘((0,0),(1,1))’);

((0,0),(0,1),(1,1),(1,0))

polygon(circle)

polygon

圆形转12点多边形

select polygon(circle ‘((0,0),2.0)’);

 

polygon(nptscircle)

polygon

圆形转npts点多边形

select polygon(12, circle ‘((0,0),2.0)’);

 

polygon(path)

polygon

path转多边形

select polygon(path ‘((0,0),(1,1),(2,0))’);

((0,0),(1,1),(2,0))

 

--转载请注明: https://www.macs.vip/archives/50