Aggiunta di un sistema di coordinate al layout nel compositore QGIS?


10

Vorrei sapere se esiste un modo per aggiungere un campo di sistema di coordinate dinamiche in un layout del compositore QGIS.

Posso usare un'espressione per aggiungere molti elementi come il nome del documento, il percorso del file, ecc. Ma non riesco a capire come aggiungere il sistema di coordinate?


1
Se stai usando QGIS 3.x ora, potresti voler spostare il segno di spunta verde di accettazione sulla risposta di QGIS 3.x.
PolyGeo

Risposte:


7

Questa risposta è stata fornita e accettata prima del rilascio di QGIS 3.0.

Per ottenere l'ID autorità (ad esempio " EPSG: 4326 "):

  • Puoi semplicemente usare l'espressione [% layer_property( 'your_layer_name_or_id', 'crs' ) %]

Se vuoi ottenere la descrizione testuale del CRS (es. " WGS84 "):

  • AFAIK, è necessario creare una funzione personalizzata. Per fare ciò, vai su "Inserisci un'espressione" e digita la seguente funzione nella scheda Editor funzioni.

Codice:

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()
  • Clicca su "Carica"
  • Nella scheda Espressione, digitare get_crs( 'your_layer_name' )

9

Risposta per QGIS 3.x:

Per una soluzione più semplice senza Python vedi il commento di Gustry di seguito

Aggiungi questo script al tuo funzione personalizzata:

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

inserisci qui la descrizione dell'immagine

e quindi ottenere il nome crs nell'editor delle espressioni con

get_crs(@layer_name)

inserisci qui la descrizione dell'immagine

Per il nome CRS del tuo progetto (ad esempio la proiezione nel layout di stampa) usa questo:

Aggiungi questo script al tuo funzione personalizzata:

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

e quindi ottenere il nome crs nell'editor delle espressioni con:

 get_projectcrs(@project_crs) 

Naturalmente è anche possibile digitare ad esempio 'EPSG:4326'manualmente o utilizzare un'altra funzione oltre alla @project_crsquale restituisce un codice EPSG.

Appunti:

Dai anche un'occhiata a https://qgis.org/api/api_break.html per ulteriori informazioni sulle modifiche a qgis 3.x


Grazie @MrXsquared! In precedenza ho provato esattamente quel codice ma non ho usato @ quando ho passato il nome del layer. Tuttavia, non riesco ancora a farlo funzionare. Quando aggiungo una mappa nella vista layout e inserisco un'etichetta con la funzione di cui sopra, l'anteprima di output mostra solo NULL e nessuna informazione viene aggiunta nell'etichetta. Ho controllato tutto più volte, la mappa ha un nome (e un ID) e un CRS ma non viene visualizzato nulla. Non dovrebbe dipendere dal CRS specifico utilizzato, giusto?
Tinker Phil

Ovviamente questo non funzionerà nella vista layout poiché si riferisce a un livello specifico. Ho modificato la mia risposta e ho aggiunto una funzione per restituire i CR usati del tuo progetto . È possibile utilizzarlo nel layout di stampa per visualizzare il nome della proiezione utilizzata.
MrXsquared,

2
Per la tua risposta A, non è necessario disporre di un'espressione pitone. Puoi fare `layer_property (@layer_name, 'crs_description')`.
etrimaille,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.