Czy istnieje prosty sposób na uzyskanie ramki granicznej dla całego stołu w PostGIS?
19
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 ;
ST_Envelope
! Jednak nie o to poproszono.Inną możliwością jest użycie
ST_Envelope
funkcji, która zwraca geometrię z SRID,, 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:lub
Druga opcja powinna być szybsza, ponieważ upraszcza operację łączenia poprzez zastosowanie obwiedni poszczególnych geometrii.
patrz Źródło .
źródło
Niewymaganie agregacji przestrzennej powinno być znacznie szybsze:
źródło