Lấy MBR đa giác nhỏ nhất


8

Tôi có một bảng postgis chứa đa giác. Tôi muốn chuyển đổi đa giác của mình thành đa giác 4 ​​điểm: lấy MBR nhỏ nhất.

Đây là một minh họa về những gì tôi muốn:

văn bản thay thế

Đa giác ban đầu của tôi là màu hồng. Tôi đoán, sẽ khá dễ dàng để có được MBR (với chức năng ST_En phong bì và BBox) Nhưng có cách nào dễ dàng để có được những gì tôi muốn không?

Có ý kiến ​​gì không? Cảm ơn nhiều

Câu trả lời:


3

Đối với ví dụ đơn giản mà bạn có ở đó, ST_ConvexHull sẽ cung cấp cho bạn câu trả lời đó. Đối với trường hợp phức tạp hơn, bạn đã không nghĩ nhiều về nó, nhưng tôi đoán là bạn có thể

1) Lấy ST_ConvexHull - http://www.postgis.org/documentation/manual-1.5SVN/ST_ConvexHull.html

Nếu bạn đang sử dụng PostGIS 1.5+ 2) Sau đó, lấy ST_LongestLine của convexhull ST_LongestLine (ST_ConvexHull (geom), ST_ConvexHull (geom)) Điều đó sẽ cung cấp cho bạn hai góc của hình chữ nhật (mặc dù có một phần khác của hình chữ nhật vì hai góc đó có thể không phải là đường chéo) http://www.postgis.org/documentation/manual-1.5SVN/ST_LongestLine.html

Bạn cũng có thể muốn xem mã cho ST_MinimumBoundingCircle - hiện tại nó chỉ được triển khai như một hàm plpgsql - nhưng những gì bạn đang làm tôi nghĩ là đơn giản hóa điều đó.

http://www.postgis.org/documentation/manual-1.5SVN/ST_MinimumBoundingCircle.html



3

Một câu trả lời đầy đủ có thể được tìm thấy ở đây tuy nhiên tóm tắt:

  • [S] xoay đa giác để khớp với một trong các cạnh của nó với trục X
  • tính toán minmaxcủa XY cho các đỉnh
  • điều này cung cấp cho bạn một ứng cử viên cho hình chữ nhật diện tích tối thiểu (MAR) hoặc MBR
  • lưu trữ diện tích của (x2-x1) * (y2-y1)
  • lặp lại từ [S] cho tất cả các cạnh
  • tìm diện tích tối thiểu tương ứng với MBR
  • xoay tìm thấy [[x1, y1], [x2, y2]] bởi -angle được áp dụng trong [S]

Làm xong.

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.