简述

MySQL在5.7之后的版本支持了空间索引,而且支持OpenGIS几何数据模型。国内的MySQL相关的书籍都比较老了,在这方面有详细描述的还没有见过。有一本比较新的PostgreSQL的数据介绍过空间搜索相关的内容,但是也不够详细。所以对于这方面的内容,不管是MySQL还是PostgreSQL,都建议直接去看官方文档,都有很详细的示例。

MySQL官方文档主页
MySQL5.7版本空间数据参考文档
MySQL支持的空间数据格式
空间索引和 ST_Geometry
ST_Geometry 的关系函数

MySQL在空间索引这方面遵循OpenGIS几何数据模型规则,详情可见

MySQL中 OpenGIS Geometry Model
OpenGIS Implementation Specification for Geographic information - Simple feature access - Part 2: SQL option

下面记录一下简单的使用。

1、创建一个带有空间索引的表

我这里主要是用于检索遥感影像数据的,这里就只创建了两个字段,一个是影像路径path,一个是有效外包框box

CREATE TABLE `gim` (`path` varchar(512) NOT NULL,`box` geometry NOT NULL,PRIMARY KEY (`path`),SPATIAL KEY `box` (`box`)
) ;

这里创建好之后,就可以往里面插入数据了。

2、插入数据

数据的插入和普通的数据插入一样,只是geometry数据需要使用st_geomfromtext等函数来构造,相关的文档参考在这里gis-data-formats还有这个populating-spatial-columns。

这里只展示一个简单数据插入,这里我使用的是单多边形,只有四个点(逆时针顺序),使用WKT描述几何数据

insert into gim (path,box) values('%s',ST_GeomFromText('Polygon((116.18866 39.791107, 116.124115 39.791107, 116.18866 39.833679, 116.124115 39.833679, 116.18866 39.791107))'));

我这里写了个程序,插入了上千条数据,方便后面的搜索。

3、查询数据

查询这里和普通的查询也一样,只是where字句后面使用空间过滤相关选项就是。
使用空间索引进行查询的相关文档在这里using-spatial-indexes

