Documentation Home
MySQL 8.0 参考手册  / 第 12 章函数和运算符  / 12.17空间分析函数  / 12.17.7 几何属性函数  /  12.17.7.3 LineString 和 MultiLineString 属性函数

12.17.7.3 LineString 和 MultiLineString 属性函数

ALineStringPoint值组成。您可以提取 a 的特定点LineString,计算它包含的点数,或获取它的长度。

本节中的一些函数也适用于 MultiLineString值。

除非另有说明,本节中的函数按如下方式处理它们的几何参数:

  • 如果任何参数是NULL或任何几何参数是空几何,则返回值为 NULL

  • 如果任何几何参数不是语法上格式正确的几何, ER_GIS_INVALID_DATA则会发生错误。

  • 如果任何几何参数是未定义空间参考系统 (SRS) 中语法上格式正确的几何, ER_SRS_NOT_FOUND则会发生错误。

  • 否则,返回值为非NULL

这些函数可用于获取线串属性:

  • ST_EndPoint(ls)

    返回值 Point的端点。 LineStringls

    ST_EndPoint()如本节介绍中所述处理其参数。

    mysql> SET @ls = 'LineString(1 1,2 2,3 3)';
    mysql> SELECT ST_AsText(ST_EndPoint(ST_GeomFromText(@ls)));
    +----------------------------------------------+
    | ST_AsText(ST_EndPoint(ST_GeomFromText(@ls))) |
    +----------------------------------------------+
    | POINT(3 3)                                   |
    +----------------------------------------------+
  • ST_IsClosed(ls)

    对于LineStringvalue lsST_IsClosed()如果闭合则返回 1 ls(即它 ST_StartPoint()ST_EndPoint()值相同)。

    对于MultiLineStringvalue lsST_IsClosed()如果关闭则返回 1 ls(也就是说, 对于每个in , theST_StartPoint()和 的ST_EndPoint()值都相同)。 LineStringls

    ST_IsClosed()ls如果未关闭 则返回 0,如果 NULLls则 返回 0 NULL

    ST_IsClosed()如本节介绍中所述处理其参数,但以下情况除外:

    mysql> SET @ls1 = 'LineString(1 1,2 2,3 3,2 2)';
    mysql> SET @ls2 = 'LineString(1 1,2 2,3 3,1 1)';
    
    mysql> SELECT ST_IsClosed(ST_GeomFromText(@ls1));
    +------------------------------------+
    | ST_IsClosed(ST_GeomFromText(@ls1)) |
    +------------------------------------+
    |                                  0 |
    +------------------------------------+
    
    mysql> SELECT ST_IsClosed(ST_GeomFromText(@ls2));
    +------------------------------------+
    | ST_IsClosed(ST_GeomFromText(@ls2)) |
    +------------------------------------+
    |                                  1 |
    +------------------------------------+
    
    mysql> SET @ls3 = 'MultiLineString((1 1,2 2,3 3),(4 4,5 5))';
    
    mysql> SELECT ST_IsClosed(ST_GeomFromText(@ls3));
    +------------------------------------+
    | ST_IsClosed(ST_GeomFromText(@ls3)) |
    +------------------------------------+
    |                                  0 |
    +------------------------------------+
  • ST_Length(ls [, unit])

    返回一个双精度数字,指示LineStringor MultiLineStringls在其关联空间参考系统中的长度。值的长度 MultiLineString等于其元素的长度之和。

    ST_Length()计算结果如下:

    • 如果几何LineString 在笛卡尔 SRS 中有效,则返回值是几何的笛卡尔长度。

    • 如果几何 MultiLineString在笛卡尔 SRS 中有效,则返回值是其元素的笛卡尔长度之和。

    • 如果几何LineString 在地理 SRS 中有效,则返回值是该 SRS 中几何的大地测量长度,以米为单位。

    • 如果几何 MultiLineString在地理 SRS 中有效,则返回值是该 SRS 中其元素的大地测量长度之和,以米为单位。

    ST_Length()按照本节介绍中的描述处理其参数,但有以下例外:

    • 如果几何不是LineStringMultiLineString,则返回值为NULL

    • 如果几何在几何上无效,则结果要么是未定义的长度(即,它可以是任何数字),要么会发生错误。

    • 如果长度计算结果为 +inf,则发生 ER_DATA_OUT_OF_RANGE 错误。

    • 如果几何图形的地理 SRS 的经度或纬度超出范围,则会发生错误:

      显示的范围以度为单位。由于浮点运算,确切的范围限制略有偏差。

    从 MySQL 8.0.16 开始, ST_Length()允许一个可选unit参数指定返回长度值的线性单位。这些规则适用:

    • 如果指定了一个单位但 MySQL 不支持, ER_UNIT_NOT_FOUND则会发生错误。

    • 如果指定了支持的线性单位且 SRID 为 0, ER_GEOMETRY_IN_UNKNOWN_LENGTH_UNIT 则会发生错误。

    • 如果指定了支持的线性单位且 SRID 不为 0,则结​​果采用该单位。

    • 如果未指定单位,则结果采用几何 SRS 的单位,无论是笛卡尔还是地理。目前,所有 MySQL SRS 均以米为单位表示。

    如果在 INFORMATION_SCHEMA ST_UNITS_OF_MEASURE表中找到单位,则支持该单位。请参阅 第 26.3.37 节,“INFORMATION_SCHEMA ST_UNITS_OF_MEASURE 表”

    mysql> SET @ls = ST_GeomFromText('LineString(1 1,2 2,3 3)');
    mysql> SELECT ST_Length(@ls);
    +--------------------+
    | ST_Length(@ls)     |
    +--------------------+
    | 2.8284271247461903 |
    +--------------------+
    
    mysql> SET @mls = ST_GeomFromText('MultiLineString((1 1,2 2,3 3),(4 4,5 5))');
    mysql> SELECT ST_Length(@mls);
    +-------------------+
    | ST_Length(@mls)   |
    +-------------------+
    | 4.242640687119286 |
    +-------------------+
    
    mysql> SET @ls = ST_GeomFromText('LineString(1 1,2 2,3 3)', 4326);
    mysql> SELECT ST_Length(@ls);
    +-------------------+
    | ST_Length(@ls)    |
    +-------------------+
    | 313701.9623204328 |
    +-------------------+
    mysql> SELECT ST_Length(@ls, 'metre');
    +-------------------------+
    | ST_Length(@ls, 'metre') |
    +-------------------------+
    |       313701.9623204328 |
    +-------------------------+
    mysql> SELECT ST_Length(@ls, 'foot');
    +------------------------+
    | ST_Length(@ls, 'foot') |
    +------------------------+
    |     1029205.9131247795 |
    +------------------------+
  • ST_NumPoints(ls)

    返回 value 中的对象 Point数。 LineStringls

    ST_NumPoints()如本节介绍中所述处理其参数。

    mysql> SET @ls = 'LineString(1 1,2 2,3 3)';
    mysql> SELECT ST_NumPoints(ST_GeomFromText(@ls));
    +------------------------------------+
    | ST_NumPoints(ST_GeomFromText(@ls)) |
    +------------------------------------+
    |                                  3 |
    +------------------------------------+
  • ST_PointN(ls, N)

    返回value 中 的N第 -th 个 。点从 1 开始编号。 PointLinestringls

    ST_PointN()如本节介绍中所述处理其参数。

    mysql> SET @ls = 'LineString(1 1,2 2,3 3)';
    mysql> SELECT ST_AsText(ST_PointN(ST_GeomFromText(@ls),2));
    +----------------------------------------------+
    | ST_AsText(ST_PointN(ST_GeomFromText(@ls),2)) |
    +----------------------------------------------+
    | POINT(2 2)                                   |
    +----------------------------------------------+
  • ST_StartPoint(ls)

    返回值 Point的起点。 LineStringls

    ST_StartPoint()如本节介绍中所述处理其参数。

    mysql> SET @ls = 'LineString(1 1,2 2,3 3)';
    mysql> SELECT ST_AsText(ST_StartPoint(ST_GeomFromText(@ls)));
    +------------------------------------------------+
    | ST_AsText(ST_StartPoint(ST_GeomFromText(@ls))) |
    +------------------------------------------------+
    | POINT(1 1)                                     |
    +------------------------------------------------+