暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MySQL的函数和运算符 - 空间分析函数 - 几何属性函数 - LineString和MultiLineString属性函数

数据库杂货铺 2021-08-10
2597
LineString MultiLineString 属性函数
 
LineString Point 值组成。可以提取 LineString 的特定点,计算它包含的点的数量,或者获取它的长度。
 
本部分中的一些函数也适用于 MultiLineString 值。
 
除非另有说明,本部分中的函数处理几何参数的方式如下:
 
● 如果任何参数为 NULL 或任何几何参数为空几何值,则返回值为 NULL
 
● 如果任何几何参数不是语法良好的几何值,就会发生 ER_GIS_INVALID_DATA 错误。
 
● 如果几何参数是语法良好的几何值,但使用了未定义的空间参照系统(SRS),就会发生 ER_SRS_NOT_FOUND 错误。
 
● 否则,返回值是非 NULL
 
以下函数可用于获取 LineString 属性:
 
● ST_EndPoint(ls)
 
返回作为 LineString ls 终点的 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)
     
    对于 LineString ls,如果 ls 是闭合的,则 ST_IsClosed() 返回 1(也就是说,它的 ST_StartPoint() ST_EndPoint() 值相同)
     
    对于 MultiLineString ls,如果 ls 是闭合的,ST_IsClosed() 将返回 1(即,对于 ls 中的每个 LineString, ST_StartPoint() ST_EndPoint() 值是相同的)
     
    如果 ls 不是闭合的,则 ST_IsClosed() 返回 0,如果 ls NULL,则返回 NULL
     
    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])
       
      返回一个双精度数值,表示 LineString MultiLineString ls 在其关联的空间参照系统中的长度。MultiLineString 值的长度等于其元素的长度之和。
       
      ST_Length() 按照如下原则计算结果:
       
      ■ 如果几何值是笛卡尔SRS中的有效 LineString,则返回值是几何值的笛卡尔长度。
       
      ■ 如果几何值在笛卡尔SRS中是有效的 MultiLineString,则返回值是其元素的笛卡尔长度之和。
       
      ■ 如果几何值在地理SRS中是有效的 LineString,则返回值是该SRS中几何值的地理长度,单位为米。
       
      ■ 如果几何值在地理SRS中是有效的 MultiLineString,则返回值为该SRS中其元素的地理长度之和,单位为米。
       
      ST_Length() 如本部分介绍中所述处理它的参数,但有以下例外:
       
      ■ 如果几何值不是 LineString MultiLineString,则返回值为 NULL
       
      ■ 如果几何值是无效几何,要么结果是一个未定义的长度(也就是说,它可以是任何数字),要么报错。
       
      ■ 如果长度计算结果为 +inf,则发生 ER_DATA_OUT_OF_RANGE 错误。
       
      ■ 如果几何值的地理 SRS 的经度或纬度超出范围,则会发生错误:
       
      ○如果经度值不在 (180, 180] 范围内,则会出现 ER_GEOMETRY_PARAM_LONGITUDE_OUT_OF_RANGE 错误(MySQL 8.0.12 之前是 ER_LONGITUDE_OUT_OF_RANGE 错误)
       
      ○如果纬度值不在 [90, 90] 范围内,则会出现 ER_GEOMETRY_PARAM_LATITUDE_OUT_OF_RANGE 错误(MySQL 8.0.12 之前是 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_SCHEMA ST_UNITS_OF_MEASURE 表中能找到某个单位,则 MySQL 支持该单位。
       
        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)
         
        返回 LineString ls 中的 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)
           
          返回 Linestring ls 中的第 N 个点。Point 数从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)
             
            返回 LineString ls  起始点 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) |
              +------------------------------------------------+
              复制
               
               
               
               
               
               
              官方网址:
              https://dev.mysql.com/doc/refman/8.0/en/gis-linestring-property-functions.html
              文章转载自数据库杂货铺,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

              评论