La única forma que encontré en este momento es crear un pequeño script en Python, tal vez esto podría migrar a un complemento, pero no tengo experiencia en eso.
Es un código realmente básico, seleccionando el compositor y los mapas correctos:
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())
Otra opción sería mantener la escala inicial en los mapas esclavos para establecer después de la nueva extensión si los mapas tienen diferentes formas, pero en mi caso personal con este código fue suficiente:
Estoy abierto a mejorar esta solución (casi no tengo experiencia PyQGIS
).
Tratar con diferentes extensiones y escalas
El código anterior funciona muy bien con la misma extensión (y, en consecuencia, forma) y escala. Ahora tengo un código mejorado probado con diferentes extensiones, formas y escalas:
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)
Y la prueba resultante: