两个标准空间数据格式用于表示查询中的几何对象:
众所周知的文本(WKT)格式
众所周知的二进制(WKB)格式
在内部,MySQL以一种不同于WKT或WKB格式的格式存储几何值。(内部格式类似于WKB,但初始4字节表示SRID。)
有功能可用于在不同的数据格式之间转换;看第12.17.6节,“几何格式转换函数”。
以下部分描述了MySQL使用的空间数据格式:
几何值的众所周知的文本(WKT)表示为以ASCII形式交换几何数据。OpenGis规范提供了一个Backus-Naur语法,指定编写WKT值的正式生产规则(参见第11.4节,“空间数据类型”)。
几何对象的WKT表示的示例:
一种
点
:点(15 20)
点坐标指定,没有分离逗号。这与SQL的语法不同
点()
函数,需要坐标之间的逗号。注意使用适合于给定空间操作的上下文的语法。例如,以下陈述都使用st_x()
从a中提取x坐标点
对象。类直接生成对象点()
功能。第二种使用转换为a的WKT表示点
和st_geom fromtext()
。mysql> SELECT ST_X(Point(15,20));+---------------------+ | ST_X((15日20点 )) | +---------------------+ | 15 | +---------------------+ mysql >选择ST_X (ST_GeomFromText(点20 (15)));+---------------------------------------+ | ST_X (ST_GeomFromText('(15点20 )')) | +---------------------------------------+ | 15 | +---------------------------------------+
一种
Linestring.
有四分:Linestring (0 0, 10 10, 20 25, 50 60)
点坐标对用逗号分隔。
一种
多边形
有一个外部环和一个内部环:多边形((0 0,10 0,10 10,0,00 0),(5 5,7 5,7,5 7,5 5))
一种
多点
有三个点
价值观:多点(0 0,20 20,60 60)
从MySQL 5.7.9开始,空间函数如
ST_MPointFromText ()
和st_geom fromtext()
的wkt格式表示多点
值允许以括号包围的值内的单个点。例如,以下两个函数调用都有效,而在MySQL 5.7.9之前,则第二个生成错误:ST_MPointFromText('MULTIPOINT (1 1), (2 2), (3 3))')
截至MySQL 5.7.9,输出
多点
值包括在每个点周围的圆括号。例如:mysql> SET @mp = 'MULTIPOINT(1 1, 2 2, 3 3)';mysql >选择ST_AsText (ST_GeomFromText (@mp));+---------------------------------+ | ST_AsText (ST_GeomFromText (@mp )) | +---------------------------------+ | 多点((1 - 1)、(2 - 2),(3 3 )) | +---------------------------------+
在MySQL 5.7.9之前,相同值的输出不包括每个点周围的括号:
mysql> SET @mp = 'MULTIPOINT(1 1, 2 2, 3 3)';mysql >选择ST_AsText (ST_GeomFromText (@mp));+ ------------------------------ + |st_astext(st_geom fromtext(@mp))|+ ------------------------------ + |多点(1 1,2 2,3 3)|+ ------------------------------
一种
MultiLineString
两者Linestring.
价值观:Multilinestring ((10 10,20 20), (15 15,30 15))
一种
多聚底
两者多边形
价值观:多聚底(((0 0.10 0,1010 10,0,0,00)),((5 5,7 5,7,57,5 5))))
一种
几何校会
由两者组成点
价值观和一体Linestring.
:GeometryCollection(点(10 10),点(30 30),Linestring(15 15,20 20))
几何值的众所周知的二进制(WKB)表示用于将几何数据交换为表示的二进制流团
包含几何WKB信息的值。该格式由OpenGIS规范定义(参见第11.4节,“空间数据类型”)。它也在ISO中定义SQL / MM第3部分:空间标准。
WKB使用1字节无符号整数,4字节无符号整数,8字节双精度编号(IEEE 754格式)。一个字节是八位。
例如,对应的WKB值点(1-1)
由21个字节组成的序列,每个由两个十六进制数字表示:
01010000000000000000000000f0bf.
该序列由下表所示的组件组成。
表11.2 WKB组件示例
成分 | 尺寸 | 价值 |
---|---|---|
字节顺序 | 1个字节 | 01. |
WKB类型 | 4个字节 | 01000000 |
X坐标 | 8字节 | 000000000000 f03f |
y坐标 | 8字节 | 000000000000 f0bf |
组件表示如下:
字节顺序指示符为1或0,表示小端或大端存储。小端字节顺序和大端字节顺序也分别称为网络数据表示(NDR)和外部数据表示(XDR)。
WKB类型是指示几何类型的代码。MySQL使用1到7的值来表示
点
那Linestring.
那多边形
那多点
那MultiLineString
那多聚底
,几何校会
。一种
点
值具有x和y坐标,每个坐标表示为双精度值。
对于更复杂的几何值的WKB值具有更复杂的数据结构,详见OpenGIS规范。
MySQL使用4个字节存储几何值,以表示SRID后跟值的WKB表示。有关WKB格式的说明,请参见众所周知二进制(WKB)格式。
对于WKB部分,这些MySQL特定的考虑因素适用:
字节顺序指示符字节为1,因为MySQL将几何图形存储为小端值。
MySQL支持几何类型
点
那Linestring.
那多边形
那多点
那MultiLineString
那多聚底
,几何校会
。不支持其他几何类型。
这长度()
函数返回值存储所需的字节空间。例子:
mysql> SET @g = ST_GeomFromText('POINT(1 -1)');mysql >选择长度(@g);+------------+ | 长度(@g ) | +------------+ | 25 | +------------+ mysql >选择十六进制(@g);+----------------------------------------------------+ | 十六进制(@g ) | +----------------------------------------------------+ | 000000000101000000000000000000 f03f000000000000f0bf | +----------------------------------------------------+
值长度为25字节,由这些组件组成(从十六进制值可以看出):
整数SRID 4个字节(0)
整数字节顺序为1字节(1 = little-endian)
4字节的整数类型信息(1 =
点
)双重精度X坐标(1)8字节
双重精度Y坐标的8个字节(-1)