本文整理自网络,侵删。
目录
- 一、数据类型
- 1.什么是MySQL空间数据
- 2.什么是geojson
- 3.格式化空间数据类型(geometry相互转换geojson)
- 二、空间分析
- 1、根据点位及半径,生成缓冲区
- 三、判断点位所在城市
- 四、常用的空间函数
前言:
不久前开发了一个地图相关的后端项目,需要提供一些点线面相关的存储、查询、分析相关的操作,于是对MySQL空间函数进行充分调研并应用在项目中;MySQL为空间数据存储及处理提供了专用的类型geometry(支持所有的空间结构),还有有细分类型Point
, LineString
, Polygon
,MultiPoint
,MultiLineString
,MultiPolygon
等等,我们了解了空间函数,在涉及到经纬度存储,路线存储方面的业务就能够使用此类型进行存储,使用相关空间函数进行分析业务实现,以下所有数据库操作基于MySQL5.7.20
。
一、数据类型
1.什么是MySQL空间数据
- MySQL提供了数据类型
geometry
用来存储坐标信息,geometry类型支持以下三种数据存储
还有多点
MULTIPOINT
(多点)、MULTILINESTRING
(多线)、MULTIPOLYGON
(多面)、GEOMETRYCOLLECTION
(集合,可放入点线面)等类型
2.什么是geojson
GeoJSON
是一种对各种地理数据结构进行编码的格式。GeoJSON对象可以表示几何、特征或者特征集合。GeoJSON
支持下面几何类型:点、线、面、多点、多线、多面和几何集合。GeoJSON
里的特征包含一个几何对象和其他属性,特征集合表示一系列特征。一个完整的GeoJSON数据结构总是一个(JSON术语里的)对象。在GeoJSON里,对象由名/值对--也称作成员的集合组成。对每个成员来说,名字总是字符串。成员的值要么是字符串、数字、对象、数组,要么是下面文本常量中的一个:"true
","false
"和"null
"。数组是由值是上面所说的元素组成
除了简单的点、线、面,为了满足复杂的地理环境及地图业务,还会有多点(
MultiPoint
),多线(MultiLineString
),多面(MultiPolygon
),几何集合(GeometryCollection
)等,熟悉json就可以快速的熟悉并应用geojson
3.格式化空间数据类型(geometry相互转换geojson)
数据库存储的空间数据通过可视化工具展示的明文结构为上面示例中所见,结构并不易于客户端解析,所以MySQL提供了几个空间函数用来解析及格式化空间数据,
geojson
是gis空间数据展示的标准格式,前端地图框架及后端空间分析相关框架都会支持geojson
格式
示例:
准备示例数据
函数应用示例
1.查询绿藤气象监测点信息将geometry处理成geojson格式
执行sql:
select id,point_name,ST_ASGEOJSON(point_geom) as geojson from meteorological_point where id = 1
查询结果:
2.新增一个点位信息,客户端提交的点位geometry字符串需要使用ST_GEOMFROMTEXT函数处理才能插入,否则会报错
客户端提交点位信息
{ "point_name":"新帅集团监测点", "geotext":"POINT(117.420671499 40.194914201)"} }
错误示例:
insert into meteorological_point(point_name, point_geom) values("新帅集团监测点", "POINT(117.420671499 40.194914201)")
报错 1416 - Cannot get geometry object from data you send to the GEOMETRY field
正确插入sql:
insert into meteorological_point(point_name, point_geom) values("新帅集团监测点", ST_GEOMFROMTEXT("POINT(117.420671499 40.194914201)"))
3.新增点位,客户端提交点位格式为geojson格式,需要使用ST_GeomFromGeoJSON函数处理后进行插入
相关阅读 >>
更多相关阅读请进入《mysql》频道 >>
数据库系统概念 第6版
机械工业出版社
本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。
转载请注明出处:木庄网络博客 » MySQL空间数据存储及函数
相关推荐
评论
管理员已关闭评论功能...
- 欢迎访问木庄网络博客
- 可复制:代码框内的文字。
- 方法:Ctrl+C。