MySQL数据类型 - 空间数据类型
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL数据类型 - 空间数据类型 相关的知识,希望对你有一定的参考价值。
支持的空间数据格式
有两种标准空间数据格式用于表示查询中的几何对象:
●已知文本(WKT)格式
●已知二进制(WKB)格式
在内部,mysql用与WKT或WKB格式不同的格式存储几何值。(内部格式类似于WKB,但有一个4个字节表示SRID。)
MySQL提供函数可用于在不同的数据格式之间进行转换。
以下部分介绍MySQL使用的空间数据格式:
已知文本(WKT)格式
用已知文本(WKT)表示几何值是为用ASCII格式交换几何数据而设计的。OpenGIS规范提供了一个Backus Naur语法,它指定了写入WKT值的正式生成规则。
几何体对象的WKT表示示例:
●Point :
点坐标不使用逗号分隔。这与SQL Point()函数的语法不同,后者要求坐标之间有逗号。注意使用适合给定空间操作上下文的语法。例如,以下语句都使用ST_X()从Point对象提取X坐标。第一种方法直接使用Point()函数生成对象。第二种方法使用WKT表示,该表示通过ST_GeomFromText()转换为一个Point。
●有4个点的LineString对象
点坐标对儿用逗号隔开。
●具有一个外环和一个内环的Polygon:
●具有三个Point值的MultiPoint:
接受WKT格式表示的MultiPoint值的空间函数,如ST_MPointFromText()和ST_GeomFromText(),允许将值中的各个点用括号括起来。例如,以下两个函数调用都有效:
●有两个LineString值的MultiLineString:
●具有两个Polygon值的MultiPolygon:
●包含两个Point值和一个LineString值的GeometryCollection:
已知二进制(WKB)格式
用已知二进制(WKB)表示的几何值,用于交换二进制流格式的几何数据,用包含几何WKB信息的BLOB值表示。该格式由OpenGIS规范定义。ISO SQL/MM第3部分:空间标准中也对其进行了定义。
WKB使用1字节无符号整数、4字节无符号整数和8字节双精度数字(IEEE 754格式)。一个字节有八位。
例如,对应于POINT(1 -1)的WKB值由21个字节组成,每个字节由两个十六进制数字表示:
该序列由下表所示的成分组成。
构成 | 大小 | 值 |
---|---|---|
字节顺序 | 1 byte | 01 |
WKB类型 | 4 bytes | 01000000 |
X 坐标 | 8 bytes | 000000000000F03F |
Y 坐标 | 8 bytes | 000000000000F0BF |
构成表示如下:
●字节顺序指示符为1或0,表示小端或大端存储。小端字节顺序和大端字节顺序也分别称为网络数据表示(NDR)和外部数据表示(XDR)。
●WKB类型是指示几何体类型的代码。MySQL使用从1到7的值来表示Point、LineString、Polygon、MultiPoint、MultiLineString、MultiPolygon和GeometryCollection。
●Point值有X和Y坐标,每一个坐标都表示为双精度值。
如OpenGIS规范中所述,对于更加复杂的几何值,WKB值具有更复杂的数据结构。
内部几何存储格式
MySQL使用4个字节表示SRID,其后跟随值的WKB表示。有关WKB格式的说明,请参阅上面的讲解。
对于WKB部分,以下针对MySQL的注意事项适用:
●字节顺序指示符字节是1,因为MySQL采用小端存储来存储几何值。
●MySQL支持Point、LineString、Polygon、MultiPoint、MultiLineString、MultiPolygon和GeometryCollection等几何类型。不支持其他几何体类型。
●只有GeometryCollection可以为空。这样的值表示有0个存储元素。
●可以顺时针和逆时针指定Polygon环。MySQL在读取数据时会自动翻转环。
笛卡尔坐标以空间参照系的长度单位存储,X值在X坐标系中,Y值在Y坐标系中。轴方向是由空间参照系指定的方向。
地理坐标以空间参照系的角度单位存储,经度在X坐标系中,纬度在Y坐标系中。轴方向和子午线由空间参照系指定。
函数LENGTH()返回值存储所需的字节数。例如:
值长度为25个字节,由以下成分组成(从十六进制值可以看出):
●整数SRID为4字节(0)
●1字节用于整数字节顺序(1=小端)
●4字节用于整数类型信息(1=Point)
●双精度X坐标为8字节(1)
●双精度Y坐标为8字节(?1)
官方参考文档:
https://dev.mysql.com/doc/refman/8.0/en/gis-data-formats.html
以上是关于MySQL数据类型 - 空间数据类型 的主要内容,如果未能解决你的问题,请参考以下文章