Відповіді:
Як відповів @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
функції, яка повертає геометрію з 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
Другий варіант повинен бути швидшим, оскільки він спрощує операцію з'єднання за допомогою конвертів окремих геометрій.
см Джерело .
Не застосовувати будь-яку просторову агрегацію слід набагато швидше:
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
! Це не те, про що просили.