Documentation Home
MySQL 8.4 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 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的终点Point

    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)

    对于一个值为lsLineStringST_IsClosed返回1,如果ls是闭合的(即其ST_StartPointST_EndPoint值相同)。

    对于一个值为lsMultiLineStringST_IsClosed返回1,如果ls是闭合的(即每个LineStringls中的ST_StartPointST_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 [,<em class="replaceable">unit>])

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

    ST_Length() 计算结果如下:

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

    • 如果几何体是一个有效的MultiLineString在笛卡尔坐标参考系统中,返回值是其元素的笛卡尔长度之和。

    • 如果几何体是一个有效的LineString在地理坐标参考系统中,返回值是该几何体在该坐标参考系统中的地理长度,以米为单位。

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

    ST_Length()根据本节介绍的方式处理其参数,以下例外情况:

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

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

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

    • 如果几何体具有地理坐标参考系统,并且经度或纬度超出范围,发生错误:

      显示的范围是度数。由于浮点计算,实际范围略有不同。

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

    • 如果指定了不支持的MySQL单元,將出现ER_UNIT_NOT_FOUND错误。

    • 如果指定了支持的线性单元且SRID为0,將出现ER_GEOMETRY_IN_UNKNOWN_LENGTH_UNIT错误。

    • 如果指定了支持的线性单元且SRID不为0,结果将以该单元为单位。

    • 如果没有指定单元,结果将以几何体SRS的单位表示,无论是笛卡尔坐标系还是地理坐标系。当前,所有MySQL SRS都以米为单位。

    一个单元如果在INFORMATION_SCHEMAST_UNITS_OF_MEASURE表中找到,见第28.3.37节,“The INFORMATION_SCHEMA ST_UNITS_OF_MEASURE Table”

    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中的第N-thPoint。点从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)

    返回Point类型的值,表示ls中的LineString的起点。

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