Updated on 2025-05-29 GMT+08:00

Geometric Operators

+

Description: Translation

Example:

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

-

Description: Translation

Example:

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

*

Description: Scaling out/Rotation

Example:

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

/

Description: Scaling in/Rotation

Example:

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

#

  • Description: Intersection of two figures

    Example:

    1
    2
    3
    4
    5
    gaussdb=# SELECT box '((1,-1),(-1,1))' # box '((1,1),(-2,-2))' AS RESULT;
     result 
    ---------------
     (1,1),(-1,-1)
    (1 row)
    
  • Description: Number of paths or polygon vertexes

    Example:

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

@-@

Description: Length or circumference

Example:

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

@@

Description: Center of box

Example:

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

<->

Description: Distance between the two figures

Example:

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

&&

Description: Overlaps? (One point in common makes this true.)

Example:

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

<<

Description: Is strictly left of (no common horizontal coordinate)?

Example:

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

>>

Description: Is strictly right of (no common horizontal coordinate)?

Example:

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

&<

Description: Does not extend to the right of?

Example:

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

&>

Description: Does not extend to the left of?

Example:

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

<<|

Description: Is strictly below (no common horizontal coordinate)?

Example:

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

|>>

Description: Is strictly above (no common horizontal coordinate)?

Example:

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

&<|

Description: Does not extend above?

Example:

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

|&>

Description: Does not extend below?

Example:

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

<^

Description: Is below (allows touching)?

Example:

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

>^

Description: Is above (allows touching)?

Example:

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

?#

Description: Intersect?

Example:

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

?-

  • Description: Is horizontal?

    Example:

    1
    2
    3
    4
    5
    gaussdb=# SELECT ?- lseg '((-1,0),(1,0))' AS RESULT;
     result 
    --------
     t
    (1 row)
    
  • Description: Are horizontally aligned?

    Example:

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

?|

  • Description: Is vertical?

    Example:

    1
    2
    3
    4
    5
    gaussdb=# SELECT ?| lseg '((-1,0),(1,0))' AS RESULT;
     result 
    --------
     f
    (1 row)
    
  • Description: Are vertically aligned?

    Example:

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

?-|

Description: Are perpendicular?

Example:

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

?||

Description: Are parallel?

Example:

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

@>

Description: Contains?

Example:

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

<@

Description: Contained in or on?

Example:

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

~=

Description: Same as?

Example:

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