PostGIS中数据类型Geography(Point,4326)的大小?

时间:2015-05-26 09:45:59

标签: size postgis point geography

它的构造函数采用POINT和SRID。由于POINT是两个双精度数(每个8个字节),SRID是一个整数(4个字节),可以假设整个结构需要8 * 2 + 4 = 20个字节的存储空间吗?

1 个答案:

答案 0 :(得分:8)

看看ST_Mem_Size。这也为您提供了toast表的大小,因此比pg_total_relation_size和其他内置的Postgres函数更合适 - 虽然这仅适用于较大的几何。回到你的问题,一点,

SELECT ST_Mem_Size(ST_MakePoint(0, 0));

返回32个字节,这是4个双倍(而不是你期望的2个)。原因是存在其他元数据,例如存储的字节序。

使用

添加SRID
SELECT ST_Mem_Size(ST_SetSRID(ST_MakePoint(0, 0), 4326));

返回32个字节。

现在,一个有两个点的Linestring

SELECT ST_Mem_Size(ST_SetSRID(ST_GeomFromText('LINESTRING(0 0, 1 1)'), 4326));

返回48个字节,现在只有16个字节,即2个双倍,大于Point,正如您所期望的那样。

现在,如果缓冲这一点,

SELECT ST_Mem_Size(ST_SetSRID(ST_Buffer(ST_MakePoint(0, 0), 10), 4326));

你得到568个字节,这是因为每个四分之一圆圈段默认有8个点,加上最后一个重复的起点,你可以查看,

SELECT ST_NPoints(ST_SetSRID(ST_Buffer(ST_MakePoint(0, 0), 10), 4326));

给你33 * 16 = 528,其他40个字节来自SRID,字节序等。