Take the 2-minute tour ×
Geographic Information Systems Stack Exchange is a question and answer site for cartographers, geographers and GIS professionals. It's 100% free, no registration required.

I am implementing a tool which allows the user to create a profile of a feature (in my case urban parcels). Is it possible to automatically take a screenshot of this feature (displayed in a QGIS window) and to display it in the PDF profile?

The picture should only show the extent of the feature and maybe a WMS-layer that lies beyond the feature. Are there already some tools which you could suggest?

share|improve this question
    
How can I save a JPG instead of an PNG? QgsMapCanvas.saveAsImage (QString theFileName, QPixmap *QPixmap=0, QString="PNG") I know that I can use "JPG" as last parameter, but I dont know how to define the QPixmap that is excatly the same like the actual map window in qgis. Thanks for help. Micha –  gismic Jan 17 '13 at 7:08

1 Answer 1

up vote 8 down vote accepted

kopi,

There are several approaches to a solution, but this may be one of the simplest (depending upon your needs):

Select the feature using QgsVectorLayer

Assuming a reference to your vector layer (vlayer) and the feature's id (fid). See also

vlayer.select(fid)

Zoom to selected feature using QgsInterface

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

Deselect feature using QgsVectorLayer

vlayer.deselect(fid)

Save canvas as picture using QgsMapCanvas

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

This approach produces as large a photo as possible, if your window is expanded to full, because saving the canvas is at screen resolution. However, it does not ensure your pictures will be at the same map zoom scale, only relatively the same pixel size. There are other options like QgisInterface::actionPanToSelected() if you need to keep the zoom scale consistent.

share|improve this answer
    
Wow. Thank you for your answer! This works very good! –  kopi Aug 22 '12 at 20:26
1  
have a look also to the "easy print" plugin, probably not what you need, but it can be useful for inspiration. –  Giovanni Manghi Aug 23 '12 at 8:21
    
Is it possible to set the scale before taking the screenshot? And how can I use "actionPanToSelected"? I am trying it this way: qgis.utils.iface.actionPanToSelected(feature which the function has to pan to...), but this returns an error message: "Attritbute Error: QgisInterface object has no attribute actionPanToSelected –  kopi Aug 23 '12 at 12:44
1  
Try qgis.utils.iface.mapCanvas().zoomScale(scale) to set map scale. actionPanToSelected() doesn't take a parameter, but returns a reference to the action itself (like actionZoomToSelected() above). Use its public slot qgis.utils.iface.actionPanToSelected().trigger() to fire the action, which will handle figuring out what is selected. –  dakcarto Aug 23 '12 at 16:10
1  
Hmmm. qgis.utils.iface.actionPanToSelected().trigger() works for me under QGIS version 1.8.0. Are you using the latest stable version (1.8.0)? The feature was added back in January, so it's not in version 1.7.x. –  dakcarto Aug 23 '12 at 17:32

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.