Dodanie układu współrzędnych do układu w kompozytorze QGIS?

10

Chciałbym wiedzieć, czy istnieje sposób na dodanie pola dynamicznego układu współrzędnych do układu kompozytora QGIS.

Mogę użyć wyrażenia, aby dodać wiele elementów, takich jak nazwa dokumentu, ścieżka do pliku itp., Ale nie mogę; wydaje się, że zastanawiam się, jak dodać układ współrzędnych?

Ben
źródło
1
Jeśli używasz teraz QGIS 3.x, możesz przenieść zielony znacznik wyboru na odpowiedź QGIS 3.x.
PolyGeo

Odpowiedzi:

7

Ta odpowiedź została udzielona i zaakceptowana przed wydaniem QGIS 3.0.

Aby uzyskać identyfikator urzędu (tj. „ EPSG: 4326 ”):

  • Możesz po prostu użyć wyrażenia [% layer_property( 'your_layer_name_or_id', 'crs' ) %]

Jeśli chcesz uzyskać opis tekstowy CRS (tzn. „ WGS84 ”):

  • AFAIK, musisz utworzyć niestandardową funkcję. Aby to zrobić, przejdź do „Wstaw wyrażenie” i wpisz następującą funkcję w zakładce Edytor funkcji.

Kod:

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()
  • Kliknij „Załaduj”
  • Na karcie Wyrażenie wpisz get_crs( 'your_layer_name' )
thibautg
źródło
9

Odpowiedź na QGIS 3.x:

Dla łatwiejszego rozwiązania bez Pythona patrz komentarz Gustry poniżej

Dodaj ten skrypt do niestandardowego edytora funkcyjnego:

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

wprowadź opis zdjęcia tutaj

a następnie pobierz nazwę crs w edytorze wyrażeń za pomocą

get_crs(@layer_name)

wprowadź opis zdjęcia tutaj

Aby uzyskać nazwę CRS swojego projektu (na przykład rzutowanie w układzie wydruku), użyj tego:

Dodaj ten skrypt do niestandardowego edytora funkcyjnego:

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

a następnie pobierz nazwę crs w edytorze wyrażeń za pomocą:

 get_projectcrs(@project_crs) 

Oczywiście możesz także wpisać np. 'EPSG:4326'Ręcznie lub użyć innej funkcji niż ta, @project_crsktóra zwraca kod EPSG.

Uwagi:

Zobacz także https://qgis.org/api/api_break.html, aby uzyskać więcej informacji o zmianach w qgis 3.x

MrXsquared
źródło
Dzięki @MrXsquared! Wcześniej próbowałem dokładnie tego kodu, ale nie użyłem @ przy przekazywaniu nazwy warstwy. Jednak nadal nie mogę tego uruchomić. Kiedy dodam mapę w widoku układu i wstawię etykietę z wyżej wymienioną funkcją, „Podgląd wyjściowy” pokazuje po prostu NULL i żadne informacje nie są dodawane do etykiety. Sprawdziłem wszystko kilka razy, mapa ma nazwę (i identyfikator) i CRS, ale nic się nie pokazuje. Nie powinno to zależeć od konkretnego zastosowanego CRS, prawda?
TinkerPhil
Oczywiście nie będzie to działać w widoku układu, ponieważ odnosi się do konkretnej warstwy. Zredagowałem swoją odpowiedź i dodałem funkcję zwracającą używane crs twojego projektu . Możesz użyć tego w układzie wydruku, aby wyświetlić nazwę użytej projekcji.
MrXsquared
2
Dla twojej odpowiedzi A nie musisz mieć wyrażenia python. Możesz zrobić `layer_property (@layer_name, 'crs_description')`.
etrimaille