• 首页
  • css3教程
  • html5教程
  • jQuery手册
  • vue手册
  • php手册
  • MySQL手册
  • apache手册
  • redis手册
  • LineString 和 MultiLineString 属性函数

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

    本节中的某些功能也适用于MultiLineString值。

    除非另有说明,否则本节中的函数将按以下方式处理其参数:

    • 如果任何自变量为NULL或任何几何自变量为空几何,则返回值为NULL
    • 如果任何几何参数都不是语法上格式正确的几何,ER_GIS_INVALID_DATA则会发生错误。
    • 如果任何几何参数的SRID值都引用未定义的空间参考系统(SRS),ER_SRS_NOT_FOUND则会发生错误。
    • 否则,返回值为non-NULL

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

    • ST_EndPoint(ls)

      返回Point作为LineString值端点的ls

      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()如果ls关闭则返回1 (即,其ST_StartPoint()ST_EndPoint()值相同)。

      对于MultiLineStringvalue lsST_IsClosed()如果ls关闭则返回1 (即in中的ST_StartPoint()ST_EndPoint()值相同)。LineStringls

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

      ST_IsClosed()如本节简介中所述处理其参数,但有以下例外:

      • 如果几何图形具有用于地理空间参考系统(SRS)的SRID值,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_Length(ls[,unit])

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

      ST_Length()计算结果如下:

      • 如果几何LineString在笛卡尔SRS中有效,则返回值为几何的笛卡尔长度。
      • 如果几何MultiLineString在笛卡尔SRS中有效,则返回值为其元素笛卡尔长度的总和。
      • 如果几何LineString在地理SRS中有效,则返回值是该SRS中几何的大地长度(以米为单位)。
      • 如果几何MultiLineString在地理SRS中有效,则返回值为该SRS中其元素的大地长度的总和,以米为单位。

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

      • 如果几何不是a LineStringMultiLineString,则返回值为NULL
      • 如果几何在几何上是无效的,则结果是未定义的长度(即,可以是任何数字),或者发生错误。
      • 如果长度计算结果为+infER_DATA_OUT_OF_RANGE则会发生错误。
      • 如果几何图形的经度或纬度超出范围,则将发生错误:

        • 如果任何经度参数不在范围内(-180,180],ER_LONGITUDE_OUT_OF_RANGE则会发生错误。
        • 如果任何纬度参数不在[-90,90]范围内,ER_LATITUDE_OUT_OF_RANGE则会发生错误。

        显示的范围以度为单位。精确的范围限制由于浮点运算而略有不同。

      从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_SCHEMAST_UNITS_OF_MEASURE表中找到了单位,则该单位受支持。请参见“ 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)

      返回的数量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)

      返回NPointLinestringls。点从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作为LineString值起点的ls

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