Documentation Home
MySQL 8.3 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 40.8Mb
PDF (A4) - 40.9Mb
Man Pages (TGZ) - 294.0Kb
Man Pages (Zip) - 409.0Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb
Excerpts from this Manual

MySQL 8.3 Reference Manual  /  ...  /  LineString and MultiLineString Property Functions

14.16.7.3 线串和多线串属性函数

一个 LineStringPoint 值组成。你可以提取 LineString 的特定点,计算它包含的点数,或者获取其长度。

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

除非另有说明,本节中的函数将其几何参数处理如下:

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

  • 如果任何几何参数不是语法正确的几何体,将发生 ER_GIS_INVALID_DATA 错误。

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

  • 否则,返回值为非 NULL

以下函数可用于获取线串属性:

  • ST_EndPoint(ls)

    返回 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)

    对于 LineStringlsST_IsClosed() 返回 1 如果 ls 是闭合的(即其 ST_StartPoint()ST_EndPoint() 值相同)。

    对于 MultiLineStringlsST_IsClosed() 返回 1 如果 ls 是闭合的(即每个 LineStringST_StartPoint()ST_EndPoint() 值相同)。

    ST_IsClosed() 返回 0 如果 ls 不是闭合的,返回 NULL 如果 lsNULL

    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])

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

    ST_Length() 按照以下方式计算结果:

    • 如果几何体是笛卡尔空间参考系统(SRS)中的有效 LineString,则返回值是几何体的笛卡尔长度。

    • 如果几何体是笛卡尔空间参考系统(SRS)中的有效 MultiLineString,则返回值是其元素的笛卡尔长度之和。

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

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

    ST_Length() 按照本节介绍处理其参数,以下是例外情况:

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

    • 如果几何体是几何无效的,结果是未定义的长度(即可以是任何数字),或发生错误。

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

    • 如果几何体具有地理 SRS,其中的经度或纬度超出范围,将发生错误:

      所示范围以度为单位。由于浮点算术,实际范围限制略有偏差。

    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 表中找到。见 第 28.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)

    返回 LineStringls 中的 Point 对象的数量。

    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)

    返回 LineStringls 中的第 NPoint。点从 1 开始编号。

    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)

    返回 LineStringls 的起点 Point

    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)                                     |
    +------------------------------------------------+