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.

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()

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()

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();
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.