mysql json数组查询 mysql解析json字符串数组


前言不久前开发了一个地图相关的后端项目,需要提供一些点线面相关的存储、查询、分析相关的操作,于是对MySQL空间函数进行充分调研并应用在项目中;MySQL为空间数据存储及处理提供了专用的类型geometry(支持所有的空间结构),还有有细分类型Point, LineString, Polygon,MultiPoint,MultiLineString,MultiPolygon等等,我们了解了空间函数,在涉及到经纬度存储,路线存储方面的业务就能够使用此类型进行存储,使用相关空间函数进行分析业务实现,以下所有数据库操作基于MySQL5.7.20 。
数据类型 1.什么是MySQL空间数据MySQL提供了数据类型geometry用来存储坐标信息,geometry类型支持以下三种数据存储数据结构示例说明POINT(点)POINT(113.3 40.08)用于存储点位信息,包含经纬度信息LINESTRING(线)LineString(84.070 33.801,99.52 30.292)用来存储路线信息POLYGON(面)POLYGON((84.070 33.801, 84.100 33.801,84.070 33.801))用来存储面数据

还有多点MULTIPOINT(多点)、MULTILINESTRING(多线)、MULTIPOLYGON(多面)、GEOMETRYCOLLECTION(集合,可放入点线面)等类型,就不一一赘述了
2.什么是geojson
GeoJSON是一种对各种地理数据结构进行编码的格式 。GeoJSON对象可以表示几何、特征或者特征集合 。GeoJSON支持下面几何类型:点、线、面、多点、多线、多面和几何集合 。GeoJSON里的特征包含一个几何对象和其他属性,特征集合表示一系列特征 。一个完整的GeoJSON数据结构总是一个(JSON术语里的)对象 。在GeoJSON里,对象由名/值对–也称作成员的集合组成 。对每个成员来说,名字总是字符串 。成员的值要么是字符串、数字、对象、数组,要么是下面文本常量中的一个:”true”,”false”和”null” 。数组是由值是上面所说的元素组成
几何类型格式点{ “type”: “Point”, “coordinates”: [经度, 纬度] }线{ “type”: “LineString”, “coordinates”: [ [ 经度, 纬度 ], [ 经度, 纬度 ] ] }面{“type”:”Polygon”,”coordinates”:[[[经度,纬度],[经度,纬度],[经度,纬度]]]}
除了简单的点、线、面,为了满足复杂的地理环境及地图业务,还会有多点(MultiPoint),多线(MultiLineString),多面(MultiPolygon),几何集合(GeometryCollection)等,熟悉json就可以快速的熟悉并应用geojson
3.格式化空间数据类型(geometry相互转换geojson)数据库存储的空间数据通过可视化工具展示的明文结构为上面示例中所见,结构并不易于客户端解析,所以MySQL提供了几个空间函数用来解析及格式化空间数据,geojson是gis空间数据展示的标准格式,前端地图框架及后端空间分析相关框架都会支持geojson格式操作函数geojson -> geometryST_GeomFromGeoJSONgeometry -> geojsonST_ASGEOJSONgeometry字符串 -> geometryST_GEOMFROMTEXT示例准备示例数据id(bigint)point_name(varchar)point_geom(geometry)1绿藤气象监测点POINT(116.410671499 40.1849142015)2长藤资本监测点POINT(113.3 40.08)函数应用示例 1.查询绿藤气象监测点信息将geometry处理成geojson格式

推荐阅读