[Qgis-developer] Apply QgsMapSettings then render via Python?

Larry Shaffer larrys at dakotacarto.com
Sat Mar 8 14:10:40 PST 2014


Hi Martin,

Any suggestions on the following?

Larry

On Tue, Mar 4, 2014 at 2:39 PM, Larry Shaffer <larrys at dakotacarto.com>wrote:

> Hi Martin, et al.,
>
> Maybe I'm missing something elemental here, but I can't seem to find a
> simple way to apply my built-up QgsMapSettings to QgsMapCanvas or
> QgsMapRenderer, initiate a render from Python, then save into image on disk.
>
> This is what I would like to do (for simple screen-res renders):
>
> cnv = iface.mapCanvas()
> ms = cnv.mapSettings()  <-- or create fresh: ms = QgsMapSettings()
> (manipulate map settings)
> cnv.applyMapSettings(ms)  <-- shouldn't this be possible?
> cnv.refresh()  <-- since cnv.map().render() is stubbed now
> cnv.saveAsImage(my_imgpath)
>
> This is functioning (for creating unit test control images), but seems
> excessive:
>
> ms = my_map_settings
> pal = QgsPalLabeling()
> pal.init(ms)  <-- is this necessary?
> r = QgsMapRenderer()
> r.setLabelingEngine(pal)
>
> # couldn't the next lines be covered by a r.applyMapSettings(ms) function?
> r.setOutputSize(ms.outputSize(), ms.outputDpi())
> r.setMapUnits(ms.mapUnits())
> r.setExtent(ms.extent())
> r.setProjectionsEnabled(ms.hasCrsTransformEnabled())
> r.setDestinationCrs(ms.destinationCrs())
> r.setLayerSet(ms.layers())
>
> image = QImage(ms.outputSize(), QImage.Format_ARGB32)
> image.fill(ms.backgroundColor().rgb())
> image.setDotsPerMeterX(ms.outputDpi() / 25.4 * 1000)
> image.setDotsPerMeterY(ms.outputDpi() / 25.4 * 1000)
>
> p = QPainter(image)
> r.render(p)
> p.end()
> image.save(my_imgpath, 'png'):
>
>
> This is already convenient in QgsComposition, using QgsComposition( const
> QgsMapSettings& mapSettings ), then just render the page.
>
> Any ideas on the best approach here?
>
> Regards,
>
> Larry
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/qgis-developer/attachments/20140308/576b6eb4/attachment.html>


More information about the Qgis-developer mailing list