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

MySQL的函数和运算符 - 空间分析函数 - 空间运算符函数(2)

数据库杂货铺 2021-08-15
968
● ST_Intersection(g1, g2)
 
返回表示几何值 g1  g2 的点集交集的几何值。结果与几何参数在相同的 SRS 中。
 
MySQL 8.0.27 开始,ST_Intersection() 允许参数使用笛卡尔或地理 SRS。在 MySQL 8.0.27 之前,ST_Intersection() 只允许参数使用笛卡尔 SRS,对于使用地理SRS的参数,将发生 ER_NOT_IMPLEMENTED_FOR_GEOGRAPHIC_SRS 错误。
 
    mysql> SET @g1 = ST_GeomFromText('LineString(1 1, 3 3)');
    mysql> SET @g2 = ST_GeomFromText('LineString(1 3, 3 1)');
    mysql> SELECT ST_AsText(ST_Intersection(@g1, @g2));
    +--------------------------------------+
    | ST_AsText(ST_Intersection(@g1, @g2)) |
    +--------------------------------------+
    | POINT(2 2) |
    +--------------------------------------+
     
    ● ST_LineInterpolatePoint(ls, fractional_distance)
     
    该函数接受一个 LineString 几何值和范围在 [0.0, 1.0] 内的小数距离,并返回从 LineString 的起始点到终止点给定比例距离处的 Point。它可以用来回答诸如几何参数所描述的路径中间是哪个点。
     
    该函数是为所有空间参照系统中的 LineString 几何值实现的,包括笛卡尔坐标系和地理坐标系。
     
    如果 fractional_distance 参数为 1.0,则结果可能不是 LineString 参数的最后一点,而是接近它的一个点,这是由于近似值计算中的数值不准确造成的。
     
    相关函数 ST_LineInterpolatePoints() 接受类似的参数,但返回 MultiPoint,由 LineString 上从起始点到端点距离的每个分数距离部分的点值组成。
     
    ST_LineInterpolatePoint() 按照本部分介绍的方法处理参数,但有以下例外:
     
    ■ 如果几何参数不是 LineString,则会发生 ER_UNEXPECTED_GEOMETRY_TYPE 错误。
     
    ■ 如果分数距离参数超出 [0.0, 1.0] 范围,则会发生 ER_DATA_OUT_OF_RANGE 错误。
     
    ST_LineInterpolatePoint() 是对 OpenGIS MySQL 扩展。这个函数是在 MySQL 8.0.24 中添加的。
     
    ● ST_LineInterpolatePoints(ls, fractional_distance)
     
    该函数接受一个 LineString 几何值和在范围 (0.0, 1.0] 内的小数距离,并返回 MultiPoint 值,该值由 LineString 起始点以及 LineString 从起始点到终点每隔小数距离的点组成。它可以用来回答这样的问题,比如几何参数所描述的路径上每10%的位置上有哪些点值。
     
    该函数是为所有空间参照系统中的 LineString 几何值实现的,包括笛卡尔坐标系和地理坐标系。
     
    如果 fractional_distance 参数除以 1.0,余数为零,则结果可能不包含 LineString 参数的最后一个点,而是接近它的一个点,这是由于近似值计算中的数值不准确而造成的。
     
    ST_LineInterpolatePoints() 按照本部分简介中所述处理其参数,但有以下例外:
     
    ■ 如果几何参数不是 LineString,则会发生 ER_UNEXPECTED_GEOMETRY_TYPE 错误。
     
    ■ 如果小数距离参数超出范围 [0.0, 1.0],则会发生 ER_DATA_OUT_OF_RANGE 错误。
     
      mysql> SET @ls1 = ST_GeomFromText('LINESTRING(0 0,0 5,5 5)');
      mysql> SELECT ST_AsText(ST_LineInterpolatePoint(@ls1, .5));
      +----------------------------------------------+
      | ST_AsText(ST_LineInterpolatePoint(@ls1, .5)) |
      +----------------------------------------------+
      | POINT(0 5) |
      +----------------------------------------------+
      mysql> SELECT ST_AsText(ST_LineInterpolatePoint(@ls1, .75));
      +-----------------------------------------------+
      | ST_AsText(ST_LineInterpolatePoint(@ls1, .75)) |
      +-----------------------------------------------+
      | POINT(2.5 5) |
      +-----------------------------------------------+
      mysql> SELECT ST_AsText(ST_LineInterpolatePoint(@ls1, 1));
      +---------------------------------------------+
      | ST_AsText(ST_LineInterpolatePoint(@ls1, 1)) |
      +---------------------------------------------+
      | POINT(5 5) |
      +---------------------------------------------+
      mysql> SELECT ST_AsText(ST_LineInterpolatePoints(@ls1, .25));
      +------------------------------------------------+
      | ST_AsText(ST_LineInterpolatePoints(@ls1, .25)) |
      +------------------------------------------------+
      | MULTIPOINT((0 2.5),(0 5),(2.5 5),(5 5)) |
      +------------------------------------------------+
       
      ST_LineInterpolatePoints() OpenGIS MySQL 扩展。此函数是在 MySQL 8.0.24 中添加的。
       
      ● ST_PointAtDistance(ls, distance)
       
      此函数接收 LineString 几何值和范围在 [0.0, ST_Length(ls)] 内的距离(以 LineString 的空间参照系(SRS)的单位测量)作为参数,并返回 LineString 上距离起点指定距离的点。它可用于回答以下问题,如几何参数所描述的距离路径起点400米的点值。
       
      该功能适用于所有空间参照系统(笛卡尔坐标系和地理坐标系)中的 LineString 几何值。
       
      ST_PointAtDistance() 按照本部分所述处理其参数,但有以下例外:
       
      ■ 如果几何参数不是 LineString,则会发生 ER_UNEXPECTED_GEOMETRY_TYPE 错误。
       
      ■如果小数距离参数超出 [0.0, ST_Length(ls)] 范围,则会发生 ER_DATA_OUT_OF_RANGE 错误。
       
      ST_PointAtDistance() OpenGIS MySQL 扩展。此函数是在 MySQL 8.0.24 中添加的。
       
      ● ST_SymDifference(g1, g2)
       
      返回表示几何值 g1  g2 的点的差集,定义为:
       
        g1 symdifference g2 := (g1 union g2) difference (g1 intersection g2)
         
        或者,以函数调用表示:
         
          ST_SymDifference(g1, g2) = ST_Difference(ST_Union(g1, g2), ST_Intersection(g1, g2))
           
          结果与几何参数在相同的SRS中。
           
          MySQL 8.0.27 开始,ST_SymDifference() 允许参数使用笛卡尔或地理 SRS。在 MySQL 8.0.27 之前,ST_SymDifference() 只允许参数使用笛卡尔 SRS,对于使用地理 SRS 的参数,将发生 ER_NOT_IMPLEMENTED_FOR_GEOGRAPHIC_SRS 错误。
           
            mysql> SET @g1 = ST_GeomFromText('MULTIPOINT(5 0,15 10,15 25)');
            mysql> SET @g2 = ST_GeomFromText('MULTIPOINT(1 1,15 10,15 25)');
            mysql> SELECT ST_AsText(ST_SymDifference(@g1, @g2));
            +---------------------------------------+
            | ST_AsText(ST_SymDifference(@g1, @g2)) |
            +---------------------------------------+
            | MULTIPOINT((1 1),(5 0)) |
            +---------------------------------------+
             
            ● ST_Transform(g, target_srid)
             
            将一个几何值从一个空间参照系统(SRS)转换到另一个空间参照系统。返回值是与输入类型相同的几何值,其所有坐标都转换为目标 SRID, target_srid。转换仅限于地理 SRS,除非几何参数的SRID与目标SRID值相同,在这种情况下,返回值是任何有效SRS的输入几何值。
             
            ST_Transform() 按照导言中介绍的方法处理参数,但有以下例外:
             
            ■ 具有地理 SRS SRID 值的几何参数不会产生错误。
             
            ■ 如果几何值或目标SRID参数指向未定义空间参照系统(SRS)SRID值,就会发生 ER_SRS_NOT_FOUND 错误。
             
            ■ 如果几何值位于 ST_Transform() 不能转换的 SRS 中,则会发生 ER_TRANSFORM_SOURCE_SRS_NOT_SUPPORTED 错误。
             
            ■ 如果目标 SRID 位于 ST_Transform() 不能转换到的 SRS 中,则会发生 ER_TRANSFORM_TARGET_SRS_NOT_SUPPORTED 错误。
             
            ■ 如果几何值所在的 SRS 不是 WGS 84 并且没有 TOWGS84 子句,则会发生 ER_TRANSFORM_SOURCE_SRS_MISSING_TOWGS84 错误。
             
            ■ 如果目标 SRID SRS 不是 WGS 84 并且没有 TOWGS84 子句,则会发生 ER_TRANSFORM_TARGET_SRS_MISSING_TOWGS84 错误。
             
            ST_SRID(g, target_srid) ST_Transform(g, target_srid) 的区别如下:
             
            ■ ST_SRID() 改变几何SRID值而不改变其坐标。
             
            ■ ST_Transform() 除了改变其 SRID 值外,还转换几何坐标。
             
              mysql> SET @p = ST_GeomFromText('POINT(52.381389 13.064444)', 4326);
              mysql> SELECT ST_AsText(@p);
              +----------------------------+
              | ST_AsText(@p) |
              +----------------------------+
              | POINT(52.381389 13.064444) |
              +----------------------------+
              mysql> SET @p = ST_Transform(@p, 4230);
              mysql> SELECT ST_AsText(@p);
              +---------------------------------------------+
              | ST_AsText(@p) |
              +---------------------------------------------+
              | POINT(52.38208611407426 13.065520672345304) |
              +---------------------------------------------+
               
              ● ST_Union(g1, g2)
               
              返回表示几何值 g1  g2 的点集并集的几何值。结果与几何参数在相同的SRS中。
               
              MySQL 8.0.26 开始,ST_Union() 允许参数使用笛卡尔或地理 SRS。在 MySQL 8.0.26 之前,ST_Union() 只允许参数使用笛卡尔 SRS,如果参数使用地理 SRS,将发生 ER_NOT_IMPLEMENTED_FOR_GEOGRAPHIC_SRS 错误。
               
                mysql> SET @g1 = ST_GeomFromText('LineString(1 1, 3 3)');
                mysql> SET @g2 = ST_GeomFromText('LineString(1 3, 3 1)');
                mysql> SELECT ST_AsText(ST_Union(@g1, @g2));
                +--------------------------------------+
                | ST_AsText(ST_Union(@g1, @g2)) |
                +--------------------------------------+
                | MULTILINESTRING((1 1,3 3),(1 3,3 1)) |
                +--------------------------------------+
                 
                 
                 
                 
                 
                官方网址:
                https://dev.mysql.com/doc/refman/8.0/en/spatial-operator-functions.html
                文章转载自数据库杂货铺,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                评论