Tạo hộp giới hạn xiên hình chữ nhật với tỷ lệ chiều rộng / chiều cao tối đa?


13

Tôi muốn tạo một hình chữ nhật xung quanh với tỷ lệ chiều rộng / chiều cao tối đa ("hộp giới hạn xiên") từ một tập hợp các tính năng đầu vào như trong hình dưới đây:

nhập mô tả hình ảnh ở đây

Ví dụ, các chức năng PostGIS ST_EnvelopeST_Box2Dcũng như FME Transformers BoundingBoxReplacerBoundingBoxAccumulatortạo các hộp giới hạn song song trục.

Mọi đề xuất sử dụng phương pháp tiếp cận với PostGIS, QGIS hoặc FME đều được hoan nghênh!


Không phải là một bản sao chính xác , bởi vì anh chàng không yêu cầu một giải pháp áp dụng trong FME hoặc PostGIS. Tuy nhiên, tập lệnh python được đề cập trong câu trả lời cho câu hỏi được đề cập ở trên khá hữu ích khi được đưa vào biến áp FME PythonCaller. Nếu tôi có một không gian làm việc đang chạy, tôi sẽ đăng một giải pháp với một kịch bản được sửa đổi một chút.
Jochen Schwarze

Nó không chỉ không phải là một bản sao, mà câu hỏi được tham khảo đã không được chấp nhận, và có những câu hỏi chưa được trả lời về việc sử dụng thuật toán nào, và nó có chính xác hay không.
John Powell

Xem câu trả lời của tôi dưới đây. Bạn sẽ có thể làm điều này trong FME. Phiên bản nào bạn đang sử dụng?
Fezter

Câu trả lời:


9

Điều này có thể là quá mức cần thiết trên mặt trận xử lý và có khả năng là một giải pháp toán học tốt hơn, nhưng là một ví dụ về cách mà nó có thể được thực hiện thay vì chỉ đơn giản là một truy vấn

SELECT 
   id, rotated_by, oblique_bound
  FROM 
     (
     SELECT 
        m.id,
        r rotated_by, 
        ST_Rotate(ST_Envelope(ST_Rotate(m.geom, r)),-r) oblique_bound,
        row_number OVER (PARTITION BY id) 
                   ORDER BY ST_Area(ST_Rotate(ST_Envelope(ST_Rotate(m.geom, r)),-r))) N
       FROM 
          generate_series(0, 90, 0.1) N(r), my_table m
    ) s
WHERE N = 1;

Điều này xoay hình học, tạo giới hạn, đảo ngược xoay cho mỗi phần mười của một độ từ 0 đến 90. Kết quả là hộp giới hạn có diện tích nhỏ nhất. Tất nhiên đây không phải là một cách hoàn toàn chính xác để làm điều đó và có thể cần điều chỉnh giá trị gia tăng trong chuỗi tùy thuộc vào yêu cầu của bạn.


Trên thực tế, tôi nghĩ rằng đây là một giải pháp tuyệt vời. Các giải pháp chính xác là vô cùng tốn kém. Bạn có thể dễ dàng mở rộng nó trong plpgsql để ghi lại các hộp giới hạn x tốt nhất và nếu hai cái rất gần nhau, bạn có thể phóng to và thực hiện một số phép quay nhỏ hơn để tiến gần hơn đến một giải pháp chính xác. Sẽ luôn luôn có trường hợp cạnh, nhưng một cách tiếp cận tốt đẹp.
John Powell

Và như một lợi ích bổ sung, nó duy trì góc quay :-)
Jochen Schwarze

6

QGIS có thuật toán "hộp giới hạn định hướng tối thiểu" thực hiện chính xác điều này.


Nó được gọi là "Hộp giới hạn tối thiểu định hướng". Bạn có thể gọi nó từ Hộp công cụ xử lý> Thuật toán địa lý QGIS> Công cụ chung về Vector.
Stefan

Tôi đoán điều này vượt quá QGIS 2.14, vì tôi không thể tìm thấy nó trong 2.14.15LTR mà chúng ta vẫn đang sử dụng ở đây?
Jochen Schwarze

@JochenSchwarze nó tồn tại trong QGIS 2.14.19. Bạn cần tìm kiếm trong hộp công cụ xử lý. Trực tiếp, bạn có thể tìm thấy nó dướiProcessing toolbox -> QGIS geoalgorithms -> Vector General tools -> Oriented minimum bounding box
ahmadhanb

4

Các biến áp thay thế hộp giới hạn , mà bạn đề cập sẽ có thể làm điều này. Theo tài liệu này,

Thay thế hình dạng của đối tượng địa lý bằng hộp giới hạn hai chiều hoặc hộp giới hạn định hướng tối thiểu hai chiều của nó.

Tham số này cho phép bạn chọn hộp giới hạn theo trục hoặc trực tuyến.

Rõ ràng, có một cải tiến được đề xuất để bao gồm góc của cạnh dài hơn của hộp giới hạn định hướng. Đây là số an toàn PR # 53924.

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.