Hinzufügen eines Koordinatensystems zum Layout in QGIS Composer?

10

Ich würde gerne wissen, ob es eine Möglichkeit gibt, ein dynamisches Koordinatensystemfeld in ein QGIS-Composer-Layout einzufügen.

Ich kann einen Ausdruck verwenden, um viele Elemente wie Dokumentname, Dateipfad usw. hinzuzufügen, aber ich kann anscheinend nicht herausfinden, wie das Koordinatensystem hinzugefügt wird.

Ben
quelle
1
Wenn Sie jetzt QGIS 3.x verwenden, möchten Sie möglicherweise Ihr grünes Akzeptanz-Häkchen auf die QGIS 3.x-Antwort verschieben.
PolyGeo

Antworten:

7

Diese Antwort wurde vor der Veröffentlichung von QGIS 3.0 bereitgestellt und akzeptiert.

So erhalten Sie die Berechtigungs-ID (dh " EPSG: 4326 "):

  • Sie können einfach den Ausdruck verwenden [% layer_property( 'your_layer_name_or_id', 'crs' ) %]

Wenn Sie die Textbeschreibung des CRS erhalten möchten (dh " WGS84 "):

  • AFAIK, Sie müssen eine benutzerdefinierte Funktion erstellen. Gehen Sie dazu zu "Ausdruck einfügen" und geben Sie die folgende Funktion in die Registerkarte Funktionseditor ein.

Code:

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()
  • Klicken Sie auf "Laden"
  • Geben Sie auf der Registerkarte Ausdruck den Wert ein get_crs( 'your_layer_name' )
thibautg
quelle
9

Antwort für QGIS 3.x:

Für eine einfachere Lösung ohne Python siehe Kommentar von gustry unten

Fügen Sie dieses Skript Ihrem benutzerdefinierten Funktionseditor hinzu:

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()

Geben Sie hier die Bildbeschreibung ein

und dann den Namen crs im Ausdruckseditor mit abrufen

get_crs(@layer_name)

Geben Sie hier die Bildbeschreibung ein

Verwenden Sie für den CRS-Namen Ihres Projekts (z. B. Projektion in Ihrem Drucklayout) Folgendes:

Fügen Sie dieses Skript Ihrem benutzerdefinierten Funktionseditor hinzu:

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()

und erhalten Sie dann den crs-Namen im Ausdruckseditor mit:

 get_projectcrs(@project_crs) 

Natürlich können Sie auch zB 'EPSG:4326'manuell @project_crseingeben oder eine andere Funktion verwenden, die einen EPSG-Code zurückgibt.

Anmerkungen:

Weitere Informationen zu Änderungen in qgis 3.x finden Sie auch unter https://qgis.org/api/api_break.html

MrXsquared
quelle
Danke @MrXsquared! Ich habe zuvor genau diesen Code ausprobiert, aber das @ nicht verwendet, als ich den Namen der Ebene übergeben habe. Ich kann das jedoch immer noch nicht zum Laufen bringen. Wenn ich eine Karte in die Layoutansicht einfüge und eine Beschriftung mit der oben genannten Funktion einfüge, zeigt die 'Ausgabevorschau' nur NULL an und es werden keine Informationen zur Beschriftung hinzugefügt. Ich habe alles mehrmals überprüft, die Karte hat einen Namen (und eine ID) und ein CRS, aber es wird nichts angezeigt. Es sollte nicht von dem verwendeten spezifischen CRS abhängen, oder?
TinkerPhil
Dies funktioniert natürlich nicht in der Layoutansicht, da sich dies auf eine bestimmte Ebene bezieht. Ich habe meine Antwort bearbeitet und eine Funktion hinzugefügt, um die verwendeten crs Ihres Projekts zurückzugeben . Sie können dies in Ihrem Drucklayout verwenden, um den Namen der verwendeten Projektion anzuzeigen.
MrXsquared
2
Für Ihre Antwort A benötigen Sie keinen Python-Ausdruck. Sie können `layer_property (@layer_name, 'crs_description')` ausführen.
Etrimaille