Proje CRS'sini bir Python komutu ile ayarlamak mümkün müdür?


10

QGIS'teki bir projenin proje CRS'sini bir Python komutu ile ayarlamak mümkün müdür?

Benim durumumda kullanıcı QGIS'i açmalı, yazılı eklentimi başlatmalı ve bu eklenti, epsg kodu 31467 (Gauss Krueger Zone 3) olan uzamsal verileri yükleyecektir. Ne yazık ki QGIS varsayılan CRS WGS84 olduğunu, bu yüzden birimler ve ölçek ile sorun yaşıyorum.

İlk yaklaşımım bu kodu kullanmaktı:

    my_crs = core.QgsCoordinateReferenceSystem(31467, core.QgsCoordinateReferenceSystem.EpsgCrsId)
    self.iface.mapCanvas().mapRenderer().setDestinationCrs(my_crs)

Bu değişiklik (veriler zaten görselleştirildikten sonra) CRS'yi Gauss Krueger Zone 3 olarak değiştirir. En azından sağ alt köşedeki espg kodu değişti. Birimler hala derece cinsindendir ve ölçek tamamen yanlıştır. Gauss Krüger'deki 1: 5000, WGS 84'de (benim durumumda QGIS) 1: 528822376'dır. Proje CRS'yi özelliklerde manuel olarak ayarladıktan sonra proje crs gerçekten GK3 ve ölçek ve birimler haklıdır.

Benim sorum şu, CRS projesini yaptığımdan başka bir şekilde ayarlayabilir miyim? Manuel yoldan kaçınmak istiyorum.


Aşağıdaki kodu ekleyerek sorunu çözdüm:

qgis.utils.iface.mapCanvas().setMapUnits(0)
qgis.utils.iface.mapCanvas().refresh()

Bu birimleri ölçecek şekilde ayarlar ve ölçek otomatik olarak güncellenir. 0 metre, 1 ayak, 2 derece ve 3 bilinmeyen anlamına gelir.

Yanıtlar:


7

Evet mümkün. Sourcepole tarafından açılan Openlayers eklentisi CRS'yi otomatik olarak EPSG: 3857 olarak ayarlar.

Openlayers_layers.py ve openlayers_plugin.py adresine bir göz atın.


8

Cevap vermek için biraz geç, ancak birisinin eklentiyi yüklemeden google'dan bu sayfaya düşmesi durumunda, http://www.purplelinux.co.nz bu konuda iyi bilgi sağlar.

Purplelinux'da bulunan (iyi çalışıyor) örnek aşağıdakileri önermektedir:

if iface.mapCanvas().mapRenderer().hasCrsTransformEnabled():
    my_crs = core.QgsCoordinateReferenceSystem(4326,core.QgsCoordinateReferenceSystem.EpsgCrsId)
    iface.mapCanvas().mapRenderer().setDestinationCrs(my_crs)


Hatta arayarak bir CRS bile oluşturabilirsiniz:

QgsCoordinateReferenceSystem("PROPERTY:ID")

hangisi olurdu:

QgsCoordinateReferenceSystem("EPSG:31467")

hangi IMHO kodu daha okunaklı yapar.


1
Kodun QGIS 2.X için olduğunu ve burada QGIS3 kodu için listelenen diğer cevapları görmeniz gerektiğini unutmayın
Bay Purple

4

Bunu kullan:

QgsProject.instance().setCrs(my_crs)

1
QGIS3, ne zaman my_crs=QgsCoordinateReferenceSystem(4326):) ile çalışır
axel_ande
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.