MySQL 空间数据 简单操作
在做的项目中需要,自己绘制区域图形,并存储起来,后面还有更新的需要,存文件不方面,想到现在数据库都支持空间数据库。
现在用的就是 MySQL ,就继续用 MySQL 来存储、管理空间数据。下面就做一些简单的记录。
创建空间数据
CREATE TABLE `t_pot` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL,
`pot` point DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
上面是建的一个包含点数据的表
CREATE TABLE `t_polygon` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL,
`pgn` polygon DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8;
上面是建的一个包含面数据的表
MySQL 中的空间数据类型:point、linestring、polygon、geometry、multipoint、multilinestring、multipolygon、geometrycollection
空间数据操作
下面是对数据的一些查询、分析等操作语句
先插入一些示例数据
INSERT INTO `t_polygon` VALUES ('', 'ABCD', GeomFromText('POLYGON((0 0, 2 0, 2 2, 0 2, 0 0))'));
INSERT INTO `t_polygon` VALUES ('', 'AEGF', GeomFromText('POLYGON((0 0, 4 0, 4 4, 0 4, 0 0))'));
INSERT INTO `t_polygon` VALUES ('', 'CEGFBD', GeomFromText('POLYGON((0 2, 0 4, 4 4, 4 0, 2 0, 2 2, 0 2))'));
INSERT INTO `t_polygon` VALUES ('', 'AHJIK', GeomFromText('POLYGON((0 0, 0 6, 6 6, 6 0, 0 0), (2 2, 4 4, 4 2, 2 2))'));
INSERT INTO `t_polygon` VALUES ('', 'DGK', GeomFromText('POLYGON((2 2, 4 4, 4 2, 2 2))'));
INSERT INTO `t_polygon` VALUES ('', 'GKJ', GeomFromText('POLYGON((4 4, 4 2, 6 6, 4 4))'));
INSERT INTO `t_polygon` VALUES ('', 'ADF', GeomFromText('POLYGON((0 0, 2 2, 4 0, 0 0))'));
INSERT INTO `t_polygon` VALUES ('', 'LDK', GeomFromText('POLYGON((1 1, 2 2, 4 2, 1 1))'));
INSERT INTO `t_pot` VALUES ('', 'A', GeomFromText('POINT(0 0)'));
INSERT INTO `t_pot` VALUES ('', 'B', GeomFromText('POINT(0 2)'));
INSERT INTO `t_pot` VALUES ('', 'C', GeomFromText('POINT(2 0)'));
INSERT INTO `t_pot` VALUES ('', 'D', GeomFromText('POINT(2 2)'));
--多面的更新
UPDATE street s SET s.spatial_data = GEOMETRYFROMTEXT('MULTIPOLYGON(((0 0, 2 0, 2 2, 0 2, 0 0)),((0 0, 4 0, 4 4, 0 4, 0 0)))') WHERE s.id = 4;
--根据字段更新
UPDATE street s SET s.coord_point = GeomFromText(CONCAT('POINT(',s.longitude,' ',s.latitude,')')) WHERE s.id = 1
--根据空间数据查询
SELECT * FROM street s WHERE s.coord_point = GeomFromText('POINT(116.7551422 27.9147577)')
一些空间对象方法
-- 包含,MBRCONTAINS,第一个参数是包含的要素,第二个是被包含的要素,第一个包含第二个返回1,否则返回0
SELECT py.`name`,p.`name`,MBRCONTAINS(py.pgn,p.pot) FROM t_polygon py,t_pot p; -- 被包含,MBRWITHIN,和上面一个参数相反,返回结果一样
SELECT py.`name`,p.`name`,MBRWITHIN(p.pot,py.pgn) FROM t_polygon py,t_pot p; -- 不相交,MBRDISJOINT,参数没有先后分,不相交返回1,否则返回1
SELECT py.`name`,p.`name`,MBRDISJOINT(p.pot,py.pgn) FROM t_polygon py,t_pot p; -- 相等,MBREQUAL,两个要素是否相等,相等返回1,否则返回0
SELECT py.`name`,p.`name`,MBREQUAL(p.pot,py.pgn) FROM t_polygon py,t_pot p; -- 相交,MBREQUAL,两个要素是否相交,相交返回1,否则返回0
SELECT py.`name`,p.`name`,MBRINTERSECTS(p.pot,py.pgn) FROM t_polygon py,t_pot p; -- 重叠,MBROVERLAPS,两个要素是否重叠,重叠返回1,否则返回0
SELECT py.`name`,p.`name`,MBROVERLAPS(p.pot,py.pgn) FROM t_polygon py,t_pot p; -- 相切,MBREQUAL,两个要素是否相切,相切返回1,否则返回0
SELECT py.`name`,p.`name`,MBREQUAL(p.pot,py.pgn) FROM t_polygon py,t_pot p;
对于上面的几个方法,其空间关系是用的:最小边界矩形做的分析。
所以需要进行的时候比较准确的时候,用的应该是:对象形状做分析。
上面的几个函数的 “MBR” 替换为 “ST_” 就可以了
MySQL 空间数据 简单操作的更多相关文章
- Linux下MySQL的简单操作
Linux下MySQL的简单操作 更改mysql数据库root的密码 首次进入数据库是不用密码的: [root@localhost ~]# /usr/local/mysql/bin/mysql -ur ...
- MySQL基本简单操作03
MySQL基本简单操作 现在我创建了一个数据表,表的内容如下: mysql> select * from gubeiqing_table; +----------+-----+ | name | ...
- MySQL基本简单操作02
MySQL基本简单操作 先进入Mysql容器. [root@promote ~]# docker exec -it mysql /bin/bash root@30d60b852cf5:/# mysql ...
- MySQL基本简单操作01
MySQL基本简单操作 学会了安装Docker,那么就将它利用起来.(/滑稽脸) 之前想学习Mysql(Windows下配置真麻烦),学会了Docker就方便了,直接使用Docker创建一个Mysql ...
- Ubuntu 安装mysql和简单操作
http://www.cnblogs.com/zhuyp1015/p/3561470.html ubuntu上安装mysql非常简单只需要几条命令就可以完成. 1. sudo apt-get inst ...
- python对mysql进行简单操作
python 连接MySQL数据库,进行简单操作 一.连接MySQL数据库,关闭连接 import pymysql db = pymysql.connect(host="xxx.xxx.x. ...
- Ubuntu下安装MySQL及简单操作
Ubuntu上安装MySQL非常简单只需要几条命令就可以完成. 1. sudo apt-get install mysql-server 2. apt-get isntall mysql-client ...
- MySQL数据库简单操作
title date tags layout MySQL简单操作 2018-07-16 Linux post 登录mysql mysql -h 主机名 -u 用户名 -p 查看所有数据库 show d ...
- MySQL 基础 简单操作
一.数据库基础 什么是数据库 数据库:保存有组织的数据的容器(通常是一个文件或一组文件). 表:是一种结构化的文件,可以用来存储数据(类似Excel表).数据库就是由成千上万个表组成. 什么事SQL ...
随机推荐
- mac 上更改环境变量
第一次配置Mac的环境变量,到网上转了一圈才找到正确方法. 打开终端,新建.bash_profile文件在~/目录下(如果电脑里已经有了这个文件,跳过这一步) touch ~/.bash_profil ...
- 洛谷 题解 P1772 【[ZJOI2006]物流运输】
题目描述 物流公司要把一批货物从码头\(A\)运到码头\(B\).由于货物量比较大,需要\(n\)天才能运完.货物运输过程中一般要转停好几个码头.物流公司通常会设计一条固定的运输路线,以便对整个运输过 ...
- 在ensp上简单的配置交换机
在ensp中我们经常用到交换机,但是我们还没有配置过,下面我们来学习一下怎样简单的配置交换机的速率,双工模式等. 全双工:同时发送和接收数据 半双工:只能在一个时间做一件事 速率:交换机每秒 ...
- transform-transition-animation(2)
transform transform : none | <transform-function> [ <transform-function> ]* 也就是: transfo ...
- gcc 不同版本的安装
系统环境centos 6.5 使用root用户进行安装,此方法会将gcc安装至/usr/bin目录下 curl -Lks http://www.hop5.in/yum/el6/hop5.repo ...
- Mysql 千万数据快速导入
最近碰到个项目,需要 千万条数据入库的问题,有原本的 类 csv 文件导入, 统计了下 数据行大概有 1400W 行之多 二话不说, 建表,直接 load LOAD DATA LOCAL INFIL ...
- How to change default root@ email address linux / postfix / centos?
Change root@hostname to different email address By default, any email sent by system is sent to root ...
- scrapy框架3——请求传参
当使用scrapy爬取的数据不在同一张页面中(一次请求与数据后解析无法获得想要的全部数据),需要请求传参,在第一次解析时实例化item,将item传递,再次将请求到的数据解析后,封装在item中. 关 ...
- python 之 前端开发( DOM操作)
11.47 DOM操作 查找节点: 11.471 直接查找 document.getElementById //根据ID获取唯一一个标签 document.getElementsByClassName ...
- 100天搞定机器学习|day54 聚类系列:层次聚类原理及案例
几张GIF理解K-均值聚类原理 k均值聚类数学推导与python实现 前文说了k均值聚类,他是基于中心的聚类方法,通过迭代将样本分到k个类中,使每个样本与其所属类的中心或均值最近. 今天我们看一下无监 ...