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

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

数据库杂货铺 2021-08-08
467
一般几何属性函数
本部分中列出的函数不限制其参数,可接受任何类型的几何值。
 
除非另有说明,否则本部分中的函数处理几何参数的方式如下:
 
● 如果任何参数为 NULL,则返回值为 NULL
 
● 如果任何几何参数不是语法良好的几何值,就会发生 ER_GIS_INVALID_DATA 错误。
 
● 如果任何语法良好的几何参数被分配了未定义的空间参照系统(SRS),就会发生 ER_SRS_NOT_FOUND 错误。
 
● 如果任何 SRID 参数不在32位无符号整数的范围内,就会发生 ER_DATA_OUT_OF_RANGE 错误。
 
● 如果 SRID 参数指向一个未定义的 SRS,就会发生 ER_SRS_NOT_FOUND 错误。
 
● 否则,返回值是非 NULL
 
以下这些函数可用于获取几何属性:
 
● ST_Dimension(g)
 
返回几何值 g 的固有维度。维度可以是 101 2
 
ST_Dimension() 按照本部分介绍中描述的方式处理其参数。
 
    mysql> SELECT ST_Dimension(ST_GeomFromText('LineString(1 1,2 2)'));
    +------------------------------------------------------+
    | ST_Dimension(ST_GeomFromText('LineString(1 1,2 2)')) |
    +------------------------------------------------------+
    | 1 |
    +------------------------------------------------------+
    复制
     
    ● ST_Envelope(g)
     
    返回几何值 g 的最小边界矩形(MBR)。结果由边界框的角点定义的 Polygon 值返回:
     
      POLYGON((MINX MINY, MAXX MINY, MAXX MAXY, MINX MAXY, MINX MINY))
      复制
       
        mysql> SELECT ST_AsText(ST_Envelope(ST_GeomFromText('LineString(1 1,2 2)')));
        +----------------------------------------------------------------+
        | ST_AsText(ST_Envelope(ST_GeomFromText('LineString(1 1,2 2)'))) |
        +----------------------------------------------------------------+
        | POLYGON((1 1,2 1,2 2,1 2,1 1)) |
        +----------------------------------------------------------------+
        复制
         
        如果参数是一个点或一个垂直或水平线段,ST_Envelope() 将返回该点或线段作为其 MBR,而不是返回一个无效的多边形:
         
          mysql> SELECT ST_AsText(ST_Envelope(ST_GeomFromText('LineString(1 1,1 2)')));
          +----------------------------------------------------------------+
          | ST_AsText(ST_Envelope(ST_GeomFromText('LineString(1 1,1 2)'))) |
          +----------------------------------------------------------------+
          | LINESTRING(1 1,1 2) |
          +----------------------------------------------------------------+
          复制
           
          ST_Envelope() 按照本部分介绍的方法处理它的参数,但有一个例外:
           
          ■ 如果几何体具有地理空间参照系统(SRS)SRID值,则会发生 ER_NOT_IMPLEMENTED_FOR_GEOGRAPHIC_SRS 错误。
           
          ● ST_GeometryType(g)
           
          返回一个二进制字符串,该字符串指示几何实例 g 所属的几何类型的名称。该名称对应于一个可实例化的 Geometry 子类。
           
          ST_GeometryType() 按照本部分介绍中的描述处理其参数。
           
            mysql> SELECT ST_GeometryType(ST_GeomFromText('POINT(1 1)'));
            +------------------------------------------------+
            | ST_GeometryType(ST_GeomFromText('POINT(1 1)')) |
            +------------------------------------------------+
            | POINT |
            +------------------------------------------------+
            复制
             
            ● ST_IsEmpty(g)
             
            此函数是一个占位符,对于空的几何集合值返回 1,否则返回 0
             
            唯一有效的空几何值以空几何集合值的形式表示。MySQL 不支持 GIS EMPTY 值,如 POINT EMPTY
             
            ST_IsEmpty() 按照本部分介绍中所述处理其参数。
             
            ● ST_IsSimple(g)
             
            根据 ISO SQL/MM 3部分:空间标准,如果几何值 g 是简单的,则返回 1,否则返回 0
             
            ST_IsSimple() 如本节介绍中所述处理它的参数,但有一个例外:
             
            ■ 如果几何值的地理 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)
             
            所示范围以度数表示。由于浮点运算,精确的范围限制略有偏差。
             
            ● ST_SRID(g [, srid])
             
            带有一个表示有效几何对象 g 的参数,ST_SRID() 返回一个整数,表示与 g 关联的空间参照系统(SRS)ID
             
            第二个可选参数表示一个有效的 SRID 值,带有此参数,ST_SRID() 返回一个与第一个参数类型相同的对象,其 SRID 值等于第二个参数。这只设置了对象的 SRID 值,它不执行任何坐标值的变换。
             
            ST_SRID() 按照本部分介绍中所述处理它的参数,但有一个例外:
             
            ■ 对于单参数语法,ST_SRID() 返回几何 SRID,即使它指向一个未定义的 SRS。不会发生 ER_SRS_NOT_FOUND 错误。
             
            ST_SRID(g, target_srid) ST_Transform(g, target_srid) 的区别如下:
             
            ■ ST_SRID() 改变几何 SRID 值而不改变其坐标。
             
            ■ ST_Transform() 除了改变其SRID值外,还转换几何坐标。
              mysql> SET @g = ST_GeomFromText('LineString(1 1,2 2)', 0);
              mysql> SELECT ST_SRID(@g);
              +-------------+
              | ST_SRID(@g) |
              +-------------+
              | 0 |
              +-------------+
              mysql> SET @g = ST_SRID(@g, 4326);
              mysql> SELECT ST_SRID(@g);
              +-------------+
              | ST_SRID(@g) |
              +-------------+
              | 4326 |
              +-------------+
              复制
               
              通过将一个用于创建空间值的 MySQL 特定函数的结果和一个 SRID 值传递给 ST_SRID(),可以在特定的 SRID 中创建几何值。例如:
               
                SET @g1 = ST_SRID(Point(1, 1), 4326);
                复制
                 
                但是,该方法在 SRID 0 中创建几何值,然后将其强制转换为 SRID 4326 (WGS 84)。一个更好的选择是用正确的空间参照系统创建几何值。例如:
                 
                  SET @g1 = ST_PointFromText('POINT(1 1)', 4326);
                  SET @g1 = ST_GeomFromText('POINT(1 1)', 4326);
                  复制
                   
                  ST_SRID() 的双参数形式对于纠正或更改具有不正确 SRID 的几何图形的 SRS 等任务很有用。
                   
                   
                   
                   
                  官方网址:
                  https://dev.mysql.com/doc/refman/8.0/en/gis-general-property-functions.html
                  文章转载自数据库杂货铺,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                  评论