一、前言

MySQL实施了OGC建议的具有Geometry类型的SQL环境的一个子集。该术语指的是用一组集合类型扩展的环境。具有几何值的SQL列是作为拥有集合类型的列实施的。该规范描述了SQL几何类型集合,以及作用在这些类型上用于创建和分析几何值的函数。关于MySQL空间存储和查询的概念介绍,可以参考这篇博客,写的很详细:

https://blog.csdn.net/zzq900503/article/details/17142621

二、数据格式

Point

字段类型: point

样例: Point(1 1)

MultiPoint

字段类型: multipoint

样例: MULTIPOINT (1 1,2 2,3 3)

里面是多个point

LineString

字段类型: linestring

样例: LINESTRING(1 1,2 2,3 3)

MultiLineString

字段类型: multilinestring

样例: MULTILINESTRING ((1 1,2 2,3 3),(2 2,2 3,2 4))

Polygon

字段类型: polygon

样例:

单面 POLYGON((1 1,1 2,2 2,2 1,1 1))

镂空面 POLYGON((1 1,,,),(2 2,,,),(3 3,,,))

会从第一个面中,去除后面的面

使用ST_Area方法计算面积时,只会算出几个面的面积,用第一个面减,如果后面的面有超过了第一个面范围的部分,会将超出的数值一并减掉。单纯的面积减面积。

注意:首末点要相同,用于连接成一个闭合的面

MultiPolygon

字段类型: multipolygon

样例: MULTIPOLYGON(((1 1,1 2,2 2,2 1,1 1)),((2 2,2 3,3 2,2 2)))

里面是多个polygon

三、数据插入

INSERT into 表明(字段名) VALUES(ST_GeomFromText('上方列举的数据格式'))

1

以插入一个point为例:

INSERT into test(point) VALUES(ST_GeomFromText('Point(5 5)'))

1

插入时使用ST_GeomFromText,也可使用GeomFromText,区别暂时没有研究。该方法是返回源字符串的相应类型的几何值

四、空间查询方法

空间查询相关方法

包含相关

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

1

2

3

上部分中的空间查询相关方法的判断方法,返回值是是否

相交

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中

ETC

验证数据是否合法

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

————————————————

版权声明:本文为CSDN博主「多多岛的小火车」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/xinlingjun2007/article/details/80457079

mysql空间计算_MySQL 空间计算 空间查询相关推荐

  1. mysql 地理空间支持_MySQL数据类型-地理空间数据类型

    1.MySQL地理空间数据类型 POINT,存储一个位置点数据 LINESTRING,存储一条线数据 POLYGON,存储一个多边形数据 MULTIPOINT,存储多个位置点数据 MULTILINES ...

  2. mysql清除表空间导入_MySQL 清除表空间碎片

    碎片产生的原因 (1)表的存储会出现碎片化,每当删除了一行内容,该段空间就会变为空白.被留空,而在一段时间内的大量删除操作,会使这种留空的空间变得比存储列表内容所使用的空间更大; (2)当执行插入操作 ...

  3. mysql insert慢_MySQL insert语句慢查询的优化

    近期发现MySQL slow log 里面有很多慢查询,而分析慢查询日志发现大量的慢查询是insert语句的.在高峰期(早上10点左右)半小时的慢查询量可以到28G左右.遂决定优化 优化方法: 1. ...

  4. mysql表空间权限_MySQL InnoDB表空间加密示例详解

    前言 从 MySQL5.7.11开始,MySQL对InnoDB支持存储在单独表空间中的表的数据加密 .此功能为物理表空间数据文件提供静态加密.该加密是在引擎内部数据页级别的加密手段,在数据页写入文件系 ...

  5. 清除mysql数据碎片_MySQL 清除表空间碎片方法总结

    mysql数据库会生成空间碎片了,这些空间碎片对于我们来讲影响不大但如果空间碎片多了会导致mysql查询缓存了,下面一起来看MySQL 清除表空间碎片方法吧,具体的如下所示. 碎片产生的原因 (1)表 ...

  6. mysql扩展文件_MySQL中的空间扩展

    19.6.2. 使用空间索引 优化程序将调查可用的空间索引是否能包含在使用某些函数的查询搜索中,如WHERE子句中的MBRContains()或MBRWithin()函数.例如,假定我们打算找出位于给 ...

  7. 空间mysql数据还原_mysql通过表空间来恢复或者传递数据

    mysql的备份工具通常有 mysqldump ,mysqlpump(5.7后新特性)等备份工具,这里我们可以尝试使用表空间进行传递 方式是:拷贝数据文件+拷贝表空间   对应innodb引擎就是 i ...

  8. mysql表空间不足_MySQL Innodb表空间不足的处理方法 风好大

    官方给出的解决方案: 添加和删除 InnoDB 数据和日志文件 这一节描述在InnoDB表空间耗尽空间之时,或者你想要改变日志文件大小之时,你可以做的一些事情. 最简单的,增加InnoDB表空间大小的 ...

  9. mysql表空间转移_mysql共享表空间扩容,收缩,迁移

    mysql共享表空间扩容,收缩,迁移 一.扩容innodb文件 1.关闭mysql db /usr/local/mysql/bin/mysqladmin -S /tmp/mysql3307.sock ...

  10. mysql字段自动计算_MySQL创建计算字段

    概述 存储在数据库表中的数据一般不是应用程序所需要的格式.这时候计算字段就发挥作用了.与前面各章介绍过的列不同,计算字段并不实际存在于数据库表中.计算字段是运行在SELECT语句内创建的. 可在SQL ...

最新文章

  1. 信息收集渠道:文本分享类网站Paste Site
  2. C语言 · 贪心算法
  3. 任务中断间的同步与通信概述
  4. 如何利用vw+rem进行移动端布局
  5. Infragistics NetAdvantage控件的使用:该关系不是此 DataView 指向的表的父关系
  6. 【PPT下载】第二批PPT干货限时免费分享
  7. HTTP错误404.3-Not Found
  8. osg::ComputeBoundsVisitor用法(二)
  9. 网络操作系统P12页答案
  10. 句子中单词首字母大写转换
  11. Android开发笔记(三)屏幕分辨率
  12. 解决载入自定义视图时出现InflateException #8:Error inflating的错误
  13. php url传递 加号,坑爹的URL编码-PHP正确处理URL中的加号(+)
  14. 新手:Mac状态栏图标管理技巧
  15. swiper实现移动端导航和内容板块的联动
  16. C-COT代码运行----Matlab2018a运行matconvnet深度卷积网络
  17. nginx配置-优化静态资源
  18. linux段错误core dumped,Linux下Segmentation fault(core dumped)简单调试方法
  19. Fragment如何实现左右分屏显示的
  20. 《A Traceable and Revocable Ciphertext-Policy Attribute-based Encryption Scheme Based》属性加密机制

热门文章

  1. IIS7增加mine类型,以便可以访问apk
  2. windows serve 2012部署操作系统之部署(三)
  3. 我所想的GIX4的权限
  4. C++ 作用域与生命周期
  5. 2018-2019-2 网络对抗技术 20165322 Exp8 Web基础
  6. nuxt generate 报错 window is not defined
  7. LibreOJ#6030. 「雅礼集训 2017 Day1」矩阵
  8. Ubuntu上安装jdk出现的错误
  9. PAT (Basic Level) Practise (中文)-1034. 有理数四则运算(20)
  10. 统计学习方法 --- 感知机模型原理及c++实现