Como aplicar zoom em um recurso selecionado com pyQGIS

10

Quero criar uma função que selecione um recurso e aplique zoom (semelhante no QGIS). Portanto, existe a seguinte função:

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)

Os recursos selecionados são destacados no mapa. Mas não tenho idéia de como fazer um "zoom" nos recursos selecionados ou algum tipo de foco no meio do mapa.

Martin
fonte

Respostas:

14

Você precisa definir as extensões da tela do mapa para as extensões das seleções:

box = layer.boundingBoxOfSelected()
iface.mapCanvas().setExtent(box)
iface.mapCanvas().refresh()
Nathan W
fonte
Obrigado! E como posso relacionar o iface ao mapa QGIS aberto real?
Martin
Você está trabalhando em um plug-in ou em um aplicativo independente?
Nathan W
Sim entendi. Estou trabalhando em um plugin. Eu esqueci o gis.utils.iface. Agora está funcionando perfeitamente. Mais uma vez obrigado!
Martin
5

O zoom para os recursos selecionados também pode ser realizado acionando a opção "Zoom na seleção" do menu Exibir.

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

Nota: O número do índice pode variar com diferentes versões do QGIS.


Ou mais diretamente:

iface.actionZoomToSelected().trigger()
Sjs
fonte
2
Eu não usaria esse método. E se, em uma nova versão do qgis, as funções forem movidas para o índice 13? Solução de problemas este tipo de questões não é definitivamente muito divertido ...
mozzbozz
@mozzbozz Concordo. A primeira resposta é a melhor escolha. Esta pode ser uma segunda opção alternativa. Editou a resposta de acordo com sua sugestão. Obrigado!
SJS
3
Se você deseja acionar a opção, eu acho que iface.actionZoomToSelected().trigger()é um pouco mais seguro :)
Joseph
@ Joseph, você pode editar a resposta de acordo com a sua sugestão?
SJS
1
@ Joseph, eu não me importaria com isso;) feliz que você fez a resposta parecer ainda melhor!
SJS
0

# A primeira QMessageBox exibe todos os recursos selecionados:

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

# Segundo zoom para os recursos selecionados:

iface.actionZoomToSelected().trigger();
user107473
fonte