PostgreSQL
9.11. Geometric Functions and Operators
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.34, Table 9.35, and Table 9.36.
Caution
Note that the “[.quote]#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.34. Geometric Operators
Operator | Description | Example |
---|---|---|
|
Translation |
|
|
Translation |
|
|
Scaling/rotation |
|
|
Scaling/rotation |
|
|
Point or box of intersection |
|
|
Number of points in path or polygon |
|
|
Length or circumference |
|
|
Center |
|
|
Closest point to first operand on second operand |
|
|
Distance between |
|
|
Overlaps? (One point in common makes this true.) |
|
|
Is strictly left of? |
|
|
Is strictly right of? |
|
|
Does not extend to the right of? |
|
|
Does not extend to the left of? |
|
`+<< |
+` |
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)? |
|
|
Is above (allows touching)? |
|
|
Intersects? |
|
|
Is horizontal? |
|
|
Are horizontally aligned? |
|
`+? |
+` |
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? |
|
|
Contained in or on? |
|
|
Same as? |
|
+
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.
Table 9.35. Geometric Functions
Function | Return Type | Description | Example |
---|---|---|---|
|
|
area |
|
|
|
center |
|
|
|
diameter of circle |
|
|
|
vertical size of box |
|
|
|
a closed path? |
|
|
|
an open path? |
|
|
|
length |
|
|
|
number of points |
|
|
|
number of points |
|
|
|
convert path to closed |
|
|
|
convert path to open |
|
|
|
radius of circle |
|
|
|
horizontal size of box |
|
+
Table 9.36. Geometric Type Conversion Functions
Function | Return Type | Description | Example |
---|---|---|---|
|
|
circle to box |
|
|
|
point to empty box |
|
|
|
points to box |
|
|
|
polygon to box |
|
|
|
boxes to bounding box |
|
|
|
box to circle |
|
|
|
center and radius to circle |
|
|
|
polygon to circle |
|
|
|
points to line |
|
|
|
box diagonal to line segment |
|
|
|
points to line segment |
|
|
|
polygon to path |
|
|
|
construct point |
|
|
|
center of box |
|
|
|
center of circle |
|
|
|
center of line segment |
|
|
|
center of polygon |
|
|
|
box to 4-point polygon |
|
|
|
circle to 12-point polygon |
|
|
|
circle to `npts`-point polygon |
|
|
|
path to polygon |
|
+
It is possible to access the two component numbers of a point
as though the point were an array with indexes 0 and 1. For example, if t.p
is a point
column then SELECT p[0] FROM t
retrieves the X coordinate and UPDATE t SET p[1] = ...
changes the Y coordinate. In the same way, a value of type box
or lseg
can be treated as an array of two point
values.
The area
function works for the types box
, circle
, and path
. The area
function only works on the path
data type if the points in the path
are non-intersecting. For example, the path
'((0,0),(0,1),(2,1),(2,2),(1,2),(1,0),(0,0))'::PATH
will not work; however, the following visually identical path
'((0,0),(0,1),(1,1),(1,2),(2,2),(2,1),(1,1),(1,0),(0,0))'::PATH
will work. If the concept of an intersecting versus non-intersecting path
is confusing, draw both of the above `path`s side by side on a piece of graph paper.
Prev | Up | Next |
---|---|---|
9.10. Enum Support Functions |
9.12. Network Address Functions and Operators |
Submit correction
If you see anything in the documentation that is not correct, does not match your experience with the particular feature or requires further clarification, please use this form to report a documentation issue.
Copyright © 1996-2023 The PostgreSQL Global Development Group