PostGIS表的边界框


19

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

Answers:


26

ST_Extent应该可以解决问题。

ST_Extent —一个聚合函数,该函数返回包围几何行的边界框。

像这样应用:

SELECT ST_Extent(the_geom) as table_extent FROM your_table;

13

正如@underdark回答的那样ST_Extent将完成此工作,但请记住,它不会返回几何图形而是返回a 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是表的主键

但是,正如@ bugmenot123在评论中所述,ST_Envelope会做得更好

SELECT ST_Envelope(geom) FROM your_table ;

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

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

4

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

ST_Envelope —返回代表所提供几何图形的边界框的几何图形

,以及ST_Union用于获取所有几何的并集(或它们各自的包络的并集)的聚合函数,如下所示:

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

要么

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

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

参见Source


1
该ST_Extent方法是幅度更快,因为它可以在纯数字操作,不必做任何复杂的几何计算。尽可能避免使用ST_Union。
bugmenot123

2

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

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

1
ST_Extent也不必在空间上做任何事情。它比我的数据处理速度快2-3倍(约40万个多边形)。可能是因为它可以一劳永逸地完成所有工作,而您的方法必须研究每个几何的多个方面,然后最后进行汇总。
bugmenot123
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.