最近学习了些MySQL geometry数据存储和计算,在这里记录下。
1. 环境
geometry推荐在5.6版本以上使用,尽管大部分功能在5.5已经可用,除了距离计算函数st_distance等新增函数。
2. Geometry主要相关类
2.1 Geometry
Geometry是所有此扩展中类型得基类,其他类型如Point,LineString,Polygon都是Geometry的子类。Geometry有一些属性,这些属性是所有其他几何类的共有属性:
type: 类型(Point, LineString,...)
SRID: 该值确定了用于描述定义几何对象的坐标空间的空间坐标系统,参考链接:https://www.cnblogs.com/Joetao/articles/2086846.html
coordinates: 坐标值
interior, boundary, exterior: interior是几何对象所展空间的部分,boundary是几何对象的边界,exterior是几何对象未占有的空间。
MBR: 能够覆盖几何对象的最小矩形,可以想象成信封,它由几何对象中最大最小的坐标值组合而成:
((MINX MINY, MAXX MINY, MAXX MAXY, MINX MAXY, MINX MINY))
simple/nonsimple: 几何对象是否简单
closed/not closed: 几何对象是否封闭
dimension: 维度数(Point: 0, LineString: 1, Polygon: 2)
2.2 Point
顾名思义就是点,有一个坐标值,没有长度、面积、边界。
2.3 LineString
顾名思义就是线,由一系列点连接而成。
如果线从头至尾没有交叉,那就是简单的(simple)
如果起点和终点重叠,那就是封闭的(closed)
2.4 Polygon
多边形。可以是一个实心平面形,即没有内部边界,也可以有空洞,类似纽扣。
2.5 MultiPoint, MultiLineString, MultiPolygon, GeometryCollection
这4种类型都是集合类,是多个Point、LineString或Polygon组合在一起而成。
3. 几何对象在MySQL中的数据格式
在MySQL中有3种表达几何对象的格式:
-->WKT(文本格式)
-->WKB(二进制格式)
-->MySQL内部存储格式
其中WKT格式简单易读,在这里着重介绍:
3.1 WKT
3.1.1 Point
POINT(121.213342 31.234532)
经度(longitude)在前,维度(latitude)在后,用空格分隔
3.1.2 LineString
LINESTRING(121.342423 31.542423,1