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

标签 size postgis point geography

它的构造函数接受一个 POINT 和一个 SRID。由于 POINT 是两个 doubles(每个 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/

相关文章:

performance - 直接查询比使用 join 的子查询慢得多

ruby - Ruby Sequeĺ 中的空间 where 子句

c# - 将点对象添加到 ZedGraph

java - 如何使用 Point 类设置点的位置?

delphi - 无效的浮点运算

android - Android 中的位图 : Size of resources for displaying as 50dp

c++ - 有人可以解释这个给我数组大小的模板代码吗?

javascript 根据浏览器窗口大小动态更改正文 ID(使用 css)

c++ - C/C++ : size of a typedef struct containing an int and enum == sizeof(int)?

postgresql - 如何使用纯 docker-compose 将 PostGIS 添加到我的 PostgreSQL 设置中