是否可以使用Python在QGIS中自动拍摄我选择的功能的“屏幕快照”?


11

我正在实现一个工具,该工具允许用户创建地图项(在我的情况下是城市地块)的配置文件。是否可以自动拍摄此功能的屏幕截图(显示在QGIS窗口中)并将其显示在PDF配置文件中?

图片仅应显示功能的范围,并且可能应显示功能之外的WMS层。您已经建议了一些工具吗?


如何保存JPG而不是PNG?QgsMapCanvas.saveAsImage(QString theFileName,QPixmap * QPixmap = 0,QString =“ PNG”)我知道我可以使用“ JPG”作为最后一个参数,但是我不知道如何定义与实际地图完全相同的QPixmap qgis中的窗口。感谢帮助。Micha
gismic

Answers:


10

kopi,

解决方案有几种方法,但这可能是最简单的方法之一(取决于您的需求):

使用QgsVectorLayer选择功能

假设引用了您的矢量层(vlayer)和要素的ID(fid)。也可以看看

vlayer.select(fid)

使用QgsInterface缩放到所选功能

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

使用QgsVectorLayer取消选择功能

vlayer.deselect(fid)

使用QgsMapCanvas将画布另存为图片

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

如果将窗口扩展到完整状态,此方法将生成尽可能大的照片,因为保存画布的分辨率是屏幕分辨率。但是,它不能确保您的图片将具有相同的地图缩放比例,而只能相对相同的像素大小。还有其他选项,例如QgisInterface::actionPanToSelected()是否需要保持缩放比例一致。


哇。谢谢您的回答!效果很好!
kopi 2012年

1
还可以查看“轻松打印”插件,可能不是您所需要的,但它对启发灵感很有用。
Giovanni Manghi'8

可以在截屏之前设置比例尺吗?以及如何使用“ actionPanToSelected”?我以这种方式尝试:qgis.utils.iface.actionPanToSelected(功能必须平移到的功能...),但这将返回错误消息:“ Attritbute错误:QgisInterface对象没有属性actionPanToSelected
kopi

1
尝试qgis.utils.iface.mapCanvas().zoomScale(scale)设置地图比例。actionPanToSelected()不带参数,但返回对动作本身的引用(例如上面的actionZoomToSelected())。使用其公共插槽qgis.utils.iface.actionPanToSelected().trigger()触发操作,该操作将确定所选择的内容。
dakcarto 2012年

1
嗯 在QGIS版本1.8.0下,qgis.utils.iface.actionPanToSelected()。trigger()对我有用。您是否正在使用最新的稳定版本(1.8.0)?该功能是在一月份添加的,因此不在1.7.x版本中
dakcarto 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.