简介

OpenGIS 规范定义了两种表示空间对象的标准方式:Well-Know Text (WKT) 形式和Well-Known Binary(WKB) 形式。WKT 和 WKB 都包含矢量几何要素的对象类型和构成对象的坐标的信息。WKT可读性强,更方便阅读识别,而在实际数据传输和存储中则以WKB形式。

WKT 格式

要素空间对象的文本表示(WKT)示例如下:

三种基本类型点POINT,线LINESTRING, 面POLYGON,如下:

  • POINT(0 0)

  • POINT Z (0 0 0) Z 一般代表高程信息

  • POINT ZM (0 0 0 0) Z 一般代表高程信息,M一般代表其他信息如距离、温度、浓度等

  • LINESTRING(0 0,1 1,1 2)

  • POLYGON((0 0,4 0,4 4,0 4,0 0),(1 1, 2 1, 2 2, 1 2,1 1))

除了上面三种基本类型外,下面四个类型是对上面三种的扩展,通过加入MULTI关键字,代表多个的意思,多点MULTIPOINT, 多线MULTILINESTRING, 多个多边形MULTIPOLYGON,而GEOMETRYCOLLECTION则是多个简单要素的集合,可以包含 点、线、面等任意类型。

  • MULTIPOINT((0 0),(1 2))

  • MULTIPOINT Z ((0 0 0),(1 2 3))

  • MULTILINESTRING((0 0,1 1,1 2),(2 3,3 2,5 4))

  • MULTIPOLYGON(((0 0,4 0,4 4,0 4,0 0),(1 1,2 1,2 2,1 2,1 1)), ((-1 -1,-1 -2,-2 -2,-2 -1,-1 -1)))

  • GEOMETRYCOLLECTION(POINT(2 3),LINESTRING(2 3,3 4))

WKB 格式

WKB采用二进制进行存储,更方便于计算机处理,因此广泛运用于数据的传输与存储,以二位点Point(1 1)为例,

其WKB表达如下:

 01 0100 0020 E6100000 000000000000F03F 000000000000F03F

1.byteOrder

    • 第一个字节表示编码方式,00为使用big-endian编码(XDR),01为使用little-endian编码(NDR)。他们的不同仅限于在内存中放置字节的顺序,比如我们将0x1234abcd写入到以0×0000开始的内存中,则结果如下表:

2.wkbType

第二到第九字节对矢量数据基本信息进行了定义

    • 第二与第三个字节规定了矢量数据的类型,如例子中的0100代表Point;

    • 第三与第四个字节规定了矢量数据的维数,如例子中的0020代表该点是二位的;

    • 第五到第九个字节规定了矢量数据的空间参考SRID,如例子中的E6100000是4326的整数十六位进制表达

3.structPoint

    • 第十个字节开始,每16个字节就代表一个坐标对,如例子中的000000000000F03F是浮点型1的十六进制表达

WKT与WKB格式转换

bytea WKB = ST_AsBinary(geometry);text WKT = ST_AsText(geometry);geometry = ST_GeomFromWKB(bytea WKB, SRID);geometry = ST_GeometryFromText(text WKT, SRID);
举报/反馈

郭善飞飞

0获赞 1粉丝
一个飞不行得两个飞啊
关注
0
0
收藏
分享