#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 ;
#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
评论
如果您需要每行都没有聚合的边界框,只需使用ST_Envelope!那不是要求的。
–bugmenot123
19年7月31日在11:37
你是正确的关于st_envelope我更新答案。关于“未要求”,有时会尝试给出相关答案,因为对于英语说得不好的人(例如我)来说,很难选择正确的搜索文字来找到答案。我大概是在这个问题上寻找第二个主题的答案。
–弗朗西斯科·普加(Francisco Puga)
19年8月1日在7:28