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



我一直在用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个字节是相同的;表示它是大endian还是小endian,以及几何体的类型(3,在本例中为多边形)。其余的字节也是一样的。唯一的区别是在前4个字节之后添加了一些额外的字节。

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

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

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

请改用st_asewkb

最新更新