Documentation Home

12.17.8 空间算子函数

OpenGIS 提出了许多可以生成几何图形的函数。它们旨在实现空间运算符。

这些函数支持所有参数类型组合,但根据Open Geospatial Consortium规范 不适用的除外 。

此外,第 12.17.7 节“几何属性函数”讨论了几个从现有几何构造新几何的函数。有关这些功能的说明,请参阅该部分:

这些空间运算符函数可用:

  • Buffer(g, d [, strategy1 [, strategy2 [, strategy3]]])

    ST_Buffer()并且 Buffer()是同义词。有关详细信息,请参阅 的说明 ST_Buffer()

    Buffer()已弃用;希望在未来的 MySQL 版本中将其删除。改用 ST_Buffer()

  • ConvexHull(g)

    ST_ConvexHull()并且 ConvexHull()是同义词。有关详细信息,请参阅 的说明 ST_ConvexHull()

    ConvexHull()已弃用;希望在未来的 MySQL 版本中将其删除。改用 ST_ConvexHull()

  • ST_Buffer(g, d [, strategy1 [, strategy2 [, strategy3]]])

    返回一个几何,该几何表示与几何值的距离g小于或等于 的距离的所有点d,或者NULL如果任何参数为 NULL。geometry 参数的 SRID 必须为 0,因为ST_Buffer() 仅支持笛卡尔坐标系。如果任何几何参数不是语法上格式正确的几何, ER_GIS_INVALID_DATA则会发生错误。

    如果几何参数为空,则 ST_Buffer()返回一个空几何。

    如果距离为 0,则 ST_Buffer()返回不变的几何参数:

    mysql> SET @pt = ST_GeomFromText('POINT(0 0)');
    mysql> SELECT ST_AsText(ST_Buffer(@pt, 0));
    +------------------------------+
    | ST_AsText(ST_Buffer(@pt, 0)) |
    +------------------------------+
    | POINT(0 0)                   |
    +------------------------------+

    ST_Buffer()支持PolygonMultiPolygon值的负距离,以及包含PolygonMultiPolygon值的几何集合。结果可能是一个空几何体。对于、 、和值 的负距离,以及不包含任何或值的几何集合,会发生 ER_WRONG_ARGUMENTS错误 。 ST_Buffer()PointMultiPointLineStringMultiLineStringPolygonMultiPolygon

    ST_Buffer()在距离参数之后最多允许三个可选的策略参数。策略影响缓冲区计算。这些参数是由 ST_Buffer_Strategy()函数生成的字节字符串值,用于点、连接和结束策略:

    每种类型最多可以指定一个策略,并且它们可以以任何顺序给出。如果指定了给定类型的多个策略, ER_WRONG_ARGUMENTS则会发生错误。

    mysql> SET @pt = ST_GeomFromText('POINT(0 0)');
    mysql> SET @pt_strategy = ST_Buffer_Strategy('point_square');
    mysql> SELECT ST_AsText(ST_Buffer(@pt, 2, @pt_strategy));
    +--------------------------------------------+
    | ST_AsText(ST_Buffer(@pt, 2, @pt_strategy)) |
    +--------------------------------------------+
    | POLYGON((-2 -2,2 -2,2 2,-2 2,-2 -2))       |
    +--------------------------------------------+
    mysql> SET @ls = ST_GeomFromText('LINESTRING(0 0,0 5,5 5)');
    mysql> SET @end_strategy = ST_Buffer_Strategy('end_flat');
    mysql> SET @join_strategy = ST_Buffer_Strategy('join_round', 10);
    mysql> SELECT ST_AsText(ST_Buffer(@ls, 5, @end_strategy, @join_strategy))
    +---------------------------------------------------------------+
    | ST_AsText(ST_Buffer(@ls, 5, @end_strategy, @join_strategy))   |
    +---------------------------------------------------------------+
    | POLYGON((5 5,5 10,0 10,-3.5355339059327373 8.535533905932738, |
    | -5 5,-5 0,0 0,5 0,5 5))                                       |
    +---------------------------------------------------------------+

    ST_Buffer()并且 Buffer()是同义词。

  • ST_Buffer_Strategy(strategy [, points_per_circle])

    此函数返回一个策略字节字符串,用于 ST_Buffer()影响缓冲区计算。如果任何参数是NULL,则返回值为NULL。如果任何参数无效,ER_WRONG_ARGUMENTS 则会发生错误。

    有关策略的信息可在 Boost.org上获得。

    第一个参数必须是表示策略选项的字符串:

    • 对于点策略,允许的值为 'point_circle''point_square'

    • 对于连接策略,允许的值为 'join_round''join_miter'

    • 对于结束策略,允许的值为 'end_round''end_flat'

    如果第一个参数是'point_circle''join_round''join_miter''end_round',则该 points_per_circle参数必须作为正数值给出。最大值 points_per_circlemax_points_in_geometry系统变量的值。如果第一个参数是 'point_square'or 'end_flat',则 points_per_circle不能给出该参数 ,否则会ER_WRONG_ARGUMENTS发生错误。

    有关示例,请参阅 的说明 ST_Buffer()

  • ST_ConvexHull(g)

    返回表示几何值的凸包的几何图形g。如果参数是NULL,则返回值为 NULL

    此函数通过首先检查几何的顶点是否共线来计算几何的凸包。如果是,该函数返回线性外壳,否则返回多边形外壳。此函数通过提取集合所有组件的所有顶点、 MultiPoint从中创建值并计算其凸包来处理几何集合。如果参数是一个空的几何集合,则返回值为NULL

    mysql> SET @g = 'MULTIPOINT(5 0,25 0,15 10,15 25)';
    mysql> SELECT ST_AsText(ST_ConvexHull(ST_GeomFromText(@g)));
    +-----------------------------------------------+
    | ST_AsText(ST_ConvexHull(ST_GeomFromText(@g))) |
    +-----------------------------------------------+
    | POLYGON((5 0,25 0,15 25,5 0))                 |
    +-----------------------------------------------+

    ST_ConvexHull()并且 ConvexHull()是同义词。

  • ST_Difference(g1, g2)

    返回表示几何值g1和 的点集差的几何g2。如果任何参数是 NULL,则返回值为 NULL

    mysql> SET @g1 = Point(1,1), @g2 = Point(2,2);
    mysql> SELECT ST_AsText(ST_Difference(@g1, @g2));
    +------------------------------------+
    | ST_AsText(ST_Difference(@g1, @g2)) |
    +------------------------------------+
    | POINT(1 1)                         |
    +------------------------------------+
  • ST_Intersection(g1, g2)

    返回表示几何值g1和 的点集交集的几何g2。如果任何参数是 NULL,则返回值为 NULL

    mysql> SET @g1 = ST_GeomFromText('LineString(1 1, 3 3)');
    mysql> SET @g2 = ST_GeomFromText('LineString(1 3, 3 1)');
    mysql> SELECT ST_AsText(ST_Intersection(@g1, @g2));
    +--------------------------------------+
    | ST_AsText(ST_Intersection(@g1, @g2)) |
    +--------------------------------------+
    | POINT(2 2)                           |
    +--------------------------------------+
  • ST_SymDifference(g1, g2)

    返回表示几何值 g1和 的点集对称差的几何g2,其定义为:

    g1 symdifference g2 := (g1 union g2) difference (g1 intersection g2)

    或者,在函数调用符号中:

    ST_SymDifference(g1, g2) = ST_Difference(ST_Union(g1, g2), ST_Intersection(g1, g2))

    如果任何参数是NULL,则返回值为NULL

    mysql> SET @g1 = ST_GeomFromText('MULTIPOINT(5 0,15 10,15 25)');
    mysql> SET @g2 = ST_GeomFromText('MULTIPOINT(1 1,15 10,15 25)');
    mysql> SELECT ST_AsText(ST_SymDifference(@g1, @g2));
    +---------------------------------------+
    | ST_AsText(ST_SymDifference(@g1, @g2)) |
    +---------------------------------------+
    | MULTIPOINT((1 1),(5 0))               |
    +---------------------------------------+
  • ST_Union(g1, g2)

    返回表示几何值g1和 的点集并集的几何g2。如果任何参数是 NULL,则返回值为 NULL

    mysql> SET @g1 = ST_GeomFromText('LineString(1 1, 3 3)');
    mysql> SET @g2 = ST_GeomFromText('LineString(1 3, 3 1)');
    mysql> SELECT ST_AsText(ST_Union(@g1, @g2));
    +--------------------------------------+
    | ST_AsText(ST_Union(@g1, @g2))        |
    +--------------------------------------+
    | MULTILINESTRING((1 1,3 3),(1 3,3 1)) |
    +--------------------------------------+