Cómo hacer zoom a una característica seleccionada con pyQGIS

10

Quiero crear una función que seleccione una función y la amplíe (similar en QGIS). Por lo tanto, existe la siguiente función:

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)

Las características seleccionadas se resaltan en el mapa. Pero no tengo idea de cómo hacer un "zoom" a las características seleccionadas o algún tipo de enfoque en el medio del mapa.

Martín
fuente

Respuestas:

14

Debe establecer la extensión del lienzo del mapa en la extensión de las selecciones:

box = layer.boundingBoxOfSelected()
iface.mapCanvas().setExtent(box)
iface.mapCanvas().refresh()
Nathan W
fuente
¡Gracias! ¿Y cómo puedo relacionar el iface con el mapa QGIS abierto real?
Martin
¿Estás trabajando en un complemento o una aplicación independiente?
Nathan W
Sí, entendí. Estoy trabajando en un complemento. Olvidé el gis.utils.iface. Ahora está funcionando perfectamente. ¡Gracias de nuevo!
Martin
5

El zoom a las características seleccionadas también se puede realizar activando la opción "Zoom a la selección" del menú Ver.

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

Nota: El número de índice puede variar con diferentes versiones de QGIS.


O más directamente:

iface.actionZoomToSelected().trigger()
Sjs
fuente
2
No usaría este método. ¿Qué sucede si en una nueva versión de qgis las funciones se mueven al índice 13? Resolver este tipo de problemas definitivamente no es muy divertido ...
mozzbozz
@mozzbozz Estoy de acuerdo. La primera respuesta es la mejor opción. Esta puede ser una segunda opción alternativa. Editó la respuesta según su sugerencia. ¡Gracias!
Sjs
3
Si quieres activar la opción, creo que iface.actionZoomToSelected().trigger()es un poco más seguro :)
Joseph
@Joseph, ¿puedes editar la respuesta según tu sugerencia?
Sjs
1
@Joseph No me importaría eso;) ¡feliz de que hayas hecho que la respuesta se vea aún mejor!
Sjs
0

# El primer QMessageBox muestra todas las funciones seleccionadas:

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

# Segundo zoom a las características seleccionadas:

iface.actionZoomToSelected().trigger();
usuario107473
fuente