本文介绍时空函数中的关系函数。

ST_Contains

如果Geometry对象A包含Geometry对象B,ST_Contains函数则返回true。

语法

  • 判断对象geomA是否包含对象geomB
    boolean ST_Contains(geometry geomA, geometry geomB);
  • 判断对象g和点坐标(x,y)的包含关系
    boolean ST_Contains(geometry g, double x, double y);

参数

参数描述
geomA指定的第一个Geometry对象。
geomB指定的第二个Geometry对象。
g指定的Geometry对象。
x坐标经度x值。
y坐标纬度y值。
说明
  • geomB对象的所有点均在geomA对象的内部或者边界上,则geomA对象包含geomB对象。
  • ST_Contains函数是ST_Within的反函数,即ST_Contains(A,B)=ST_Within(B,A)

示例

  • 示例一
    SELECT ST_Contains(ST_GeomFromText('POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))'), ST_GeomFromText('POINT(5 5)')) AS iscontain;
    返回结果如下:
    +-----------+
    | iscontain |
    +-----------+
    | true      |
    +-----------+
  • 示例二
    SELECT ST_Contains(ST_GeomFromText('POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))'),5,5) AS iscontain;
    返回结果如下:
    +-----------+
    | iscontain |
    +-----------+
    | true      |
    +-----------+
  • 示例三
    SELECT ST_Contains(ST_GeomFromText('POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))'), ST_GeomFromText('POINT(180 23)')) AS iscontain;
    返回结果如下:
    +-----------+
    | iscontain |
    +-----------+
    | false     |
    +-----------+
  • 示例四
    SELECT ST_Contains(ST_GeomFromText('POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))'),180,23) AS iscontain;
    返回结果如下:
    +-----------+
    | iscontain |
    +-----------+
    | false     |
    +-----------+

ST_DWithin

如果两个Geometry对象的二维平面距离在指定范围内,ST_DWithin函数则返回true。距离单位为degree。

语法

  • 判断对象geomA和对象geomB的二维平面距离是否在指定范围内
    boolean ST_DWithin(geometry geomA, geometry geomB, double distanceOfSrid);
  • 判断对象g和点坐标(x,y)的二维平面距离是否在指定范围内
    boolean ST_DWithin(geometry g, double x, double y, double distanceOfSrid);

参数

参数描述
geomA指定的第一个Geometry对象。
geomB指定的第二个Geometry对象。
distanceOfSrid在SRID 4326下的距离,单位为degree。
g指定的Geometry对象。
x坐标经度x值。
y坐标纬度y值。
说明 Geometry对象支持Point、LineString、Polygon、MultiPoint、MultiLineString、MultiPolygon和GeometryCollection类型。

示例

  • 示例一
    SELECT ST_DWithin(ST_GeomFromText('POINT(5 5)'), ST_GeomFromText('POINT(6 6)'), 10) AS iswithin;
    返回结果如下:
    +----------+
    | iswithin |
    +----------+
    | true     |
    +----------+
  • 示例二
    SELECT ST_DWithin(ST_GeomFromText('POINT(5 5)'),6,6,10) AS iswithin;
    返回结果如下:
    +----------+
    | iswithin |
    +----------+
    | true     |
    +----------+

ST_DWithinSphere

如果两个Geometry对象的球面距离在指定范围内,ST_DWithinSphere函数则返回true。距离单位为米,球面距离的判断存在一定的误差,误差为厘米级别。

语法

  • 判断对象geomA和对象geomB的球面距离是否在指定范围内
    boolean ST_DWithinSphere(geometry geomA, geometry geomB, double distance);
  • 判断对象g和点坐标(x,y)的球面距离是否在指定范围内
    boolean ST_DWithinSPhere(geometry g, double x, double y, double distance);

参数

参数描述
geomA指定的第一个Geometry对象。
geomB指定的第二个Geometry对象。
distance球面距离,单位为米。
g指定的Geometry对象。
x坐标经度x值。
y坐标纬度y值。
说明
  • Geometry对象支持Point、LineString、Polygon、MultiPoint、MultiLineString、MultiPolygon和GeometryCollection类型。
  • 球面距离的判断存在一定的误差,误差为厘米级别。

示例

  • 示例一:球面上POINT(120 36)和POINT(116 40)之间的距离为566034.7930717631米,距离在指定的范围内,ST_DWithinSphere函数则返回true。
    SELECT ST_DWithinSphere(ST_GeomFromText('POINT(120 36)'), ST_GeomFromText('POINT(116 40)'), 570000) AS iswithin;
    返回结果如下:
    +----------+
    | iswithin |
    +----------+
    | true     |
    +----------+
  • 示例二
    SELECT ST_DWithinSphere(ST_GeomFromText('POINT(120 36)'),116,40,570000) AS iswithin;
    返回结果如下:
    +----------+
    | iswithin |
    +----------+
    | true     |
    +----------+

