#### 11.17.5.6. Functions That Test Spatial Relationships Between Geometries

The OpenGIS specification defines the following functions. They
test the relationship between two geometry values
`g1`

and `g2`

.

The return values 1 and 0 indicate true and false, respectively.

Note

Currently, MySQL does not implement these functions according
to the specification. Those that are implemented return the
same result as the corresponding MBR-based functions. This
includes functions in the following list other than
`Distance()`

and
`Related()`

.

`Contains(``g1`

,`g2`

)

Returns 1 or 0 to indicate whether
`g1`

completely contains
`g2`

. This tests the opposite
relationship as `Within()`

.

`Crosses(``g1`

,`g2`

)

Returns 1 if `g1`

spatially crosses
`g2`

. Returns
`NULL`

if `g1`

is a
`Polygon`

or a
`MultiPolygon`

, or if
`g2`

is a `Point`

or a `MultiPoint`

. Otherwise, returns 0.

The term *spatially crosses* denotes a
spatial relation between two given geometries that has the
following properties:

The two geometries intersect

Their intersection results in a geometry that has a
dimension that is one less than the maximum dimension of
the two given geometries

Their intersection is not equal to either of the two
given geometries

`Disjoint(``g1`

,`g2`

)

Returns 1 or 0 to indicate whether
`g1`

is spatially disjoint from
(does not intersect) `g2`

.

`Distance(``g1`

,`g2`

)

Returns as a double-precision number the shortest distance
between any two points in the two geometries.

`Equals(``g1`

,`g2`

)

Returns 1 or 0 to indicate whether
`g1`

is spatially equal to
`g2`

.

`Intersects(``g1`

,`g2`

)

Returns 1 or 0 to indicate whether
`g1`

spatially intersects
`g2`

.

`Overlaps(``g1`

,`g2`

)

Returns 1 or 0 to indicate whether
`g1`

spatially overlaps
`g2`

. The term *spatially
overlaps* is used if two geometries intersect and
their intersection results in a geometry of the same
dimension but not equal to either of the given geometries.

`Related(``g1`

,`g2`

,`pattern_matrix`

)

Returns 1 or 0 to indicate whether the spatial relationship
specified by `pattern_matrix`

exists between `g1`

and
`g2`

. Returns –1 if the
arguments are `NULL`

. The pattern matrix is
a string. Its specification will be noted here if this
function is implemented.

`Touches(``g1`

,`g2`

)

Returns 1 or 0 to indicate whether
`g1`

spatially touches
`g2`

. Two geometries
*spatially touch* if the interiors of the
geometries do not intersect, but the boundary of one of the
geometries intersects either the boundary or the interior of
the other.

`Within(``g1`

,`g2`

)

Returns 1 or 0 to indicate whether
`g1`

is spatially within
`g2`

. This tests the opposite
relationship as `Contains()`

.