Satu-satunya cara yang saya temukan saat ini untuk membuat skrip kecil dengan python, mungkin ini bisa bermigrasi ke plugin tapi saya tidak punya pengalaman dalam hal itu.
Merupakan kode yang sangat mendasar, memilih komposer dan peta yang tepat:
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())
Pilihan lain adalah mempertahankan skala awal dalam peta slave untuk ditetapkan setelah batas baru jika peta memiliki bentuk yang berbeda, tetapi dalam kasus pribadi saya dengan kode ini sudah cukup:
Saya terbuka untuk meningkatkan solusi ini (saya hampir tidak punya pengalaman dengan PyQGIS
).
Berurusan dengan luasan dan skala yang berbeda
Kode di atas berfungsi dengan baik dengan tingkat yang sama (dan akibatnya, bentuk) dan skala. Sekarang saya memiliki kode yang ditingkatkan diuji dengan luasan, bentuk dan skala yang berbeda:
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)
Dan tes yang dihasilkan: