是否可以通过Python命令设置项目CRS?


10

是否可以通过Python命令在QGIS中设置项目的项目CRS?

在我的情况下,用户应打开QGIS,启动我的书面插件,此插件将加载具有epsg代码31467(高斯Krueger区域3)的空间数据。不幸的是,QGIS的默认CRS是WGS84,所以我遇到了单位和比例的麻烦。

我的第一种方法是使用以下代码:

    my_crs = core.QgsCoordinateReferenceSystem(31467, core.QgsCoordinateReferenceSystem.EpsgCrsId)
    self.iface.mapCanvas().mapRenderer().setDestinationCrs(my_crs)

这将CRS更改(在已经可视化数据之后)到高斯Krueger区域3。至少右下角的espg代码已更改。单位仍然是度,刻度是完全错误的。高斯·克鲁格的1:5000是WGS 84中的1:528822376(在我的情况下是QGIS)。在属性中手动设置项目CRS之后,项目crs实际上是GK3,并且比例和单位正确。

所以我的问题是,我可以用不同于完成项目的其他方式设置项目CRS吗?我想避免手动方式。


我通过添加以下代码解决了该问题:

qgis.utils.iface.mapCanvas().setMapUnits(0)
qgis.utils.iface.mapCanvas().refresh()

这会将单位设置为米,并且刻度会自动更新。0代表米,1代表英尺,2代表度,3代表未知数。

Answers:


7

是的,有可能。Sourcepole的Openlayers插件会自动将CRS设置为EPSG:3857。

看看openlayers_layers.py和openlayers_plugin.py。


8

答案来得有点晚,但是如果有人在未安装插件的情况下从google转到该页面,则http://www.purplelinux.co.nz提供了有关此信息。

在Purplelinux上找到的示例(运行正常)建议以下内容:

if iface.mapCanvas().mapRenderer().hasCrsTransformEnabled():
    my_crs = core.QgsCoordinateReferenceSystem(4326,core.QgsCoordinateReferenceSystem.EpsgCrsId)
    iface.mapCanvas().mapRenderer().setDestinationCrs(my_crs)


您甚至可以通过调用以下内容来创建CRS:

QgsCoordinateReferenceSystem("PROPERTY:ID")

可能是:

QgsCoordinateReferenceSystem("EPSG:31467")

恕我直言,这使代码更具可读性。


1
请注意,该代码是针对QGIS 2.X的,您应该在此处看到针对QGIS3代码列出的其他答案
紫色先生

4

用这个:

QgsProject.instance().setCrs(my_crs)

1
与QGIS3配合使用,时间my_crs=QgsCoordinateReferenceSystem(4326):)
axel_ande '18
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.