Cách phóng to một tính năng được chọn bằng pyQGIS


10

Tôi muốn tạo một chức năng chọn một tính năng và phóng to nó (tương tự trong QGIS). Do đó có chức năng sau:

QgsMapLayerRegistry.instance().addMapLayer(self.vlayer)

def zoomTo(self):
    layer = self.vlayer
    atable = self.ui.table

    selectList=[]
    for i in atable.selectionModel().selectedRows():
        ID = atable.item(i.row(),0).text()
        selectList.append(int(ID))

    layer.setSelectedFeatures(selectList)

Các tính năng được chọn được tô sáng trên bản đồ. Nhưng tôi không biết làm thế nào để "phóng to" các tính năng đã chọn hoặc một số loại tiêu điểm chúng ở giữa bản đồ.

Câu trả lời:


14

Bạn cần đặt phạm vi của khung vẽ bản đồ thành phạm vi của các lựa chọn:

box = layer.boundingBoxOfSelected()
iface.mapCanvas().setExtent(box)
iface.mapCanvas().refresh()

Cảm ơn bạn! Và làm thế nào tôi có thể liên kết iface với bản đồ QGIS mở thực tế?
Martin

Bạn đang làm việc trên một plugin, hoặc một ứng dụng độc lập?
Nathan W

Vâng biết rôi. Tôi đang làm việc trên một plugin. Tôi quên mất gis.utils.iface. Bây giờ nó hoạt động hoàn hảo. Cám ơn bạn một lần nữa!
Martin

5

Thu phóng đến các tính năng được chọn cũng có thể được thực hiện bằng cách kích hoạt tùy chọn "Thu phóng đến lựa chọn" của menu Xem.

eMenu = self.iface.viewMenu()
eMenu.actions() [12].trigger()

Lưu ý: Số chỉ mục có thể thay đổi theo các phiên bản QGIS khác nhau.


Hoặc trực tiếp hơn:

iface.actionZoomToSelected().trigger()

2
Tôi sẽ không sử dụng phương pháp này. Điều gì xảy ra nếu trong một phiên bản qgis mới, các chức năng chuyển sang chỉ mục 13? Khắc phục sự cố các loại sự cố này chắc chắn không thú vị lắm ...
mozzbozz

@mozzbozz Tôi đồng ý. Câu trả lời đầu tiên là sự lựa chọn tốt nhất. Đây có thể là một lựa chọn thay thế thứ hai. Chỉnh sửa câu trả lời theo đề nghị của bạn. Cảm ơn!
Sjs

3
Nếu bạn muốn kích hoạt tùy chọn này, tôi nghĩ iface.actionZoomToSelected().trigger()là an toàn hơn một chút :)
Joseph

@Joseph bạn có thể chỉnh sửa câu trả lời theo đề nghị của bạn không?
Sjs

1
@Joseph Tôi không bận tâm điều đó;) rất vui vì bạn đã làm cho câu trả lời thậm chí còn tốt hơn!
Sjs

0

# QMessageBox đầu tiên hiển thị tất cả các tính năng được chọn:

lyr = iface.activeLayer();
fts = lyr.selectedFeatures();
ftsCount = lyr.selectedFeatureCount();
sFts = str(ftsCount);
msgBox = QMessageBox();
msgBox.setText(sFts +' selected features');
msgBox.exec_();

# Thu phóng thứ hai cho các tính năng được chọn:

iface.actionZoomToSelected().trigger();
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.