The following are the built-in functions for testing spatial predicates. They are divided into two sections:
ST_DWITHIN
, ST_DFULLYWITIN
.ST_CONTAINS(g1: anygeometry, g2: anygeometry) -> bool
Returns true if geometry g1
contains the geometry g2
.
Null handling
If any of the arguments is NULL
, the function will also return NULL
.
Notes
More precisely, the function returns true if and only if no points of g2
lie in the exterior of g1
, and at least one point of the interior of g2
lies in the interior of g1
.
According to this definition, a geometry g
does not contain its boundary, but it does contain itself.
A (multi)linestring
or a (multi)point
can never contain a (multi)polygon
, but a (multi)point
can contain a (multi)linestring
when the latter has zero length (e.g. ST_CONTAINS(POINT '(10 20)', LINESTRING '(10 20, 10 20)') = true
).
ST_CONTAINS(g1, g2)
is equivalent to ST_WITHIN(g2, g1)
.
Examples
SELECT ST_CONTAINS(polygon '((0 0, 20 0, 20 20, 0 20, 0 0))', linestring '(5 0, 15 0, 15 10)');
--> true
SELECT ST_CONTAINS(polygon '((0 0, 20 0, 20 20, 0 20, 0 0), (5 5, 10 10, 15 5, 5 5))', multipoint '(2 2, 10 8)');
--> false
See also
ST_CONTAINSPROPERLY(g1: anygeometry, g2: anygeometry) -> bool
Returns true if g2
intersects the interior of g1
but not the boundary (or exterior).
Null handling
If any of the arguments is NULL
, the function will also return NULL
.
Notes
A geometry g
does not contain properly itself, but does contain itself (see ST_CONTAINS).
A (multi)linestring
or a (multi)point
can never properly contain a (multi)polygon
, but a (multi)point
can properly contain a (multi)linestring
when the latter has zero length (e.g. ST_CONTAINSPROPERLY(POINT '(10 20)', LINESTRING '(10 20, 10 20)') = true
).
Examples
SELECT ST_CONTAINSPROPERLY(polygon '((0 0, 20 0, 20 20, 0 20, 0 0), (5 5, 15 5, 10 10, 5 5))', multipoint '(2 2, 4 8, 15 15)');
--> true
SELECT ST_CONTAINSPROPERLY(polygon '((0 0, 20 0, 20 20, 0 20, 0 0))', linestring '(5 0, 15 0, 15 10)');
--> false
See also
ST_COVERS(g1: anygeometry, g2: anygeometry) -> bool
Returns true if no point in geometry g2
is outside geometry g1
.
Null handling
If any of the arguments is NULL
, the function will also return NULL
.
Notes
If either geometry is empty, the predicate returns false.
A (multi)linestring
or a (multi)point
can never cover a (multi)polygon
, but a (multi)point
can cover a (multi)linestring
when the latter has zero length (e.g. ST_COVERS(POINT '(10 20)', LINESTRING '(10 20, 10 20)') = true
).
This function is very similar to ST_CONTAINS, with the difference that when g2
lays completely on the boundary of g1
, ST_CONTAINS
returns false and ST_COVERS
returns true.
ST_COVERS(g1, g2)
is equivalent to ST_COVEREDBY(g2, g1)
.
Examples
SELECT ST_COVERS(polygon '((0 0, 20 0, 20 20, 0 20, 0 0))', point '(10 0)');
--> true
SELECT ST_COVERS(polygon '((0 0, 20 0, 20 20, 0 20, 0 0), (5 5, 15 5, 10 10, 5 5))', linestring '(5 0, 10 0, 10 20)');
--> false
See also
ST_COVEREDBY(g1: anygeometry, g2: anygeometry) -> bool
Returns true if no point in geometry g1
is outside geometry g2
.
Null handling
If any of the arguments is NULL
, the function will also return NULL
.
Notes
If either geometry is empty, the predicate returns false.
A (multi)polygon
can never be covered by a (multi)linestring
or a (multi)point
, but a (multi)linestring
can be covered by a (multi)point
when the former has zero length (e.g. ST_COVEREDBY(LINESTRING '(10 20, 10 20)', POINT '(10 20)') = true
).
ST_COVEREDBY(g1, g2)
is equivalent to ST_COVERS(g2, g1)
.
Examples
SELECT ST_COVEREDBY(point '(10 0)', polygon '((0 0, 20 0, 20 20, 0 20, 0 0))');
--> true
SELECT ST_COVEREDBY(linestring '(5 0, 10 0, 10 20)', polygon '((0 0, 20 0, 20 20, 0 20, 0 0), (5 5, 15 5, 10 10, 5 5))');
--> false
See also
ST_CROSSES(g1: anygeometry, g2: anygeometry) -> bool
Returns true if the supplied geometries spatially cross, i.e. they have some, but not all, interior points in common.
Null handling
If any of the arguments is NULL
, the function will also return NULL
.
Notes
More precisely, for ST_Crossess
to return true, the intersection of g1
and g2
must not be empty, must not be equal to either g1
or g2
, and must have a dimensionality less than the maximum dimensionality of the two input geometries.
If the input geometries are both (multi)point
or both (multi)polygon
geometries, the function will always return false.
It will also always return false if either of the arguments is a point
(as the point cannot cross anything).
Examples
SELECT ST_CROSSES(linestring '(0 0, 10 0, 20 10)', linestring '(0 10, 20 0)');
--> true
SELECT ST_CROSSES(multipoint '(10 10, 20 20)', polygon '((0 0, 20 0, 20 20, 0 20, 0 0))');
--> false
See also
ST_DISJOINT(g1: anygeometry, g2: anygeometry) -> bool
Returns true if the given geometries do not spatially intersect, i.e. if they do not share any space together.
Null handling
If any of the arguments is NULL
, the function will also return NULL
.
Notes
If any of the ST_OVERLAPS, ST_TOUCHES, ST_WITHIN is true, ST_DISJOINT
will neccessarily return false.
The contrary also holds: if ST_DISJOINT
is true, all of them will be false.
ST_DISJOINT(g1, g2)
is equivalent to NOT ST_INTERSECTS(g1, g2)
.
Examples
SELECT ST_DISJOINT(polygon '((0 0, 20 0, 20 20, 0 20, 0 0))', point '(30 40)');
--> true
SELECT ST_DISJOINT(point '(0 0)', linestring '(0 0, 10 10)');
--> false
See also
ST_EQUALS(g1: anygeometry, g2: anygeometry) -> bool
Returns true if the given geometries represent the same geometry, i.e. they include the same point set.
Null handling
If any of the arguments is NULL
, the function will also return NULL
.
Notes
Ordering of points is ignored in the comparison.
ST_EQUALS(g1, g2)
is equivalent to ST_WITHIN(g1, g2) AND ST_WITHIN(g2, g1)
, i.e. two geometries are equal if and only if they are both contained within each other.
A multi-geometry containing only one element is treated by ST_EQUALS
as equal to that element, e.g. ST_EQUALS(MULTIPOINT '(10 20)', POINT '(10 20)') = true
.
Examples
SELECT ST_EQUALS(linestring '(0 0, 5 5, 10 10)', linestring '(10 10, 0 0)');
--> true
SELECT ST_EQUALS(linestring '(0 0, 20 0, 20 20, 0 20, 0 0)', linestring '(0 0, 20 20, 20 0, 0 20, 0 0)');
--> false
See also
ST_INTERSECTS(g1: anygeometry, g2: anygeometry) -> bool
Returns true if the given geometries spatially intersect, i.e. share any portion of space.
Null handling
If any of the arguments is NULL
, the function will also return NULL
.
Notes
If any of the ST_OVERLAPS, ST_TOUCHES, ST_WITHIN is true, ST_INTERSECTS
will also be true. The contrary also holds: if ST_INTERSECTS
is false, all of them will be false.
ST_INTERSECTS(g1, g2)
is equivalent to NOT ST_DISJOINT(g1, g2)
.
Examples
SELECT ST_INTERSECTS(linestring '(0 0, 10 10)', point '(5 5)');
--> true
SELECT ST_INTERSECTS(polygon '((0 0, 20 0, 20 20, 0 20, 0 0))', point '(30 40)');
--> false
See also
ST_OVERLAPS(g1: anygeometry, g2: anygeometry) -> bool
Returns true if the given geometries share space, are of the same dimension, but are not completely contained by each other.
Null handling
If any of the arguments is NULL
, the function will also return NULL
.
Examples
SELECT ST_OVERLAPS(linestring '(0 10, 0 0, 10 0, 10 10)', linestring '(0 -10, 0 0, 10 0, 10 -10)');
--> true
SELECT ST_OVERLAPS(polygon '((0 0, 20 0, 20 20, 0 20, 0 0))', linestring '(10 10, 30 30)');
--> false
See also
ST_TOUCHES(g1: anygeometry, g2: anygeometry) -> bool
Returns true if the given geometries have at least one point in common, but their interiors do not intersect.
Null handling
If any of the arguments is NULL
, the function will also return NULL
.
Notes
If both arguments are (multi)point
geometries (i.e. have a coordinate dimension of 0), the function will always return false.
Examples
SELECT ST_TOUCHES(polygon '((0 0, 20 0, 20 20, 0 20, 0 0))', polygon '((20 5, 30 5, 30 15, 20 15, 20 5))');
--> true
SELECT ST_TOUCHES(polygon '((0 0, 20 0, 20 20, 0 20, 0 0))', linestring '(10 10, 30 30)');
--> false
See also
ST_WITHIN(g1: anygeometry, g2: anygeometry) -> bool
Returns true if the geometry g1
is completely inside geometry g2
.
Null handling
If any of the arguments is NULL
, the function will also return NULL
.
Notes
A (multi)polygon
can never be contained within a (multi)linestring
or a (multi)point
, but a (multi)linestring
can be contained within a (multi)point
when the former has zero length (e.g. ST_WITHIN(LINESTRING '(10 20, 10 20)', POINT '(10 20)') = true
).
ST_WITHIN(g1, g2)
is equivalent to ST_CONTAINS(g2, g1)
.
Examples
SELECT ST_WITHIN(linestring '(5 0, 15 0, 15 10)', polygon '((0 0, 20 0, 20 20, 0 20, 0 0))');
--> true
SELECT ST_WITHIN(multipoint '(10 0, 0 10, 20 20)', polygon '((0 0, 20 0, 20 20, 0 20, 0 0), (5 5, 15 5, 10 10, 5 5))');
--> false
See also
ST_RELATE(g1: anygeometry, g2: anygeometry, pattern: text) -> bool
Determines whether the DE-9IM intersection matrix of the two geometries satisfies the given pattern.
Arguments
The pattern
argument is a DE-9IM intersection matrix pattern. It is a 9-character string, and each character can be one of {0, 1, 2, T, F, *}
.
Null handling
If any of the arguments is NULL
, the function will also return NULL
.
Error handling
If an invalid pattern
argument is given, the function will return an error: Invalid DE-9IM intersection matrix pattern.
Notes
This function can be used for checking complex spatial relationships which are not covered by built-in predicates (i.e. those described above).
It is especially useful for testing compound checks of intersection, crosses, etc. in a single step.
Examples
SELECT ST_RELATE(point '(10 20)', polygon '((-10 0, 30 0, 30 40, -10 40, -10 0))', '0F*FFF212');
--> true
SELECT ST_RELATE(polygon '((10 10, 40 10, 40 50, 10 50, 10 10))', polygon '((30 20, 60 20, 60 60, 30 60, 30 20))', '112101212');
--> false
ST_RELATION(g1: anygeometry, g2: anygeometry) -> text
Calculates the DE-9IM intersection matrix for the given pair of geometries and returns it.
Null handling
If any of the arguments is NULL
, the function will also return NULL
.
Notes
The result of the function is always a 9-character string representing the DE-9IM intersection matrix of the input geometries. Each character of the matrix representation is one of {0, 1, 2, T, F, *}
.
Examples
SELECT ST_RELATION(linestring '(10 20, 30 40)', linestring '(50 60, 70 80)');
--> 'FF1FF0102'
See also
ST_POINTINSIDECIRCLE(pt: point, cx: float64, cy: float64, r: float64) -> bool
Returns true if a given point geometry is located inside a circle with center (cx, cy)
and radius r
, false otherwise.
Arguments
The units of radius r
are meters. If the distance for any reason needs to be specified in Mireo World-Point coordinate units, there is a conversion function TO_METERS which converts a value in world-point coordinate units to meters.
Null handling
If any of the arguments is NULL
, the function will also return NULL
.
Notes
ST_POINTINSIDECIRCLE(pt, cx, cy, r)
is equivalent to ST_DISTANCE(pt, ST_POINT(cx, cy)) <= r
.
Examples
SELECT ST_POINTINSIDECIRCLE(point '(300 400)', 0, 0, 75);
--> true
SELECT ST_POINTINSIDECIRCLE(point '(400 400)', 0, 0, 75);
--> false
See also
ST_DWITHIN(g1: anygeometry, g2: anygeometry, dist: float64) -> bool
Returns true if the two geometries are within the specified distance of one another.
Arguments
The units of dist
are meters. If the distance for any reason needs to be specified in Mireo World-Point coordinate units, there is a conversion function TO_METERS which converts a value in world-point coordinate units to meters.
Null handling
If any of the arguments is NULL
, the function will also return NULL
.
Notes
ST_DWITHIN(g1, g2, dist)
is equivalent to ST_DISTANCE(g1, g2) <= dist
.
Examples
SELECT ST_DWITHIN(linestring '(0 0, 1000 1000)', point '(1000 0)', 125);
--> true
SELECT ST_DWITHIN(linestring '(0 0, 1000 1000)', point '(1000 0)', 100);
--> false
See also
ST_DFULLYWITHIN(g1: anygeometry, g2: anygeometry, dist: float64) -> bool
Returns true if the two geometries are fully within the specified distance of one another.
Arguments
The units of dist
are meters. If the distance for any reason needs to be specified in Mireo World-Point coordinate units, there is a conversion function TO_METERS which converts a value in world-point coordinate units to meters.
Null handling
If any of the arguments is NULL
, the function will also return NULL
.
Notes
ST_DFULLYWITHIN(g1, g2, dist)
is equivalent to ST_MAXDISTANCE(g1, g2) <= dist
.
Examples
SELECT ST_DFULLYWITHIN(linestring '(0 0, 1000 1000)', point '(1000 0)', 200);
--> true
SELECT ST_DFULLYWITHIN(linestring '(0 0, 1000 1000)', point '(1000 0)', 100);
--> false
See also