Tính toán tọa độ hộp giới hạn của một đa giác được chọn với QGIS


17

Tôi chỉ thủ công (và có phần không chính xác, tôi chắc chắn) đã lấy tọa độ hộp giới hạn cho đa giác quận, đây là một lựa chọn từ một lớp lớn hơn của các hình dạng hạt. Tôi muốn có thể sử dụng plugin QGIS hoặc chức năng khác để tính toán nhanh chóng và không phải bằng tay. Điều này gần như chắc chắn là có thể nhưng tôi không thể tìm thấy bất cứ điều gì với một tìm kiếm Google

Câu trả lời:


26

Hàm Python nhỏ sau đây sẽ xuất ra tọa độ hộp giới hạn của tính năng hiện đang hoạt động:

def printBB():
    feature = iface.activeLayer().selectedFeatures()[0]
    print feature.geometry().boundingBox().toString()

Để xác định chức năng, hãy mở bàn điều khiển Python từ menu Plugins, sao chép và dán ba dòng vào bàn điều khiển và nhấn enter. Sau đó, bạn có thể gọi hàm bằng cách gõ printBB()và nhấn enter trong khi tính năng mong muốn được chọn.


1
Tôi gặp lỗi này khi tôi cố chạy tập lệnh này: File "<input>", line 4 printBB() ^ SyntaxError: invalid syntax
cbunn

@cbunn đảm bảo bạn có lớp được chọn trong các lớp / mục lục - nó rất nhạy cảm với điều này!
DPSSpatial

cảm ơn đã giúp đỡ. Tôi cũng đã quên nhấn enter để xác định đầy đủ hàm printBB () trước khi gọi nó.
cbunn

2
Tôi đã phải sử dụng print (Feature.geometry (). BoundBox (). ToString ()) cho dòng 3.
cm1

16

QGIS có thể làm điều đó thông qua Đa giác từ Lớp mở rộng

Vector - Công cụ nghiên cứu - Đa giác từ lớp mở rộng

Sẽ tạo ra một shapefile mới với các thuộc tính như XMIN XMAX YMIN YMAX KHU VỰC CAO CẤP


1
Bạn phải kiểm tra Use only selected obectscalculate for every objectđể có được kết quả mong muốn.
AndreJ

hmm mà không làm việc cho tôi, shapefile xuất ra về cơ bản là trống
boulder_ruby

1
Bạn chỉ muốn kiểm tra 'Chỉ sử dụng các đối tượng được chọn' nếu bạn có các đối tượng được chọn. Tôi đã bỏ chọn cả hai lĩnh vực đó và đạt được kết quả tốt.
Johanna

4

Bạn cũng có thể làm điều này bằng cách sử dụng plugin PyShp trong Python .. Nó đơn giản hơn nhiều ...

import shapefile

sf = shapefile.Reader("Path to shapefile...") 
shapes = sf.shapes() 
bbox = shapes[0].bbox # Retrieves the bounding box of the first shape

print bbox # Will print the bounding box coordinates

Thông tin thêm về PyShp và các chức năng khác có thể được tìm thấy ở đây .


3

Nếu bạn cần nhiều hộp giới hạn của đa giác, bạn có thể "Lưu dưới dạng ..." lớp của mình vào GeoJSON với tùy chọn WRITE_BBOX = CÓ và sẽ có một thuộc tính "bbox" trước thuộc tính "hình học" của bạn, ngay cả đối với đa hình.

..., "bbox": [ -70.062408006999874, 12.417669989000046, -69.876820441999939, 12.632147528000104 ], "geometry": ...

1

Tôi đã phải làm điều này để tạo ra một lĩnh vực mà tôi có thể nhập dưới dạng danh sách ở nơi khác.

  1. Cài đặt plugin QGIS FieldPyculator
  2. Chuyển đổi chỉnh sửa lớp
  3. Tạo cột mới trong bảng thuộc tính dưới dạng chuỗi, ví dụ như bbox (lưu các chỉnh sửa)
  4. Mở FieldPyculator
  5. Đặt trường cập nhật thành bbox
  6. Trong trường biểu thức gõ một cái gì đó như:

    bb = $geom.boundingBox().toString()

    bb = bb.replace(' ','')

    bb = bb.replace(':',',')

    value = bb

  7. Chạy

  8. Tắt chỉnh sửa và lưu lớp

1

Đối với acces nhanh, một tùy chọn là giữ tọa độ bbox trong bảng thuộc tính.

  • Chế độ chỉnh sửa Toogle
  • Khởi động máy tính Field
  • Đặt tạo trường mới, đặt tên (ví dụ xmin), loại (thập phân), độ dài, (độ chính xác)
  • Biểu thức: x_min ($ hình học)
  • Bạn sẽ nhận được một trường mới trong bảng thuộc tính với tọa độ LEFT.

    Lặp lại điều này cho RIGHT, BOTTOM, TOP với các biểu thức:

  • x_max ($ hình học)
  • y_min ($ hình học)
  • y_max ($ hình học)
  • Ví dụ về kết quả nhập mô tả hình ảnh ở đây

    Sau đó, bạn có thể đặt plugin AutoFields để tự động cập nhật các trường này khi tính năng được thay đổi.

    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.