10bet网址
MySQL 5.7参考手册
相关的文档10bet官方网站 下载本手册 本手册摘录

11.4.3支持的空间数据格式

两个标准空间数据格式用于表示查询中的几何对象:

  • 众所周知的文本(WKT)格式

  • 众所周知的二进制(WKB)格式

在内部,MySQL以一种不同于WKT或WKB格式的格式存储几何值。(内部格式类似于WKB,但初始4字节表示SRID。)

有功能可用于在不同的数据格式之间转换;看第12.17.6节,“几何格式转换函数”

以下部分描述了MySQL使用的空间数据格式:

众所周知的文本(WKT)格式

几何值的众所周知的文本(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)表示用于将几何数​​据交换为表示的二进制流包含几何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)