在QGIS Composer中向布局添加坐标系吗?


10

我想知道是否可以将动态坐标系字段添加到QGIS作曲家布局中。

我可以使用表达式来添加许多项,例如文档名称,文件路径等,但是我似乎无法弄清楚如何添加坐标系?


1
如果现在使用的是QGIS 3.x,则可能希望将绿色接受复选标记移至QGIS 3.x答案。
PolyGeo

Answers:


7

在QGIS 3.0发行之前已提供并接受了此答案。

获取授权ID(即“ EPSG:4326 ”):

  • 您可以简单地使用表达式 [% layer_property( 'your_layer_name_or_id', 'crs' ) %]

如果要获取CRS的文字说明(即“ WGS84 ”):

  • AFAIK,您必须创建一个自定义函数。为此,请转到“插入表达式”,然后在“函数编辑器”选项卡中键入以下函数。

码:

from qgis.core import *
from qgis.gui import *

@qgsfunction(args='auto', group='Custom')
def get_crs(layer_name, feature, parent):
    return QgsMapLayerRegistry.instance().mapLayersByName(layer_name)[0].crs().description()
  • 点击“加载”
  • 在“表达式”选项卡中,键入 get_crs( 'your_layer_name' )

9

QGIS 3.x的答案:

对于没有python的更简单解决方案,请参阅下面的gustry评论

将此脚本添加到您的自定义函数编辑器中:

from qgis.core import *
from qgis.gui import *

@qgsfunction(args='auto', group='Custom')
def get_crs(layer_name, feature, parent):
    return QgsProject.instance().mapLayersByName(layer_name)[0].crs().description()

在此处输入图片说明

然后在表达式编辑器中使用以下命令获取crs名称:

get_crs(@layer_name)

在此处输入图片说明

对于项目的CRS名称(例如,打印布局中的投影),请使用以下命令:

将此脚本添加到您的自定义函数编辑器中:

from qgis.core import *
from qgis.gui import *

@qgsfunction(args='auto', group='Custom')
def get_projectcrs(project_crs, feature, parent):
    return QgsCoordinateReferenceSystem(project_crs).description()

然后在表达式编辑器中使用以下命令获取crs名称:

 get_projectcrs(@project_crs) 

当然,您也可以'EPSG:4326'手动键入或使用其他函数,而不是@project_crs返回EPSG代码的函数。

笔记:

另请查看https://qgis.org/api/api_break.html,以获取有关qgis 3.x中更改的更多信息。


谢谢@MrXsquared!之前,我确实尝试过该代码,但在传递图层名称时未使用@。但是,我仍然无法使它正常工作。当我在布局视图中添加地图并使用上述功能插入标签时,“输出预览”仅显示NULL,并且标签中未添加任何信息。我几次检查了所有内容,地图上有一个名称(和ID)和一个CRS,但没有显示任何内容。它不应该取决于所使用的特定CRS,对吗?
TinkerPhil

当然,这在布局视图中不起作用,因为它是指特定的图层。我编辑了答案,并添加了一个函数来返回项目的已使用crs 。您可以在打印布局中使用它来显示使用的投影的名称。
MrXsquared

2
对于您的答案A,无需使用python表达式。您可以执行layer_property(@layer_name,'crs_description')`。
etrimaille
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.