¿Es posible tomar automáticamente una "captura de pantalla" de mi función seleccionada en QGIS usando Python?

11

Estoy implementando una herramienta que permite al usuario crear un perfil de una característica (en mi caso, parcelas urbanas). ¿Es posible tomar automáticamente una captura de pantalla de esta función (que se muestra en una ventana QGIS) y mostrarla en el perfil PDF?

La imagen solo debe mostrar el alcance de la función y tal vez una capa WMS que se encuentra más allá de la función. ¿Ya hay algunas herramientas que podría sugerir?

kopi
fuente
¿Cómo puedo guardar un JPG en lugar de un PNG? QgsMapCanvas.saveAsImage (QString theFileName, QPixmap * QPixmap = 0, QString = "PNG") Sé que puedo usar "JPG" como último parámetro, pero no sé cómo definir el QPixmap que es exactamente igual al mapa real ventana en qgis. Gracias por la ayuda. Micha
gismic

Respuestas:

10

kopi

Existen varios enfoques para una solución, pero este puede ser uno de los más simples (según sus necesidades):

Seleccione la función usando QgsVectorLayer

Asumiendo una referencia a su capa vectorial (vlayer) y la identificación de la entidad (fid). Ver también

vlayer.select(fid)

Zoom a la función seleccionada usando QgsInterface

qgis.utils.iface.actionZoomToSelected().trigger()

Anule la selección de la función con QgsVectorLayer

vlayer.deselect(fid)

Guarde el lienzo como imagen usando QgsMapCanvas

qgis.utils.iface.mapCanvas().saveAsImage('/Users/me/Desktop/feature.png')

Este enfoque produce una foto lo más grande posible, si su ventana se expande por completo, porque guardar el lienzo está en resolución de pantalla. Sin embargo, no garantiza que sus imágenes tengan la misma escala de zoom del mapa, solo relativamente el mismo tamaño de píxel. Hay otras opciones como QgisInterface::actionPanToSelected()si necesita mantener la escala de zoom consistente.

dakcarto
fuente
Guau. ¡Gracias por su respuesta! Esto funciona muy bien!
kopi
1
eche un vistazo también al complemento de "impresión fácil", probablemente no lo que necesita, pero puede ser útil como inspiración.
Giovanni Manghi el
¿Es posible establecer la escala antes de tomar la captura de pantalla? ¿Y cómo puedo usar "actionPanToSelected"? Lo intento de esta manera: qgis.utils.iface.actionPanToSelected (característica a la que la función tiene que desplazarse ...), pero esto devuelve un mensaje de error: "Error de atributo: QgisInterface no tiene ningún atributo actionPanToSelected
kopi
1
Intenta qgis.utils.iface.mapCanvas().zoomScale(scale)establecer la escala del mapa. actionPanToSelected () no toma un parámetro, pero devuelve una referencia a la acción en sí (como actionZoomToSelected () arriba). Use su ranura pública qgis.utils.iface.actionPanToSelected().trigger()para activar la acción, que se encargará de averiguar qué se selecciona.
dakcarto
1
Hmmm qgis.utils.iface.actionPanToSelected (). trigger () funciona para mí en QGIS versión 1.8.0. ¿Está utilizando la última versión estable (1.8.0)? La función se añadió en enero , por lo que es no en la versión 1.7.x .
dakcarto