Odpowiedzi:
Jak odpowiedział @underdark , ST_Extent wykona zadanie, ale należy pamiętać, że nie zwraca geometrii, ale box2d
. Jeśli potrzebujesz typu geometrii, powinieneś użyć czegoś takiego
SELECT ST_SetSRID(ST_Extent(the_geom), THE_SRID) as table_extent FROM your_table;
Ponadto, jeśli potrzebujesz uzyskać obwiednię każdego z wierszy, której możesz również użyć, ST_Extent
i fałszywkę GROUP BY
taką:
SELECT ST_SetSRID(ST_Extent(the_geom),THE_SRID) as table_extent FROM your_table GROUP BY gid;
Zakładając, że gid jest podstawowym kluczem tabeli
Ale ST_Envelope wykona lepszą robotę, jak podano w komentarzach @ bugmenot123
SELECT ST_Envelope(geom) FROM your_table ;
Inną możliwością jest użycie ST_Envelope
funkcji, która zwraca geometrię z SRID,
ST_Envelope - Zwraca geometrię reprezentującą obwiednię dostarczonej geometrii
, wraz z funkcją agregującą w ST_Union
celu uzyskania połączenia wszystkich geometrii (lub połączenia ich odpowiednich obwiedni) w następujący sposób:
SELECT ST_Envelope(ST_Union(geom)) AS table_extent FROM your_table
lub
SELECT ST_Envelope(ST_Union(ST_Envelope(geom))) AS table_extent FROM your_table
Druga opcja powinna być szybsza, ponieważ upraszcza operację łączenia poprzez zastosowanie obwiedni poszczególnych geometrii.
patrz Źródło .
Niewymaganie agregacji przestrzennej powinno być znacznie szybsze:
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_Envelope
! Jednak nie o to poproszono.