ST_Intersects

判断两个Geometry对象是否相交。如果两个Geometry对象有任意共享空间的部分,那么两个Geometry对象相交,ST_Intersects函数则返回true。

语法

  • 判断对象geomA和对象geomB的是否相交
    boolean ST_ Intersects(geometry geomA, geometry geomB);
  • 判断对象g和点坐标(x,y)是否相交
    boolean ST_ Intersects(geometry g, double x, double y);

参数

参数描述
geomA指定的第一个Geometry对象。
geomB指定的第二个Geometry对象。
g指定的Geometry对象。
x坐标经度x值。
y坐标纬度y值。
说明 Geometry对象支持Point、LineString、Polygon、MultiPoint、MultiLineString、MultiPolygon和GeometryCollection类型。

示例

  • 示例一
    SELECT ST_Intersects(ST_GeomFromText('POINT(0 0)'), ST_GeomFromText('LINESTRING ( 2 0, 0 2 )')) AS isinter;
    返回结果如下:
    +---------+
    | isinter |
    +---------+
    | false   |
    +---------+
  • 示例二
    SELECT ST_Intersects(ST_GeomFromText('LINESTRING ( 2 0, 0 2 )'), 0, 0) AS isinter;
    返回结果如下:
    +---------+
    | isinter |
    +---------+
    | false   |
    +---------+
  • 示例三
    SELECT ST_Intersects(ST_GeomFromText('POINT(0 0)'), ST_GeomFromText('LINESTRING ( 0 0, 0 2 )')) AS isinter;
    返回结果如下:
    +---------+
    | isinter |
    +---------+
    | true    |
    +---------+
  • 示例四
    SELECT ST_Intersects(ST_GeomFromText('LINESTRING ( 0 0, 0 2 )'), 0, 0) AS isinter;
    返回结果如下:
    +---------+
    | isinter |
    +---------+
    | true    |
    +---------+

ST_Overlaps

如果两个Geometry对象在空间上有重叠的部分,但不存在其中一个完全包含另一个的情况,ST_Overlaps函数则返回true。

语法

  • 判断对象geomA和对象geomB在空间上是否有重叠的部分
    boolean ST_Overlaps(geometry geomA, geometry geomB);
  • 判断对象g和点坐标(x,y)在空间上是否有重叠的部分
    boolean ST_Overlaps(geometry g, double x, double y);

参数

参数描述
geomA指定的第一个Geometry对象。
geomB指定的第二个Geometry对象。
g指定的Geometry对象。
x坐标经度x值。
y坐标纬度y值。
说明 Geometry对象支持Point、LineString、Polygon、MultiPoint、MultiLineString、MultiPolygon和GeometryCollection类型。

示例

  • 示例一
    SELECT ST_Overlaps(ST_GeomFromText('LINESTRING(0 0,0 2)'),ST_GeomFromText('LINESTRING(0 1,0 3)')) as overlaps;
    返回结果如下:
    +----------+
    | overlaps |
    +----------+
    | true     |
    +----------+
  • 示例二
    SELECT ST_Overlaps(ST_GeomFromText('LINESTRING(0 0,0 2)'),ST_GeomFromText('POINT(0 1)')) as overlaps;
    返回结果如下:
    +----------+
    | overlaps |
    +----------+
    | false    |
    +----------+
  • 示例三
    SELECT ST_Overlaps(ST_GeomFromText('LINESTRING(0 0,0 2)'), 0, 1) as overlaps;
    返回结果如下:
    +----------+
    | overlaps |
    +----------+
    | false    |
    +----------+

ST_Within

如果Geometry对象A完全在Geometry对象B内,ST_Within函数则返回true。

语法

  • 判断对象geomA和对象geomB的包含关系
    boolean ST_Within(geometry geomA, geometry geomB);
  • 判断对象g和点坐标(x,y)的包含关系
    bboolean ST_Within(double x, double y, geometry g);

参数

参数描述
geomA指定的第一个Geometry对象。
geomB指定的第二个Geometry对象。
g指定的Geometry对象。
x坐标经度x值。
y坐标纬度y值。
说明
  • Geometry对象支持Point、LineString、Polygon、MultiPoint、MultiLineString、MultiPolygon和GeometryCollection类型。
  • 如果ST_Within(A,B)的返回结果与ST_Within(B,A)的返回结果都为true,则认为Geometry对象A和Geometry对象B在空间上相同。

示例

  • 示例一
    SELECT ST_Within(ST_GeomFromText('POINT(5 5)'), ST_GeomFromText('POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))')) AS iswithin;
    返回结果如下:
    +----------+
    | iswithin |
    +----------+
    | true     |
    +----------+
  • 示例二
    SELECT ST_Within(5, 5, ST_GeomFromText('POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))')) AS iswithin;
    返回结果如下:
    +----------+
    | iswithin |
    +----------+
    | true     |
    +----------+