Есть ли простой способ получить ограничительную рамку для всей таблицы в PostGIS?
19
Как ответил @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 является первичным ключом таблицы
Но ST_Envelope будет работать лучше, так как @ bugmenot123 указано в комментариях
SELECT ST_Envelope(geom) FROM your_table ;
ST_Envelope
! Это не то, что просили, хотя.Другая возможность - использовать
ST_Envelope
функцию, которая возвращает геометрию с SRID,вместе с агрегатной функцией
ST_Union
для получения объединения всех геометрий (или объединения их соответствующих огибающих) следующим образом:или
Второй вариант должен быть быстрее, поскольку он упрощает операцию объединения, используя огибающие отдельных геометрий.
см. Источник .
источник
Отказ от какого-либо пространственного агрегирования должен быть намного быстрее:
источник