有没有一种简单的方法来获取PostGIS中整个表格的边界框?

#1 楼

ST_Extent应该可以解决问题。


ST_Extent —一个聚合函数,它返回限制几何行的边界框。


应用如下:

SELECT ST_Extent(the_geom) as table_extent FROM your_table;


#2 楼

正如@underdark回答的那样,ST_Extent将完成此工作,但请记住,它不会返回几何图形,而是返回box2d。如果需要几何类型,则应使用诸如

SELECT ST_SetSRID(ST_Extent(the_geom), THE_SRID) as table_extent FROM your_table;


。此外,如果需要获取每行的边界框,还可以使用ST_Extent和伪造的GROUP BY像这样:

SELECT ST_SetSRID(ST_Extent(the_geom),THE_SRID) as table_extent FROM your_table GROUP BY gid;


假设gid是表的主键

但是ST_Envelope的效果更好@在评论中提到的bugmenot123

SELECT ST_Envelope(geom) FROM your_table ;


评论


如果您需要每行都没有聚合的边界框,只需使用ST_Envelope!那不是要求的。

–bugmenot123
19年7月31日在11:37

你是正确的关于st_envelope我更新答案。关于“未要求”,有时会尝试给出相关答案,因为对于英语说得不好的人(例如我)来说,很难选择正确的搜索文字来找到答案。我大概是在这个问题上寻找第二个主题的答案。

–弗朗西斯科·普加(Francisco Puga)
19年8月1日在7:28



#3 楼

另一种可能性是使用ST_Envelope函数,该函数返回带有SRID的几何,


ST_Envelope —返回代表
提供的几何


,连同聚合函数ST_Union一起获得所有几何的并集(或它们各自的包络的并集),如下所示:


SELECT ST_Envelope(ST_Union(geom)) AS table_extent FROM your_table


第二个选项应该更快,因为它通过使用各个几何形状的包络简化了联合操作。

请参见参考资料。

评论


ST_Extent方法的幅度更快,因为它可以仅对数字进行运算,而不必进行任何复杂的几何计算。尽可能避免使用ST_Union。

–bugmenot123
19年7月31日在11:38



#4 楼

不强制执行任何空间聚合都应该更快:

select
  min(ST_XMin(geom)) as l,
  min(ST_YMin(geom)) as b,
  max(ST_XMax(geom)) as r,
  max(ST_YMax(geom)) as t
from x


评论


ST_Extent也不必在空间上做任何事情。它比我的数据处理速度快2-3倍(约40万个多边形)。可能是因为它可以一劳永逸地完成所有工作,而您的方法必须研究每个几何的几个方面,然后最后进行汇总。

–bugmenot123
19年7月31日在11:41