如何使用pyQGIS缩放到所选功能


10

我想创建一个选择功能并将其缩放的功能(在QGIS中类似)。因此,具有以下功能:

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)

所选要素在地图上突出显示。但是我不知道如何对选定的要素进行“缩放”或将其聚焦在地图中间。

Answers:


14

您需要将地图画布的范围设置为所选范围:

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

谢谢!我如何将iface与实际的开放QGIS地图联系起来?
马丁

您是在使用插件还是独立的应用程序?
内森·W

是的,知道了。我正在开发一个插件。我忘记了gis.utils.iface。现在,它可以完美运行。再次感谢你!
马丁

5

也可以通过触发“视图”菜单的“缩放到所选内容”选项来缩放到选定的功能。

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

注意:索引编号可能会因QGIS版本不同而有所不同。


或更直接地:

iface.actionZoomToSelected().trigger()

2
我不会使用这种方法。如果在新的qgis版本中功能移到索引13怎么办?解决这类问题绝对不是
一件

@mozzbozz我同意。第一个答案是最佳选择。这可以是第二个替代选项。根据您的建议编辑答案。谢谢!
Sjs

3
如果您想触发该选项,我认为iface.actionZoomToSelected().trigger()是比较安全的方法:)
Joseph

@Joseph您能根据您的建议编辑答案吗?
Sjs

1
@Joseph我不介意;)很高兴您使答案看起来更好!
Sjs

0

#第一个QMessageBox显示所有选定的功能:

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

#秒缩放到所选功能:

iface.actionZoomToSelected().trigger();
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.