10bet网址
MySQL 8.0参考手册
相关的文档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表示示例:

  • 一个

    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  | +---------------------------------------+
  • 一个LineString4分:

    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)表示用于将几何数据交换为表示为的二进制流包含几何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字节