WKB和PostGIS中返回的十六进制值之间有区别

时间:2019-02-12 02:35:47

标签: postgresql postgis wkb

我一直在进行PostGIS的实验,这是我注意到的:

假设我有一个定义如下的表:

CREATE TABLE IF NOT EXISTS geomtest (
    id SERIAL PRIMARY KEY,
    name TEXT NOT NULL,
    geom geometry(POLYGON, 4326) NOT NULL
);

然后添加以下多边形:

SRID=4326;POLYGON((0 0,0 10,10 10,10 0,0 0))

如果我自己查询geom列,则会得到该几何的十六进制表示。如果我改为调用ST_AsBinary(geom),则会得到二进制表示形式。

但是,当我同时将十六进制和二进制表示形式转换为字节数组时,得到的结果略有不同。第一个注释是通过将十六进制转换为二进制得到的结果,第二个注释直接来自ST_AsBinary()

//[1 3 0 0 32 230 16 0 0 1 0 0 0 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 36 64 0 0 0 0 0 0 36 64 0 0 0 0 0 0 36 64 0 0 0 0 0 0 36 64 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
//[1 3 0 0 0 1 0 0 0 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 36 64 0 0 0 0 0 0 36 64 0 0 0 0 0 0 36 64 0 0 0 0 0 0 36 64 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]

如您所见,前4个字节是相同的;表示它是大端还是小端,以及几何类型(在本例中为3)。其余字节也相同。唯一的区别是在前4个之后添加了一些额外的字节。

我想知道这是否与表示投影有关(SRID = 4326),但是我没有找到任何证据。

如果有人可以对此有所了解,我将不胜感激。

1 个答案:

答案 0 :(得分:1)

我没有检查字节,但是我确定区别在于WKB格式未包含的SRID。

改为尝试[{id: 1, children: [{id: 2}, {id: 3}, {id: 4}]}, {id: 5, children: [{id: 6}]}]