Hộp giới hạn cho bảng PostGIS


19

Có cách nào dễ dàng để lấy hộp giới hạn cho toàn bộ bảng trong PostGIS không?

Câu trả lời:


26

ST_Extent nên thực hiện các mẹo.

ST_Extent - một hàm tổng hợp trả về hộp giới hạn giới hạn các hàng của hình học.

Áp dụng như thế này:

SELECT ST_Extent(the_geom) as table_extent FROM your_table;

13

Như @underdark đã trả lời , ST_Extent sẽ thực hiện công việc, nhưng hãy nhớ rằng nó không trả về hình học mà là a box2d. Nếu bạn cần một loại hình học, bạn nên sử dụng một cái gì đó như

SELECT ST_SetSRID(ST_Extent(the_geom), THE_SRID) as table_extent FROM your_table;

Ngoài ra, nếu những gì bạn cần là lấy hộp giới hạn của mỗi hàng bạn cũng có thể sử dụng ST_Extentgiả GROUP BY như thế này:

SELECT ST_SetSRID(ST_Extent(the_geom),THE_SRID) as table_extent FROM your_table GROUP BY gid;

Giả sử rằng gid là khóa chính của bảng

Nhưng ST_En phong bì sẽ làm việc tốt hơn như @ bugmenot123 đã nêu trong các bình luận

SELECT ST_Envelope(geom) FROM your_table ;

1
Nếu bạn cần một hộp giới hạn cho mỗi hàng không có tổng hợp, chỉ cần sử dụng ST_Envelope! Đó không phải là những gì được yêu cầu mặc dù.
bugmenot123

1
Bạn nói đúng về st_en phong tôi cập nhật câu trả lời. Về "không được yêu cầu", đôi khi cố gắng đưa ra câu trả lời liên quan vì đối với những người không nói tiếng Anh tốt (như tôi) rất khó chọn văn bản tìm kiếm chính xác để tìm câu trả lời. Có lẽ tôi đã rơi vào câu hỏi này để tìm kiếm một câu trả lời cho chủ đề thứ hai.
Francisco Puga

4

Một khả năng khác là sử dụng ST_Envelopehàm trả về hình học với SRID,

ST_En phong bì - Trả về một hình học đại diện cho hộp giới hạn của hình học được cung cấp

, cùng với chức năng tổng hợp ST_Unionđể có được sự kết hợp của tất cả các hình học (hoặc kết hợp các phong bì tương ứng của chúng) như sau:

SELECT ST_Envelope(ST_Union(geom)) AS table_extent FROM your_table

hoặc là

SELECT ST_Envelope(ST_Union(ST_Envelope(geom))) AS table_extent FROM your_table

Tùy chọn thứ hai nên nhanh hơn vì nó đơn giản hóa hoạt động hợp nhất bằng cách sử dụng các phong bì của hình học riêng lẻ.

xem Nguồn .


1
Cách tiếp cận ST_Extent có cường độ nhanh hơn vì nó có thể hoạt động hoàn toàn trên các con số và không phải thực hiện bất kỳ phép tính hình học phức tạp nào. Tránh ST_Union bất cứ khi nào bạn có thể.
bugmenot123

2

Không thực thi bất kỳ tập hợp không gian nào sẽ nhanh hơn:

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

1
ST_Extent cũng không phải làm bất cứ điều gì không gian. Nó nhanh hơn 2-3 lần so với cách tiếp cận dữ liệu của tôi (~ 400k đa giác). Có lẽ bởi vì nó có thể làm tất cả trong một lần, trong khi cách tiếp cận của bạn phải xem xét một số khía cạnh của mỗi geom và sau đó tổng hợp lại.
bugmenot123
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.