更新时间:2024-06-29 GMT+08:00

几何操作符

+

描述:平移,即从第一个参数的每个点的坐标中加上第二个point的坐标。

示例:

1
2
3
4
5
SELECT box '((0,0),(1,1))' + point '(2.0,0)' AS RESULT;
   result    
-------------
 (3,1),(2,0)
(1 row)

-

描述:平移,从第一个参数的每个点的坐标中减去第二个point的坐标。

示例:

1
2
3
4
5
SELECT box '((0,0),(1,1))' - point '(2.0,0)' AS RESULT;
    result     
---------------
 (-1,1),(-2,0)
(1 row)

*

描述:伸展/旋转。

示例:

1
2
3
4
5
SELECT box '((0,0),(1,1))' * point '(2.0,0)' AS RESULT;
   result    
-------------
 (2,2),(0,0)
(1 row)

/

描述:收缩/旋转。

示例:

1
2
3
4
5
SELECT box '((0,0),(2,2))' / point '(2.0,0)' AS RESULT;
   result    
-------------
 (1,1),(0,0)
(1 row)

#

描述:两个图形交点或者交面。

示例:

1
2
3
4
5
SELECT box'((1,-1),(-1,1))' # box'((1,1),(-1,-1))' AS RESULT;
 result 
--------
(1,1),(-1,-1)
(1 row)

#

描述:图形的路径数目或多边形顶点数。

示例:

1
2
3
4
5
SELECT # path'((1,0),(0,1),(-1,0))' AS RESULT;
 result 
--------
      3
(1 row)

@-@

描述:图形的长度或者周长。

示例:

1
2
3
4
5
SELECT @-@ path '((0,0),(1,0))' AS RESULT;
 result 
--------
      2
(1 row)

@@

描述:图形的中心。

示例:

1
2
3
4
5
SELECT @@ circle '((0,0),10)' AS RESULT;
 result 
--------
 (0,0)
(1 row)

##

描述:第一个图形相对第二个图形的最近点。

示例:

1
2
3
4
5
SELECT point '(0,0)' ## box '((2,0),(0,2))' AS RESULT;
 result 
--------
 (0,0)
(1 row)

<->

描述:两个图形之间的距离。

示例:

1
2
3
4
5
SELECT circle '((0,0),1)' <-> circle '((5,0),1)' AS RESULT;
 result 
--------
      3
(1 row)

&&

描述:两个图形是否重叠(有一个共同点就为真)。

示例:

1
2
3
4
5
SELECT box '((0,0),(1,1))' && box '((0,0),(2,2))' AS RESULT;
 result 
--------
 t
(1 row)

<<

描述:图形是否全部在另一个图形的左边(没有相同的横坐标)。

示例:

1
2
3
4
5
SELECT circle '((0,0),1)' << circle '((5,0),1)' AS RESULT;
 result 
--------
 t
(1 row)

>>

描述:图形是否全部在另一个图形的右边(没有相同的横坐标)。

示例:

1
2
3
4
5
SELECT circle '((5,0),1)' >> circle '((0,0),1)' AS RESULT;
 result 
--------
 t
(1 row)

&<

描述:图形的最右边是否不超过在另一个图形的最右边。

示例:

1
2
3
4
5
SELECT box '((0,0),(1,1))' &< box '((0,0),(2,2))' AS RESULT;
 result 
--------
 t
(1 row)

&>

描述:图形的最左边是否不超过在另一个图形的最左边。

示例:

1
2
3
4
5
SELECT box '((0,0),(3,3))' &> box '((0,0),(2,2))' AS RESULT;
 result 
--------
 t
(1 row)

<<|

描述:图形是否全部在另一个图形的下边(没有相同的纵坐标)。

示例:

1
2
3
4
5
SELECT box '((0,0),(3,3))' <<| box '((3,4),(5,5))' AS RESULT;
 result 
--------
 t
(1 row)

|>>

描述:图形是否全部在另一个图形的上边(没有相同的纵坐标)。

示例:

1
2
3
4
5
SELECT box '((3,4),(5,5))' |>> box '((0,0),(3,3))' AS RESULT;
 result 
--------
 t
(1 row)

&<|

描述:图形的最上边是否不超过另一个图形的最上边。

示例:

1
2
3
4
5
SELECT box '((0,0),(1,1))' &<| box '((0,0),(2,2))' AS RESULT;
 result 
--------
 t
(1 row)

|&>

描述:图形的最下边是否不超过另一个图形的最下边。

示例:

1
2
3
4
5
SELECT box '((0,0),(3,3))' |&> box '((0,0),(2,2))' AS RESULT;
 result 
--------
 t
(1 row)

<^

描述:图形是否低于另一个图形(允许两个图形有接触)。

示例:

1
2
3
4
5
SELECT box '((0,0),(-3,-3))' <^ box '((0,0),(2,2))' AS RESULT;
 result 
--------
 t
(1 row)

>^

描述:图形是否高于另一个图形(允许两个图形有接触)。

示例:

1
2
3
4
5
SELECT box '((0,0),(2,2))' >^ box '((0,0),(-3,-3))'  AS RESULT;
 result 
--------
 t
(1 row)

?#

描述:两个图形是否相交。

示例:

1
2
3
4
5
SELECT lseg '((-1,0),(1,0))' ?# box '((-2,-2),(2,2))' AS RESULT;
 result 
--------
 t
(1 row)

?-

描述:图形是否处于水平位置。

示例:

1
2
3
4
5
SELECT ?- lseg '((-1,0),(1,0))' AS RESULT;
 result 
--------
 t
(1 row)

?-

描述:图形是否水平对齐。

示例:

1
2
3
4
5
SELECT point '(1,0)' ?- point '(0,0)' AS RESULT;
 result 
--------
 t
(1 row)

?|

描述:图形是否处于竖直位置。

示例:

1
2
3
4
5
SELECT ?| lseg '((-1,0),(1,0))' AS RESULT;
 result 
--------
 f
(1 row)

?|

描述:图形是否竖直对齐。

示例:

1
2
3
4
5
SELECT point '(0,1)' ?| point '(0,0)' AS RESULT;
 result 
--------
 t
(1 row)

?-|

描述:两条线是否垂直。

示例:

1
2
3
4
5
SELECT lseg '((0,0),(0,1))' ?-| lseg '((0,0),(1,0))' AS RESULT;
 result 
--------
 t
(1 row)

?||

描述:两条线是否平行。

示例:

1
2
3
4
5
SELECT lseg '((-1,0),(1,0))' ?|| lseg '((-1,2),(1,2))' AS RESULT;
 result 
--------
 t
(1 row)

@>

描述:图形是否包含另一个图形。

示例:

1
2
3
4
5
SELECT circle '((0,0),2)' @> point '(1,1)' AS RESULT;
 result 
--------
 t
(1 row)

<@

描述:图形是否被包含于另一个图形。

示例:

1
2
3
4
5
SELECT point '(1,1)' <@ circle '((0,0),2)' AS RESULT;
 result 
--------
 t
(1 row)

~=

描述:两个图形是否相同?

示例:

1
2
3
4
5
SELECT polygon '((0,0),(1,1))' ~= polygon '((1,1),(0,0))' AS RESULT;
 result 
--------
 t
(1 row)