首页 > 数据库 >空间数据库-msyql空间数据大纲

空间数据库-msyql空间数据大纲

时间:2023-05-22 15:13:28浏览次数:48  
标签:10 20 大纲 POINT 空间数据 msyql radius location center

MySql支持的类型

  • 点 POINT(15 20) 

  • 线 LINESTRING(0 0, 10 10, 20 25, 50 60) 

  • 面 POLYGON((0 0,10 0,10 10,0 10,0 0),(5 5,7 5,7 7,5 7, 5 5)) 

  • 多个点 MULTIPOINT(0 0, 20 20, 60 60) 

  • 多个线 MULTILINESTRING((10 10, 20 20), (15 15, 30 15)) 

  • 多个面 MULTIPOLYGON(((0 0,10 0,10 10,0 10,0 0)),((5 5,7 5,7 7,5 7, 5 5))) 

  • 集合 GEOMETRYCOLLECTION(POINT(10 10), POINT(30 30), LINESTRING(15 15, 20 20)),简称GEOMETRY,可以放入点、线、面。

空间数据操作

使用示例

# 创建表
CREATE DATABASE geodatabase;
USE geodatabase;
DROP TABLE IF EXISTS test;

DROP TABLE IF EXISTS points;
CREATE TABLE `points` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(20) NOT NULL DEFAULT '',
  `location` point NOT NULL,
  PRIMARY KEY (`id`),
  SPATIAL KEY `sp_index` (`location`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

空间数据插入

用通行的GEOMFROMTEXT函数实现WKT到数据库内部几何格式的转换。而GEOMFROMWKB函数用于转换WKB。

# 插入测试数据
INSERT INTO points VALUES (1,'天安门',POINT(116.397389,39.908149));
INSERT INTO points VALUES (2,'颐和园',POINT(116.273106,39.992634));

等价对比

INSERT INTO `points` VALUES(null,'a test string',
POINTFROMTEXT('POINT(15 20)'),
LINESTRINGFROMTEXT('LINESTRING(0 0, 10 10, 20 25, 50 60)'),
POLYGONFROMTEXT('POLYGON((0 0,10 0,10 10,0 10,0 0),(5 5,7 5,7 7,5 7, 5 5))'));

INSERT INTO `gis` VALUES(null,'a test strin222g',
GEOMFROMTEXT('POINT(15 20)'),
GEOMFROMTEXT('LINESTRING(0 0, 10 10, 20 25, 50 60)'),
GEOMFROMTEXT('POLYGON((0 0,10 0,10 10,0 10,0 0),(5 5,7 5,7 7,5 7, 5 5))'))

空间数据查询

用以下SQL从数据表中获得空间数据

SELECT id,name,ASTEXT(pnt),ASTEXT(line),ASTEXT(pgn) from `test`;
STEXT函数的功能与GEOMFROMTEXT的功能恰好相反,就是将数据从内部格式转换为WKT;相应的ASBINARY可以转换为WKB。

# 定义多边形
SET @rect = CONCAT('POLYGON((116.373871 39.915786,116.417645 39.916444,116.41816 39.900841,116.374214 39.900182,116.373871 39.915786))');
# 使用变量
select name,X(location),Y(location),Astext(location) from points where INTERSECTS( location, GEOMFROMTEXT(@rect) ) ;


常用查询语句案列

st_distance两点之间地理距离: 求两点之间的直线距离

select st_distance(ST_GEOMFROMTEXT("POINT(0 0)"),p.pot),p.`name` from Points p;

AREA计算面积

select AREA(tp.pgn),tp.`name `FROM `t_polygon` tp

ST_Intersects 图形是否有交叉重叠:

SELECT ST_Intersects(tp.pgn,ST_GEOMFROMTEXT("POLYGON((0 0,2 0,2 2,0 2,0 0))")),tp.`name` FROM `Points` tp;

查找指定矩形范围内的点:

SET @bbox = 'POLYGON((0 0, 10 0, 10 10, 0 10, 0 0))';
SELECT name, AsText(location) FROM Points WHERE Intersects( location, GeomFromText(@bbox) );

 

查找圆形区域内的点

这一步介绍如何查询圆形区域(通常用一个中心点和半径来表示)内的几何对象。

您首先想到的语句可能是:

SET @point = 'POINT(10 10)';

SET @radius = 20;

SELECT name, AsText(location) FROM Points WHERE Distance(location, GeomFromText(@point)) < @radius;

但是这条语句运行会出错,因为Distance函数还没有实现。MySql空间扩展文档说明中已经说明他们只实现了OpenGis标准的一部分。

一个替代的方式是使用intersect函数。

MySql空间扩展文档中已经指明各种几何对象可以使用intersect函数来判断几何对象是否和一个矩形相交。

这样在取得近似范围后我们可以再使用距离估算来过滤出正确的结果。

SET @center = GeomFromText('POINT(10 10)');

SET @radius = 30;

SET @bbox = CONCAT('POLYGON((',X(@center) - @radius, ' ', Y(@center) - @radius, ',',X(@center) + @radius, ' ', Y(@center) - @radius, ',',

X(@center) + @radius, ' ', Y(@center) + @radius, ',',X(@center) - @radius, ' ', Y(@center) + @radius, ',',X(@center) - @radius, ' ', Y(@center) - @radius, '))');

MBRWithin(g1,g2)

现在我需要的功能是查找一辆车在某一段时间内是否在一段区域内经过,用点来说明的话,就是一个空间坐标点在一个特定时间段内是否包含在一个特定的矩形区域内。下面这个函数应该能达到这个功能:

SELECT AsText(pnt) FROM `gis` WHERE MBRWithin(pnt,GeomFromText('Polygon(1 1,0 30,30 30,30 0,1 )'))

标签:10,20,大纲,POINT,空间数据,msyql,radius,location,center
From: https://www.cnblogs.com/Fooo/p/17420663.html

相关文章

  • ML-大纲
    至今共有14章,我将其分为以下几类。绪论;线性模型、神经网络、支持向量机;降维与度量学习、聚类;集成学习、特征选择和稀疏学习、半监督学习;强化学习;概率图模型1,2、图神经网络;生成模型; ......
  • 适合数据库管理者的七个空间数据库(在2021版本中)
    适合数据库管理者的七个空间数据库(在2021版本中)   华为云开发者联盟该内容已被华为云开发者联盟社区收录加入社区默认分类专栏收录该内容153篇文章18订阅订阅专栏空间数据和空间数据库的价值超越了地图和可视化。空间数据是可推动数据库管理......
  • 空间数据库
    空间数据库2012-05-07 1052举报简介: 引用:http://baike.baidu.com/view/1194566.htm空间数据库指的是地理信息系统在计算机物理存储介质上存储的与应用相关的地理空间数据的总和,一般是以一系列特定结构的文件的形式组织在存储介质之上的。引用:http://baike.baidu.com/view/......
  • shp数据插入sde连接的PostgreSQL库(二)---利用GeoTools读取shp数据并插入到空间数据库
    前言 上一篇介绍了如何利用Maven构建GeoTools,这一节将介绍下一步内容,如何读取shp文件里面的信息并插入到SDE连接的PostgresSQL现有表中。背景 从搭建环境到实现上述功能,大概用了7个工作日,从4月25日开始的,中间有个五一假期。公司的后端都不愿意接这活,只能自己上了。......
  • msyql 锁的分类
    1.以锁的粒度维度划分:1.1表锁1.1.1全局锁:加上全局锁之后,整个数据库只能允许读,不允许做任何写操作。1.1.2元数据锁/MDL锁:基于表的元数据加锁,加锁后整张表不允许其他事务操作。1.1.3意向锁:是InnoDB为了支持多粒度的锁,为了兼容行锁、表锁设计的,如给一条数据加了行锁,此时要加......
  • 郭东白的架构课-大纲
    1开篇词|没有战略意图,就成不了一个顶尖的架构师201|模块导学:是什么在影响架构活动的成败?302|法则一:为什么有些架构活动会没有正确的目标?403|法则一:如何找到唯一且正确的架构目标?504|法则二:架构师为什么要学习马斯洛的需求理论?606|法则二:拼多多是如何通过洞察用户人性而脱颖而......
  • msyql改密
    MySQL5.7的版本,因为在user表中没有password字段,一直使用下边的方式来修改root密码usemysql;updateusersetauthentication_string=password(“root”)whereuser=“root”;现在要用MySQL8.0.11版本,装好MySQL后用上边方法修改密码,一直报错。后来去掉password()函数后......
  • JavaSE大纲
    jdk8&9新特性Lambda表达式多线程IO流异常CollectionsListMapSet泛型可变参数Collection集合的使用StringBuffer&StringBuilder基本数据类型和字符串的相互转换装箱拆箱日期Arrays工具类&Object类静态内部类&字符串多态,构造方法接口继承封装抽象面向对象......
  • mysql - 在 MySQL 空间数据库中查找相交区域
    在MySQL数据库中,如何找到完全或部分落在距另一点一定距离内的圆形区域?有很多例子可以找到某个半径内的点,但没有找到与该半径相交的圆形区域。我有一份为某些区域(点和半径)提供服务的承包商列表。客户需要能够根据与他们的距离找到这些承包商。最佳答案我认为您正在寻找......
  • 全网最详细中英文ChatGPT-GPT-4示例文档-文章大纲智能生成器从0到1快速入门——官网推
    目录Introduce简介setting设置Prompt提示Sampleresponse回复样本APIrequest接口请求python接口请求示例node.js接口请求示例curl命令示例json格式示例其它资料下载ChatGPT是目前最先进的AI聊天机器人,它能够理解图片和文字,生成流畅和有趣的回答。如果你想跟上AI时代的潮流......