两种标准的空间数据格式用于表示查询中的几何对象:
知名文本(WKT)格式
众所周知的二进制(WKB)格式
在内部,MySQL以一种不同于WKT或WKB格式的格式存储几何值。(内部格式类似于WKB,但初始的4个字节表示SRID。)
有一些函数可以在不同的数据格式之间进行转换;看到第12.17.6节“几何格式转换函数”.
以下章节描述MySQL使用的空间数据格式:
几何值的已知文本(WKT)表示设计用于以ASCII格式交换几何数据。OpenGIS规范提供了一个Backus-Naur语法,它指定了编写WKT值的正式生成规则(参见第11.4节“空间数据类型”).
几何对象的WKT表示示例:
一个
点
:20点(15)
点坐标没有逗号分隔。这与SQL的语法不同
点()
函数,该函数需要在坐标之间使用逗号。注意使用适合于给定空间操作上下文的语法。例如,以下语句都使用ST_X ()
从a中提取x坐标点
对象。方法直接生成对象点()
函数。第二个使用转换为的WKT表示点
与ST_GeomFromText ()
.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
4分:Linestring (0 0, 10 10,20 25, 50 60)
点坐标对用逗号分隔。
一个
多边形
有一个外圈和一个内圈:多边形((0 0,10 0,10 10,0 10,0 0),(5 5,7 5,7 7,5 7,5 5))
一个
多点
有三个点
价值观:多点(0 0,20 20,60 60)
空间功能如
ST_MPointFromText ()
而且ST_GeomFromText ()
的wkt格式表示多点
值允许值中的单个点用圆括号括起来。例如,以下两个函数调用都是有效的:ST_MPointFromText('MULTIPOINT (1,1,2,3,3)') ST_MPointFromText('MULTIPOINT ((1,1), (2,2), (3,3))')
一个
MultiLineString
有两个LineString
价值观:Multilinestring ((10 10,20 20), (15 15,30 15))
一个
多个多边形
有两个多边形
价值观:多多边形((0 0,10 0,10 10,0 10,0 0)),((5 5,7 5,7 7,5 7,5 5))
一个
GeometryCollection
组成的两个点
值和一个LineString
:几何集合(点(10 10),点(30 30),linestring (15 15, 20 20))
几何值的已知二进制(WKB)表示用于将几何数据交换为表示为的二进制流团
包含几何WKB信息的值。这种格式是由OpenGIS规范定义的第11.4节“空间数据类型”).它在ISO中也有定义SQL/MM第3部分:空间标准。
WKB使用1字节无符号整数、4字节无符号整数和8字节双精度数(IEEE 754格式)。一个字节是8位。
例如,对应的WKB值点(1 - 1)
由21个字节的序列组成,每个字节由两个十六进制数字表示:
0101000000000000000000 f03f000000000000f0bf
该序列由下表所示的组件组成。
表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
,多个多边形
,GeometryCollection
.一个
点
值具有X和Y坐标,每一个都表示为双精度值。
更复杂几何值的WKB值具有更复杂的数据结构,详见OpenGIS规范。
MySQL使用4个字节存储几何值,表示SRID,后面是该值的WKB表示。有关WKB格式的描述,请参见众所周知的二进制(WKB)格式.
对于WKB部分,适用于以下mysql特定的考虑:
字节顺序指示符字节为1,因为MySQL将几何图形存储为小端序值。
MySQL支持的几何类型
点
,LineString
,多边形
,多点
,MultiLineString
,多个多边形
,GeometryCollection
.不支持其他几何类型。只有
GeometryCollection
可以是空的。这样的值与0个元素一起存储。多边形环可以按顺时针和逆时针方向指定。MySQL在读取数据时自动翻转环。
笛卡尔坐标存储在空间参考系统的长度单位中,X坐标为X坐标,Y坐标为Y坐标。轴方向是由空间参考系统指定的方向。
地理坐标存储在空间参考系统的角度单位中,经度存储在X坐标中,纬度存储在Y坐标中。轴向和子午线是由空间参考系统指定的。
的长度()
函数返回值存储所需的字节空间。例子:
mysql> SET @g = ST_GeomFromText('POINT(1 -1)');mysql >选择长度(@g);+------------+ | 长度(@g ) | +------------+ | 25 | +------------+ mysql >选择十六进制(@g);+----------------------------------------------------+ | 十六进制(@g ) | +----------------------------------------------------+ | 000000000101000000000000000000 f03f000000000000f0bf | +----------------------------------------------------+
该值的长度是25字节,由以下组件组成(从十六进制值可以看出):
整数SRID(0)的4字节
整数字节顺序为1字节(1 = little-endian)
整数类型信息(1 =
点
)8字节用于双精度X坐标(1)
双精度Y坐标(−1)8字节