Antworten:
ST_Extent sollte den Trick machen.
ST_Extent - eine Aggregatfunktion, die den Begrenzungsrahmen zurückgibt, der die Geometriezeilen begrenzt.
So angewendet:
SELECT ST_Extent(the_geom) as table_extent FROM your_table;
Wie @underdark antwortete , erledigt ST_Extent die Aufgabe, aber denken Sie daran, dass es keine Geometrie zurückgibt , sondern eine box2d
. Wenn Sie einen Geometrietyp benötigen, sollten Sie so etwas verwenden
SELECT ST_SetSRID(ST_Extent(the_geom), THE_SRID) as table_extent FROM your_table;
Wenn Sie den Begrenzungsrahmen für jede der Zeilen benötigen, können Sie auch ST_Extent
eine Fälschung GROUP BY
wie die folgende verwenden:
SELECT ST_SetSRID(ST_Extent(the_geom),THE_SRID) as table_extent FROM your_table GROUP BY gid;
Angenommen, gid ist der Primärschlüssel der Tabelle
Aber ST_Envelope wird einen besseren Job machen als @ bugmenot123 in den Kommentaren
SELECT ST_Envelope(geom) FROM your_table ;
Eine andere Möglichkeit ist die Verwendung der ST_Envelope
Funktion, die eine Geometrie mit SRID zurückgibt.
ST_Envelope - Gibt eine Geometrie zurück, die den Begrenzungsrahmen der angegebenen Geometrie darstellt
zusammen mit der Aggregatfunktion ST_Union
, um die Vereinigung aller Geometrien (oder die Vereinigung der jeweiligen Hüllkurven) wie folgt zu erhalten:
SELECT ST_Envelope(ST_Union(geom)) AS table_extent FROM your_table
oder
SELECT ST_Envelope(ST_Union(ST_Envelope(geom))) AS table_extent FROM your_table
Die zweite Option sollte schneller sein, da sie die Vereinigungsoperation vereinfacht, indem die Umschläge der einzelnen Geometrien verwendet werden.
siehe Quelle .
Das Nichterzwingen einer räumlichen Aggregation sollte viel schneller erfolgen:
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
! Das ist jedoch nicht das, wonach gefragt wurde.