zoukankan      html  css  js  c++  java
  • MYSQL空间查询函数

    数据写入

    插入时使用ST_GeomFromText,也可使用GeomFromText

    INSERT INTO t_customers ( lon_lat_point )
    VALUES
        ( GeomFromText ( 'POINT(123 123)' ) )

      查询数据

    查询空间数据

    SELECT
        astext ( lon_lat_point ) 
    FROM
        `t_customers`

    https://blog.csdn.net/xinlingjun2007/article/details/80457079

     

    空间查询函数

    • 包含相关

    MBRContains(A,B) –> A包含B
    MBRWithin(A,B) –> A在B中
    注意:包含关系中,所要验证的集合必须全部包含在指定的集合中。如果只有部分在其中,应该使用相交

    • 覆盖相关

    MBRCoveredBy(A,B) –> A被B覆盖
    MBRCovers(A,B) –> A覆盖B

    • 相交相关

    MBRDisjoint(A,B) –> A、B不相交
    MBRIntersects(A,B) –> A、B相交

    • 接触

    MBRTouches(A,B) –> A、B接触,接触的概念类似于相切

    • 重叠

    MBROverlaps(A,B) –> A、B重叠

    • 相同

    MBREquals(A,B) –> A、B相同

    空间数据相关方法

    • 点独有

    开始、结束点
    ST_StartPoint(A)
    ST_EndPoint(A)
    获取x或y
    ST_X(A)
    ST_Y(A)

    • 凸包

    ST_ConvexHull(A) –> 多点A的凸包面

    • 返回矩形

    ST_MakeEnvelope(A,B) –> A、B为对角点

    • 线独有

    线是否闭合
    ST_IsClosed(A)
    线中点数量
    ST_NumPoints
    线中第n个点
    ST_PointN(A,n)
    线长度
    ST_Length(A)
    生成矩形
    ST_Envelope(A) –> A只有两个点,且不是水平或竖直线

    • 面积

    ST_Area(A)
    面的内外边界
    ST_ExteriorRing(A) –> 获取A面外环边界,返回值为LineString
    ST_InteriorRingN(A,num) –> 获取A面中第num个内环边界,返回值为LineString。num从1开始。
    ST_NumInteriorRings(A) –> 获取A面内环数量(5.7.8后添加ST_NumInteriorRing,效果一样)
    部分geo对象可用

    • 集合

    交集
    ST_Intersection(A,B)
    异或
    ST_SymDifference(A,B) –> A、B中独有的
    并集
    ST_Union(A,B)
    质心
    ST_Centroid(A)
    距离
    ST_Distance(A,B) –> A和B距离
    ST_Distance_Sphere(A,B) –> A和B的球面距离
    不同
    ST_Difference(A,B) –> 返回A中有B中没有的
    抽稀
    ST_Simplify(A,mix_distance) –> 将A抽稀,简化A中两点距离小于max的值(用起来有点迷。。待研究)

    • 缓冲区

    ST_Buffer(A,length) –> 通过A几何体,生成他周边范围为length距离的面

    5.7.7后可以添加策略影响缓冲区的计算,设置的语句是ST_Buffer_Strategy()

    • point策略

    point_circle –> 点的缓冲区是一个圆(默认)
    point_square –> 点的缓冲区是一个正方形,length是点到其中一边的距离

    • join策略

    join_round –> 连接处缓冲区边界为圆弧(默认)
    join_miter –> 连接处缓冲区边界为尖角

    • end策略

    end_round –> 在结束处缓冲区为圆弧(默认)
    end_flat –> 在结束处缓冲区为平坦的直线

    • 举例生成缓冲区

    ST_Buffer(point, 5, ST_Buffer_Strategy('point_square'))

    ST_Buffer(line, 5, ST_Buffer_Strategy('join_miter', 10), ST_Buffer_Strategy('end_flat'))

    • 相交

    ST_Intersects(A,B) –> A和B是否相交
    ST_Crosses(A,B) –> A和B是否相交(相交部分不等于A或B)
    ST_Disjoint(A,B) –> A和B是否不相交

    • 重叠

    ST_Overlaps(A,B)

    • 接触

    ST_Touches(A,B)

    • 包含

    ST_Contains(A,B) –> A是否包含B
    ST_Within(A,B) –> A是否在B中

    • 验证数据是否合法

    ST_IsValid(A)
    ST_Validate(A)

    • geo对象返回格式

    ST_AsText(字段名) –> 以文本形式返回
    ST_AsBinary(字段名) –> 以二进制形式返回
    包含、覆盖、重叠三个方法不清楚具体的区别

    注意:每个方法前的MBR、ST可要可不要,在mysql5.7.6之后,不带MBR、ST的方法开始弃用

    • 查询样例:

    - 查询在指定面中的点
    sql
    select * from test where MBRContains(ST_GeomFromText('Polygon((0 0,0 5,5 5,5 0,0 0))'),point)

    - 查询所有point点的x坐标
    sql
    SELECT ST_X(point) FROM test

     

  • 相关阅读:
    具体讲解有关“DB2“数据库的一些小材干1
    适用手段 Ubuntu Linux 8.04设置与优化2
    如何管理DB2数据库代码页不兼容的成效
    具体解说有关“DB2“数据库的一些小本领3
    深化分析DB2数据库运用体系的性能优化3
    实例讲解如安在DB2 UDB中正确的监控弃世锁2
    阅历总结:运用IBM DB2数据库的详细事变
    实例讲授如何在DB2 UDB中正确的监控死锁3
    DB2数据库在AIX上若何卸载并重新安顿
    轻松处置DB2创设存储历程时碰着的错误
  • 原文地址:https://www.cnblogs.com/JMrLi/p/11550244.html
Copyright © 2011-2022 走看看