MySQL的文档中只提及了MBRContainsMBRWithin两种方式,经过测试,MBRIntersectsMBREqualMBROverlapsMBRTouchesMBRDisjoint都可以使用。
SpatiaLite`中有一幅关于空间检索的图,放在这里做个参考。
SpatiaLite有一篇详细介绍空间索引的文档,链接在这里http://www.gaia-gis.it/spatialite-2.1/SpatiaLite-manual.html

一个简单的查询示例:

select * from gim where MBRContains(st_geomfromtext('polygon((116.438599 39.832306, 116.374054 39.832306, 116.438599 39.876251, 116.374054 39.876251, 116.438599 39.832306))'),box);

返回结果如下:

+------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------+
| path                                                                   | box                                                                                                                     |
+------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------+
| file:///root1/北京/北京分区/æœé˜³åŒº/æœé˜³åŒº2016/J50G004039.tif | POLYGON((116.438599 39.832306, 116.374054 39.832306, 116.438599 39.876251, 116.374054 39.876251, 116.438599 39.832306)) |
| file:///root1/北京/北京分区/æœé˜³åŒº/æœé˜³åŒº2005/J50G004039.tif | POLYGON((116.438599 39.832306, 116.374054 39.832306, 116.438599 39.876251, 116.374054 39.876251, 116.438599 39.832306)) |
| file:///root1/北京/北京分区/æœé˜³åŒº/æœé˜³åŒº2003/J50G004039.tif | POLYGON((116.438599 39.832306, 116.374054 39.832306, 116.438599 39.876251, 116.374054 39.876251, 116.438599 39.832306)) |
| file:///root1/北京/北京分幅/J50G004039.tif                       | POLYGON((116.438599 39.832306, 116.374054 39.832306, 116.438599 39.876251, 116.374054 39.876251, 116.438599 39.832306)) |
+------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------+
4 rows in set



MySQL空间索引简单使用相关推荐

  1. linux 用root安装mysql数据库_Linux上安装Mysql及简单的使用详解

    1. 安装mysql sudo apt-get update sudo apt-get install mysql-server sudo apt-get install python-mysqldb ...

  2. Ubuntu 安装mysql和简单操作

    2019独角兽企业重金招聘Python工程师标准>>> ubuntu上安装mysql非常简单只需要几条命令就可以完成. 1. sudo apt-get install mysql-s ...

  3. MySQL的简单使用-(一)

    MySQL的简单使用 使用MySQL命令行工具 Windows 用户使用: MySQL Client, 输入密码 Linux: mysql -u用户名 -p密码mysql -uroot -p 显示数据 ...

  4. 使用 NodeJS+Express+MySQL 实现简单的增删改查

    关于node.js暂时记录如下,以后有时间一定学习 文章来自简书,作者:sprint,2016-07 使用 Node.js + Express+MySQL 实现简单的增删改查 https://www. ...

  5. navicat fo mysql 教程_Navicat For MySQL的简单使用教程

    1.前提是必须先安装好MySQL数据库(Mac下安装MySQL数据库见前一篇) 2.安装Navicat 3.点击navicate左上角:连接->MySQL->先测链接下,如果提示连接成功, ...

  6. java对mysql的简单操作的综合运用——登录+注册+修改密码

    本篇博客是java对mysql的简单操作的综合运用--登录系统.java对mysql的简单操作的综合运用--注册系统.java对mysql的简单操作的综合运用--修改密码系统的整合. 因为使用的是数据 ...

  7. java对mysql的简单操作的综合运用——修改密码系统

    本篇博客运用到: java连接mysql数据库连接 java对mysql的简单操作--修改数据 下面是修改密码系统的完整代码 import java.awt.event.ActionEvent; im ...

  8. java对mysql的简单操作的综合运用——登录系统

    本篇博客运用到: java连接mysql数据库连接(数据搜索) 下面是登录系统的完整代码 import java.awt.event.ActionEvent; import java.awt.even ...

  9. java对mysql的简单操作——增删改查的总结

    增删改查的详细内容可以点击以下链接: java对mysql的简单操作--增加数据 java对mysql的简单操作--删除数据 java对mysql的简单操作--修改数据 java连接mysql5.1教 ...

  10. java对mysql的简单操作的综合运用——注册系统

    本篇博客运用到: java连接mysql数据库连接 java对mysql的简单操作--增加数据 下面是注册系统的完整代码 import java.awt.event.ActionEvent; impo ...

最新文章

  1. 特定场景下SQL的优化
  2. ESP8266串口处理
  3. 信息系统项目管理师优秀论文:项目风险管理--jiangyiwu
  4. 英特尔在中国投资55亿美元非易失性存储项目投产
  5. mysql 中文乱码解决方法
  6. 两种进入容器的方法 - 每天5分钟玩转 Docker 容器技术(23)
  7. 私有方法,私有属性在继承中的应用
  8. nlp-tutorial代码注释3-3,双向RNN简介
  9. 这家云提供商虽挫败勒索攻击,但仍需支付赎金
  10. 轻重搭配 模拟 贪心
  11. 躲开追捕不容易 大数据时代我们如何抓小三
  12. 如何在SVN创建分支版本
  13. centos7下载及安装步骤
  14. GoLang的安装和使用
  15. Python:实现simpson approx辛普森算法(附完整源码)
  16. 剑指 Offer II 075. 数组相对排序(中等 排序 数组)
  17. 华硕主板无盘启动bios设置_华硕主板bios设置图解教程
  18. 2021年阿里巴巴Java岗位面试(已拿offer)
  19. 谈谈温度、压力、同位素设定对量子化学计算结果产生的影响
  20. matlab频谱校正方法,离散频谱的比值校正法

热门文章

  1. maven gradle等三放jar包仓库
  2. PHP实现微博的同步发送(转)
  3. keepalived + web高可用集群实现主从模型、双主模型配置
  4. 路由重发布Route Redistribution
  5. 三、后台实战——用户登录之JWT
  6. ffmpeg音视频同步原理
  7. I,P,B帧和PTS,DTS的关系,GOP相关
  8. SylixOS 缺页异常
  9. TMS570LC43xx SylixOS can 驱动
  10. 数据结构经典案例_《数据结构》书评与 MOOC 推荐