Comment zoomer sur une fonction sélectionnée avec pyQGIS

10

Je veux créer une fonction qui sélectionne une fonction et effectue un zoom sur celle-ci (similaire dans QGIS). Il y a donc la fonction suivante:

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)

Les entités sélectionnées sont mises en évidence sur la carte. Mais je n'ai aucune idée de la façon de faire un "zoom" sur les entités sélectionnées ou de les concentrer au milieu de la carte.

Martin
la source

Réponses:

14

Vous devez définir l'étendue du canevas de carte sur l'étendue des sélections:

box = layer.boundingBoxOfSelected()
iface.mapCanvas().setExtent(box)
iface.mapCanvas().refresh()
Nathan W
la source
Je vous remercie! Et comment puis-je relier l'iface à la carte QGIS ouverte réelle?
Martin
Travaillez-vous sur un plugin ou une application autonome?
Nathan W
Oui je l'ai. Je travaille sur un plugin. J'ai oublié le gis.utils.iface. Maintenant, cela fonctionne parfaitement. Merci encore!
Martin
5

Le zoom sur les fonctions sélectionnées peut également être effectué en déclenchant l'option "Zoom sur la sélection" du menu Affichage.

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

Remarque: Le numéro d'index peut varier selon les différentes versions de QGIS.


Ou plus directement:

iface.actionZoomToSelected().trigger()
Sjs
la source
2
Je n'utiliserais pas cette méthode. Que se passe-t-il si dans une nouvelle version de qgis les fonctions passent à l'index 13? Résoudre ce genre de problèmes n'est certainement pas très amusant ...
mozzbozz
@mozzbozz Je suis d'accord. La première réponse est le meilleur choix. Cela peut être une deuxième option alternative. Modifié la réponse selon votre suggestion. Merci!
Sjs
3
Si vous voulez déclencher l'option, je pense que iface.actionZoomToSelected().trigger()c'est un peu plus sûr :)
Joseph
@ Joseph peut-il modifier la réponse en fonction de votre suggestion?
Sjs
1
@Joseph Cela ne me dérangerait pas;) heureux que vous ayez rendu la réponse encore meilleure!
Sjs
0

# Le premier QMessageBox affiche toutes les fonctionnalités sélectionnées:

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

# Deuxième zoom sur les fonctionnalités sélectionnées:

iface.actionZoomToSelected().trigger();
107473
la source