ST_Touches

Determines if two GEOMETRY objects touch at a single point or along a boundary, but do not have interiors that intersect.

GEOGRAPHY Polygons with a vertex or border on the International Date Line (IDL) or the North or South pole are not supported.

Behavior Type

Immutable

Syntax

ST_Touches( g1, g2 
                        [USING PARAMETERS spheroid={true | false}] )

Arguments

g1

Spatial object, value of type GEOMETRY

g2

Spatial object, value of type GEOMETRY

Parameters

spheroid = {true | false}

(Optional) BOOLEAN that specifies whether to use a perfect sphere or WGS84.

Default: False

Returns

BOOLEAN

Supported Data Types

Data Type GEOMETRY GEOGRAPHY (WGS84)
Point

Yes

Yes
Multipoint

Yes

No
Linestring

Yes

No
Multilinestring

Yes

No
Polygon

Yes

Yes
Multipolygon

Yes

No
GeometryCollection

Yes

No

Compatible GEOGRAPHY pairs:

Data Type GEOGRAPHY (WGS84)
Point-Point No
Linestring-Point No
Polygon-Point Yes
Multipolygon-Point No

Examples

The following examples show how to use ST_Touches.

Two polygons touch at a single point:

=> SELECT ST_Touches(ST_GeomFromText('POLYGON((-1 2,0 3,0 1,-1 2))'),
   ST_GeomFromText('POLYGON((1 3,0 3,1 2,1 3))'));
 ST_Touches
------------
 t
(1 row)

Two polygons touch only along part of the boundary:

=> SELECT ST_Touches(ST_GeomFromText('POLYGON((-1 2,0 3,0 1,-1 2))'),
   ST_GeomFromText('POLYGON((1 2,0 3,0 1,1 2))'));
 ST_Touches
------------
 t
(1 row)

Two polygons do not touch at any point:

=> SELECT ST_Touches(ST_GeomFromText('POLYGON((-1 2,0 3,0 1,-1 2))'),
   ST_GeomFromText('POLYGON((0 2,-1 3,-2 0,0 2))')); 
 ST_Touches
------------
 f
(1 row)