QGISコンポーザーのレイアウトに座標系を追加しますか?


10

動的座標系フィールドをQGISコンポーザーレイアウトに追加する方法があるかどうか知りたいのですが。

式を使用して、ドキュメント名、ファイルパスなどの多くのアイテムを追加できますが、座標系を追加する方法がわからないようです。


1
今QGIS 3.xを使用している場合は、緑色の承認チェックマークをQGIS 3.xの回答に移動できます。
PolyGeo

回答:


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のコメントを参照してください

このスクリプトをカスタムfunctioneditorに追加します。

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名(たとえば、印刷レイアウトでの投影)には、次を使用します。

このスクリプトをカスタムfunctioneditorに追加します。

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コードを返す以外の関数を使用したりすることもできます。

ノート:

qgis 3.xでの変更の詳細については、https://qgis.org/api/api_break.htmlも参照してください。


ありがとう@MrXsquared!私は以前そのコードを正確に試しましたが、レイヤーの名前を渡すときに@を使用しませんでした。しかし、私はまだこれを機能させることができません。レイアウトビューにマップを追加し、前述の関数を使用してラベルを挿入すると、「出力プレビュー」にNULLと表示され、ラベルに情報が追加されません。すべてを数回確認しましたが、マップには名前(およびID)とCRSがありますが、何も表示されません。使用する特定のCRSに依存するべきではありませんよね?
TinkerPhil 2018年

もちろん、これは特定のレイヤーを参照するため、レイアウトビューでは機能しません。回答を編集して、プロジェクトの使用済みcrsを返す関数を追加しました。これを印刷レイアウトで使用して、使用されている投影法の名前を表示できます。
MrXsquared

2
回答Aの場合、Python式を使用する必要はありません。`layer_property(@layer_name、 'crs_description')`を実行できます。
etrimaille
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.