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.33, Table 9.34, and Table 9.35.
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.33. 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.34. 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.35. 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 |
Copyright © 1996-2023 The PostgreSQL Global Development Group