L'unico modo in cui l'ho trovato in questo momento per creare un piccolo script in Python, forse questo potrebbe migrare in un plugin, ma non ho esperienza in questo.
È un codice davvero semplice, selezionando il compositore e le mappe giuste:
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())
Un'altra opzione sarebbe mantenere la scala iniziale nelle mappe slave da impostare dopo la nuova estensione se le mappe hanno forme diverse, ma nel mio caso personale con questo codice era sufficiente:
Sono aperto per migliorare questa soluzione (quasi non ho esperienza con PyQGIS
).
Trattare con diverse estensioni e scale
Il codice sopra funziona alla grande con la stessa misura (e, di conseguenza, forma) e scala. Ora ho un codice migliorato testato con differenti estensioni, forme e scale:
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)
E il test risultante: