| PostgreSQL 9.6.24 Documentation | |||
|---|---|---|---|
| Prev | Up | Chapter 9. Functions and Operators | Next |
The geometric types point, box, lseg, line, path, polygon, and circle have a large set of native support functions and operators, shown in Table 9-33, Table 9-34, and Table 9-35.
| Caution |
|
Note that the "same as" operator, ~=, represents the usual notion of equality for the point, box, polygon, and circle types. Some of these types also have an = operator, but = compares for equal areas only. The other scalar comparison operators (<= and so on) likewise compare areas for these types. |
Table 9-33. Geometric Operators
| Operator | Description | Example |
|---|---|---|
| + | Translation | box '((0,0),(1,1))' + point '(2.0,0)' |
| - | Translation | box '((0,0),(1,1))' - point '(2.0,0)' |
| * | Scaling/rotation | box '((0,0),(1,1))' * point '(2.0,0)' |
| / | Scaling/rotation | box '((0,0),(2,2))' / point '(2.0,0)' |
| # | Point or box of intersection | box '((1,-1),(-1,1))' # box '((1,1),(-2,-2))' |
| # | Number of points in path or polygon | # path '((1,0),(0,1),(-1,0))' |
| @-@ | Length or circumference | @-@ path '((0,0),(1,0))' |
| @@ | Center | @@ circle '((0,0),10)' |
| ## | Closest point to first operand on second operand | point '(0,0)' ## lseg '((2,0),(0,2))' |
| <-> | Distance between | circle '((0,0),1)' <-> circle '((5,0),1)' |
| && | Overlaps? (One point in common makes this true.) | box '((0,0),(1,1))' && box '((0,0),(2,2))' |
| << | Is strictly left of? | circle '((0,0),1)' << circle '((5,0),1)' |
| >> | Is strictly right of? | circle '((5,0),1)' >> circle '((0,0),1)' |
| &< | Does not extend to the right of? | box '((0,0),(1,1))' &< box '((0,0),(2,2))' |
| &> | Does not extend to the left of? | box '((0,0),(3,3))' &> box '((0,0),(2,2))' |
| <<| | Is strictly below? | box '((0,0),(3,3))' <<| box '((3,4),(5,5))' |
| |>> | Is strictly above? | box '((3,4),(5,5))' |>> box '((0,0),(3,3))' |
| &<| | Does not extend above? | box '((0,0),(1,1))' &<| box '((0,0),(2,2))' |
| |&> | Does not extend below? | box '((0,0),(3,3))' |&> box '((0,0),(2,2))' |
| <^ | Is below (allows touching)? | circle '((0,0),1)' <^ circle '((0,5),1)' |
| >^ | Is above (allows touching)? | circle '((0,5),1)' >^ circle '((0,0),1)' |
| ?# | Intersects? | lseg '((-1,0),(1,0))' ?# box '((-2,-2),(2,2))' |
| ?- | Is horizontal? | ?- lseg '((-1,0),(1,0))' |
| ?- | Are horizontally aligned? | point '(1,0)' ?- point '(0,0)' |
| ?| | Is vertical? | ?| lseg '((-1,0),(1,0))' |
| ?| | Are vertically aligned? | point '(0,1)' ?| point '(0,0)' |
| ?-| | Is perpendicular? | lseg '((0,0),(0,1))' ?-| lseg '((0,0),(1,0))' |
| ?|| | Are parallel? | lseg '((-1,0),(1,0))' ?|| lseg '((-1,2),(1,2))' |
| @> | Contains? | circle '((0,0),2)' @> point '(1,1)' |
| <@ | Contained in or on? | point '(1,1)' <@ circle '((0,0),2)' |
| ~= | Same as? | polygon '((0,0),(1,1))' ~= polygon '((1,1),(0,0))' |
Note: Before PostgreSQL 8.2, the containment operators @> and <@ were respectively called ~ and @. These names are still available, but are deprecated and will eventually be removed.