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.

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

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

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();
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.