#### 12.17.7.3 LineString 和 MultiLineString 属性函数

一种`线串`由组成`观点`价值观。您可以提取特定点`线串`，计算它包含的点数，或获取它的长度。

本节中的某些功能也适用于`多行字符串`价值观。

除非另有说明，本节中的函数按如下方式处理其几何参数：

-   如果有任何论据`空值`或任何几何参数是空几何，返回值为`空值`.

-   如果任何几何参数不是语法上格式良好的几何，则[`ER_GIS_INVALID_DATA`](https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference.html#error_er_gis_invalid_data)发生错误。

-   如果任何几何参数是未定义的空间参考系统 (SRS) 中的语法结构良好的几何，则[`ER_SRS_NOT_FOUND`](https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference.html#error_er_srs_not_found)发生错误。

-   否则，返回值为非`空值`.

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

-   [](<>)

    [`ST_EndPoint(*`ls`*)`](gis-linestring-property-functions.html#function_st-endpoint)

    [](<>)

    返回`观点`那是终点`线串`价值*`ls`*.

    [`ST_EndPoint()`](gis-linestring-property-functions.html#function_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`*)`](gis-linestring-property-functions.html#function_st-isclosed)

    [](<>)

    为一个`线串`价值*`ls`*, [`ST_IsClosed()`](gis-linestring-property-functions.html#function_st-isclosed)如果返回 1*`ls`*是封闭的（也就是说，它的[`ST_StartPoint()`](gis-linestring-property-functions.html#function_st-startpoint)和[`ST_EndPoint()`](gis-linestring-property-functions.html#function_st-endpoint)值相同）。

    为一个`多行字符串`价值*`ls`*, [`ST_IsClosed()`](gis-linestring-property-functions.html#function_st-isclosed)如果返回 1*`ls`*是关闭的（也就是说，[`ST_StartPoint()`](gis-linestring-property-functions.html#function_st-startpoint)和[`ST_EndPoint()`](gis-linestring-property-functions.html#function_st-endpoint)每个值都相同`线串`在*`ls`*）。

    [`ST_IsClosed()`](gis-linestring-property-functions.html#function_st-isclosed)如果返回 0*`ls`*没有关闭，并且`空值`如果*`ls`*是`空值`.

    [`ST_IsClosed()`](gis-linestring-property-functions.html#function_st-isclosed)如本节介绍中所述处理其参数，但有以下例外：

    -   如果几何具有地理空间参考系统 (SRS) 的 SRID 值，则[`ER_NOT_IMPLEMENTED_FOR_GEOGRAPHIC_SRS`](https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference.html#error_er_not_implemented_for_geographic_srs)发生错误。

    ```
    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_长度（*`ls`* [, *`单元`*])`](gis-linestring-property-functions.html#function_st-length)

    [](<>)

    返回一个表示长度的双精度数`线串`要么`多行字符串`价值*`ls`*在其相关的空间参考系中。一个长度`多行字符串`value 等于其元素长度的总和。

    [`ST_长度（）`](gis-linestring-property-functions.html#function_st-length)计算结果如下：

    -   如果几何是有效的`线串`在笛卡尔 SRS 中，返回值是几何的笛卡尔长度。

    -   如果几何是有效的`多行字符串`在笛卡尔 SRS 中，返回值是其元素的笛卡尔长度之和。

    -   如果几何是有效的`线串`在地理 SRS 中，返回值是该 SRS 中几何的大地测量长度，以米为单位。

    -   如果几何是有效的`多行字符串`在地理 SRS 中，返回值是该 SRS 中其元素的大地长度之和，以米为单位。

    [`ST_长度（）`](gis-linestring-property-functions.html#function_st-length)如本节介绍中所述处理其参数，但有以下例外：

    -   如果几何不是`线串`要么`多行字符串`，返回值为`空值`.

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

    -   如果长度计算结果是`+信息`， 一个[`ER_DATA_OUT_OF_RANGE`](https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference.html#error_er_data_out_of_range)发生错误。

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

        -   如果经度值不在 (−180, 180] 范围内，则[`ER_GEOMETRY_PARAM_LONGITUDE_OUT_OF_RANGE`](https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference.html#error_er_geometry_param_longitude_out_of_range)发生错误（[`ER_LONGITUDE_OUT_OF_RANGE`](https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference.html#error_er_longitude_out_of_range)在 MySQL 8.0.12 之前）。

        -   如果纬度值不在范围内[−90, 90]， 一个[`ER_GEOMETRY_PARAM_LATITUDE_OUT_OF_RANGE`](https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference.html#error_er_geometry_param_latitude_out_of_range)发生错误（[`ER_LATITUDE_OUT_OF_RANGE`](https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference.html#error_er_latitude_out_of_range)在 MySQL 8.0.12 之前）。

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

        从 MySQL 8.0.16 开始，[`ST_长度（）`](gis-linestring-property-functions.html#function_st-length)允许一个可选的*`单元`*指定返回长度值的线性单位的参数。这些规则适用：

    -   如果指定了一个单位但 MySQL 不支持，则[`ER_UNIT_NOT_FOUND`](https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference.html#error_er_unit_not_found)发生错误。

    -   如果指定了支持的线性单位并且 SRID 为 0，则[`ER_GEOMETRY_IN_UNKNOWN_LENGTH_UNIT`](https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference.html#error_er_geometry_in_unknown_length_unit)发生错误。

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

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

        如果在`INFORMATION_SCHEMA` [`ST_UNITS_OF_MEASURE`](information-schema-st-units-of-measure-table.html)桌子。看[第 26.3.37 节，“信息\_架构 ST\_单位\_的\_测量表”](information-schema-st-units-of-measure-table.html).

    ```
    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`*)`](gis-linestring-property-functions.html#function_st-numpoints)

    [](<>)

    返回数量`观点`中的对象`线串`价值*`ls`*.

    [`ST_NumPoints()`](gis-linestring-property-functions.html#function_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`*, *`ñ`*)`](gis-linestring-property-functions.html#function_st-pointn)

    [](<>)

    返回*`ñ`*-th`观点`在里面`线串`价值*`ls`*.点从 1 开始编号。

    [`ST_PointN()`](gis-linestring-property-functions.html#function_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_起点（*`ls`*)`](gis-linestring-property-functions.html#function_st-startpoint)

    [](<>)

    返回`观点`那是的起点`线串`价值*`ls`*.

    [`ST_StartPoint()`](gis-linestring-property-functions.html#function_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)                                     |
    +------------------------------------------------+
    ```
