QGIS baskı bestecisinde görünümler senkronize ediliyor mu?


10

Sorunuma çok benzer bir soru buldum: ArcGIS veya QGIS'deki veri çerçeveleri nasıl bağlanır? . Ancak QGIS için çözüm şu anda çalışmıyor (Çift Görünüm eklentisi artık mevcut değil).

Üç görünümü senkronize etmek istiyorum:

resim açıklamasını buraya girin

Fikir, üç harita görünümünü QGIS baskı bestecisinde bir ana harita ile aynı anda taşımaktır.

Bunu yapmanın bir yolu veya eklentisi var mı?

Yanıtlar:


2

Besteci haritalarının senkronizasyonu için bir başka zarif "kodsuz" çözüm, QGIS'in yerleşik "Genel Bakış" mekanizmasını kullanır:

resim açıklamasını buraya girin

Bu nedenle, her harita penceresine ana harita ile senkronize edilmesi gereken bir "Ana Harita Çerçevesi" genel görünümü ekliyoruz. Ardından çerçeve stilini Fırça Yok / Kalem Yok olarak ayarlayıp "Genel bakışta ortala" yı etkinleştiririz.

Alt haritanın ölçeğini düzeltmek için bir İfade değeri giriyoruz: resim açıklamasını buraya girin

Bu kadar.

Çok kolay ve çok dinamik!


Harika! So simple ... excellent work around
aldo_tapia

4

Şu anda python küçük bir komut dosyası oluşturmak için buldum tek yolu, belki bu bir eklentiye geçiş olabilir ama bu konuda hiçbir deneyimim yok.

Doğru besteci ve haritaları seçerek gerçekten temel bir koddur:

from qgis.core import *
from qgis.utils import *

composerList = iface.activeComposers()

comp = composerList[4]

maps = comp.composition().composerMapItems()

masterMap = maps[0]
slave1 = maps[1]
slave2 = maps[4]

slave1.setNewExtent(masterMap.extent())
slave2.setNewExtent(masterMap.extent())

Diğer seçenek, haritalar farklı şekillere sahipse, yeni kapsamdan sonra ayarlamak için köle haritalarındaki başlangıç ​​ölçeğini korumak olurdu, ancak benim kişisel durumumda bu kodla yeterliydi:

resim açıklamasını buraya girin

Bu çözümü geliştirmek için açığım (neredeyse hiç deneyimim yok PyQGIS).


Farklı boyutlarda ve ölçeklerde işlem yapma

Yukarıdaki kod aynı ölçüde (ve dolayısıyla şekil olarak) ve ölçekle harika çalışır. Şimdi farklı uzantıları, şekilleri ve ölçekleri ile test geliştirilmiş bir kod var:

from qgis.core import *
from qgis.utils import *

composerList = iface.activeComposers()

comp = composerList[0]

maps = comp.composition().composerMapItems()

masterMap = maps[2]
slave1 = maps[1]
slave2 = maps[0]

centroid = masterMap.extent().center()

diffx1 = slave1.extent().xMaximum() - slave1.extent().xMinimum()
diffy1 = slave1.extent().yMaximum() - slave1.extent().yMinimum()

diffx2 = slave2.extent().xMaximum() - slave2.extent().xMinimum()
diffy2 = slave2.extent().yMaximum() - slave2.extent().yMinimum()

newExtent1 = QgsRectangle(centroid[0]-(diffx1/2),centroid[1]-(diffy1/2),centroid[0]+(diffx1/2),centroid[1]+(diffy1/2))
newExtent2 = QgsRectangle(centroid[0]-(diffx2/2),centroid[1]-(diffy2/2),centroid[0]+(diffx2/2),centroid[1]+(diffy2/2))

slave1.setNewExtent(newExtent1)
slave2.setNewExtent(newExtent2)

Ve ortaya çıkan test:

resim açıklamasını buraya girin


Sorunun çözüldüğünü göstermek için sol taraftaki yeşil soluk onay işaretine tıklayarak cevabını kabul etmeyi unutma :)
Joseph

1
@Joseph teşekkürler, ancak yarı çözüldü. Tam bir çözüm sağlamak için bunu bir eklentiye dönüştürdükten sonra kendi cevabımı kabul edeceğim. Benim için hala bir meydan okuma
aldo_tapia

2

Kod olmadan yapmak için sadece küçük bir ipucu. Aldo'nun cevabından daha az etkilidir, ancak nihai bir harita yapmak için sonunda hile yapar. Ana bir görünüme sahip olmanıza da gerek yok, önemli olan harita tuvali kapsamı:

  1. Harita A'yı istediğiniz gibi hareket ettirin (ana harita olacaktır)
  2. "Harita tuvalinde kapsamı görüntüle" yi tıklayın
  3. B haritasına geç
  4. "Tuval kapsamını eşlemek için ayarla" yı tıklayın
  5. C haritasına geç
  6. "Tuval kapsamını eşlemek için ayarla" yı tıklayın

vb.

tuval görünümünü / kapsamını göster

Master olması için başka bir haritaya ihtiyacınız olduğunda, diğer haritayı tıklayın ve diğerlerini ayarlamadan önce "harita tuvalinde kapsamı görüntüleyin".

Belirli bir görünümü daha sonra saklamak isterseniz, Uzamsal yer işareti panelini kullanmanızı öneririz. Harita tuvalini seçilen bir dereceye ayarlayın, ardından ihtiyacınız olan her köle için Tuvali haritaya ayarla'ya tıklayın :)


Evet, bu şekilde yapardım. Harika bir seçenektir, ancak B ve C haritasındaki ölçekler her zaman değişir, bu yüzden iki adım daha vardır
aldo_tapia

senin güzel cevap, ben denemek gerekir ^ ^
gisnside

2

Ben sadece aynı sorunu vardı ve bağımlı haritalar üzerinde ifadeleri kullanarak istenen sonucu elde edebildi. Bu, tüm haritaların mizanpajda aynı boyutlara sahip olduğunu varsayar.

  1. Ana haritanıza bir öğe kimliği verin, örneğin 'map1' (öğe özelliklerinin alt kısmında)

  2. Her bağımlı haritaya, kapsam değerlerinin her birine bir ifade ekleyin:

    x_min(map_get(item_variables('map1'), 'map_extent'))
    

Kod, besteci öğesi 'map1' için değişkenleri alır, kapsamı geometri olarak alır ve son olarak x_min değerini geometriden alır. Buna göre x_min değerini y_min, x_max ve y_max olarak değiştirin.

Tek dezavantajı, ana haritayı her taşıdığınızda bağımlı haritaları yenilemenizdir. Dışa aktarma sırasında otomatik olarak güncellenmelidir.


Hangi QGIS sürümünü kullanıyorsunuz?
3.0.2'de

Ubuntu 16.04 üzerinde @aldo_tapia QGIS 3.0.3
leak_my_brain

Tuhaf, çalıştıramıyorum ... Ama kaldırıldı!
aldo_tapia
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.