QGIS bestecisinde yerleşime koordinat sistemi eklensin mi?


10

QGIS besteci düzenine dinamik koordinat sistemi alanı eklemenin bir yolu olup olmadığını bilmek istiyorum.

Belge adı, dosya yolu vb.Gibi birçok öğe eklemek için bir ifade kullanabilirim, ancak koordinat sisteminin nasıl ekleneceğini anlayabiliyorum?


1
Şimdi QGIS 3.x kullanıyorsanız, yeşil kabul onay işaretinizi QGIS 3.x yanıtına taşımak isteyebilirsiniz.
PolyGeo

Yanıtlar:


7

Bu cevap, QGIS 3.0'ın yayınlanmasından önce sağlanmış ve kabul edilmiştir.

Yetki Kimliğini (ör. " EPSG: 4326 ") almak için:

  • Sadece ifadeyi kullanabilirsiniz [% layer_property( 'your_layer_name_or_id', 'crs' ) %]

CRS'nin metinsel açıklamasını almak istiyorsanız (örn. " WGS84 "):

  • AFAIK, özel bir işlev oluşturmanız gerekir. Bunu yapmak için, "İfade ekle" ye gidin ve İşlev Düzenleyicisi sekmesine aşağıdaki işlevi yazın.

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()
  • "Yükle" yi tıklayın
  • İfade sekmesine yazın get_crs( 'your_layer_name' )

10

QGIS 3.x için cevap:

A) Belirli bir katmanın CRS adı için şunu kullanın:

Bu komut dosyasını özel işlev düzenleyicinize ekleyin:

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

resim açıklamasını buraya girin

ve sonra ifade editöründe crs adını

get_crs(@layer_name)

resim açıklamasını buraya girin

Veya layer_property( @layer_name, 'crs_description')@etrimaille tarafından önerilen ifadeyi kullanın

B) Projenizin CRS adı için (örneğin baskı düzeninizdeki projeksiyon) bunu kullanın:

Bu komut dosyasını özel işlev düzenleyicinize ekleyin:

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

resim açıklamasını buraya girin

ve ifade düzenleyicide crs adını şu şekilde alın:

 get_projectcrs(@project_crs) 

resim açıklamasını buraya girin

Elbette örneğin 'EPSG:4326'manuel olarak da yazabilir veya @project_crsEPSG kodu döndüren başka bir işlev kullanabilirsiniz . Örneğinget_projectcrs('EPSG:3006')

Notlar:

QGIS 3.x'teki değişiklikler hakkında daha fazla bilgi için https://qgis.org/api/api_break.html adresine de göz atın.


@MrXsquared teşekkürler! Daha önce tam olarak bu kodu denedim ama katmanın adını geçerken @ kullanmıyordu. Ancak, hala işe yarayamıyorum. Mizanpaj görünümüne bir harita eklediğimde ve yukarıda belirtilen işleve sahip bir etiket eklediğimde, 'Çıktı Önizleme' yalnızca NULL gösterir ve etikete hiçbir bilgi eklenmez. Her şeyi birkaç kez kontrol ettim, haritanın bir adı (ve kimliği) ve bir CRS var ama hiçbir şey görünmüyor. Kullanılan spesifik CRS'ye bağlı olmamalı, değil mi?
TinkerPhil

Tabii ki bu, belirli bir katmanı ifade ettiğinden mizanpaj görünümünde çalışmaz. Cevabımı düzenledim ve projenizin kullanılmış cr'lerini döndürmek için bir işlev ekledim . Bunu, kullanılan projeksiyonun adını görüntülemek için yazdırma düzeninizde kullanabilirsiniz.
MrXsquared

2
A cevabınız için bir python ifadesine gerek yok. `Layer_property (@layer_name, 'crs_description')` yapabilirsiniz.
etrimaille
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.