IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> MySQL中地理空间类型Geometry的使用(一) -> 正文阅读

[大数据]MySQL中地理空间类型Geometry的使用(一)

注意:在投影坐标系中不同的投影标准有不同的单位,如常用到的投影标准:3857以米为单位,4326以度为单位

一、Geometry数据类型有哪些?

1.Geometry介绍
  • MySQL中支持的几何数据类型包括Geometry(几何)、Point(点)、LineString(线)、Polygon(面)
    以及集合类型的MultiPoint(多点)、MultiLineString(多线)、MultiPolygon(多面)、GeometryCollection(混合数据类型)
  • 其中,Geometry可以表示其他任意类型的值,剩下的只能表示单个类型的值
2.Geometry类型

注意:数据中间不能有多余的空格

名称类型例如
Point点坐标POINT(103 35)
LineString线坐标LINESTRING(103 35,103 36,104 36,105 37)
Polygon面坐标POLYGON(103 35,104 35,104 36,103 36,103 35)
MultiPoint多点MULTIPOINT(103 35, 104 34,105 35)
MultiLineString多线MULTILINESTRING((103 35, 104 35), (105 36, 105 37))
MultiPolygon多面MULTIPOLYGON(((103 35,104 35,104 36,103 36,103 35)),((103 36,104 36,104 37,103 36)))
GeometryCollection混合类型GEOMETRYCOLLECTION(POINT(103 35), LINESTRING(103 35, 103 37))

二、Geometry数据格式

  • WKT(文本格式:在代码中的格式)
  • WKB(二进制格式:存储在Geometry类型的表字段中)

三、Geometry的常用函数

1.构造函数

构造函数会获取一种几何类型或几何的文本说明,然后创建一个几何

  • ST_Point:文本格式转Point格式(例如存表的时候)
  • ST_PointFromText:Point格式转文本格式(例如查询的时候)
  • ST_Polygon:文本格式转Polygon格式
  • ST_PolygonFromText:Polygon格式转文本格式
  • ST_PointFromWKB:以熟知二进制 (WKB) 表示和空间参考 ID 作为输入参数返回 ST_Point 类型的对象
2.存取器函数

函数都采用一个或多个几何作为输入,并返回关于几何的特定信息

  • ST_AsText:获取一个几何类型,然后返回其可识别的文本表示
  • ST_AsGeoJSON:将Geometry格式转为JSON格式
  • ST_Centroid:以面或多面为参数输入,然后返回位于几何的包络矩形中心的点
  • ST_Length:用于返回线串或多线串的长度
  • ST_MaxX:以几何为参数,返回最大的 X 坐标
  • ST_SRID:以几何对象作为输入参数,并返回其空间参考 ID
  • ST_X:返回点坐标的 X 坐标
  • ST_Y:返回点坐标的 Y 坐标
3.关系函数

关系函数将几何作为输入并确定各几何之间是否存在特定关系

  • ST_Contains:判断第一个几何对象是否完全包含第二个几何对象
  • ST_Disjoint:判断两个几何对象无交集
  • ST_Equals:判断两个几何对象是否完全相同
4.几何函数

函数利用空间数据并对其执行分析,然后返回新的空间数据

  • ST_Buffer:获取几何对象和距离,然后返回表示围绕源对象的缓冲区的几何对象(例如可以使用线坐标,构造一个线坐标50米之内的面)
  • ST_Distance:用于返回两个几何之间的距离。这一距离是两个几何的最近折点之间的距离
  • ST_Difference:获取两个几何对象,然后返回表示两个源对象之差的几何对象(例如,计算两个面积差)

更多相关函数可参考:ArcMap

四、使用实例

1.从Geometry字段获得信息
  • 通过点坐标 wzxx 字段、线坐标 sydwfw 字段,获得不同类型的数据
select ST_AsText(wzxx) as geometry, ST_X(wzxx) as x, ST_Y(wzxx) as y,
	ST_AsGeoJSON(wzxx) as wzxx, ST_AsText(sydwfw) as sydwfw
from tb_sydw
2.搜索指定范围之内的数据
  • 获得点坐标(103,36)2000米之内的数据
select * from tb_sydw
where st_distance_sphere(ST_POINTFROMTEXT('POINT(103,36)'), wzxx) < 2000
3.搜索指定范围之内的数据(Geohash算法提速)
  • 通过Geohash算法,可先将范围缩小,在进行精确查找,提高效率(注意边缘问题和曲线突变问题)

GeoHash是一种地址编码方法。他能够把二维的空间经纬度数据编码成一个字符串,然后通过编码前多少位,直接进行匹配,从而快速的锁定一个较小范围

select * from tb_sydw
where st_geohash(wzxx,5) like concat(st_geohash(ST_POINTFROMTEXT('POINT(103,36)'),5),'%')
4.获得路径多大范围内的面坐标
  • 通过路径坐标数据,获得路径多边形(如需要查找路径多少范围内的数据时),需要注意单位是度还是米,其中ST_Buffer_Strategy为线构造面时,起始点及拐弯处,精度策略

具体可参考:ST_Buffer

SELECT ST_AsText(
		 ST_Buffer(
			ST_GeomFromText('LINESTRING(103 35,103 36,104 36)'), 0.04,
					ST_Buffer_Strategy('end_round',4),ST_Buffer_Strategy('join_round',4)
         )
       )

函数后两个参数,影响箭头处圆滑程度,精度越高,构造出来的面越圆滑,消耗也更大

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章           查看所有文章
加:2021-09-18 10:14:40  更:2021-09-18 10:17:32 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 20:51:05-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码