它的构造函数接受一个 POINT 和一个 SRID。由于 POINT 是两个 double(每个 8 个字节),SRID 是一个整数(4 个字节),是否可以假设完整结构需要 8*2+4=20 个字节的存储空间?
最佳答案
看看 ST_Mem_Size 。这也为您提供了 toast 表的大小,因此比 pg_total_relation_size 和其他内置 Postgres 函数更合适,后者没有——尽管这仅适用于更大的几何图形。回到你的问题,有一点,
SELECT ST_Mem_Size(ST_MakePoint(0, 0));
返回 32 个字节,这是 4 个 double (而不是您期望的 2 个)。这样做的原因是有额外的元数据,例如要存储的字节序。
在 SRID 中添加,
SELECT ST_Mem_Size(ST_SetSRID(ST_MakePoint(0, 0), 4326));
返回 32 个字节。
现在,有两个点的线串,
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、字节序等。
关于PostGIS中数据类型Geography(Point,4326)的大小?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30455025/