Le seul moyen que j'ai trouvé à ce moment pour créer un petit script en python, peut-être que cela pourrait migrer dans un plugin mais je n'ai aucune expérience à ce sujet.
Est un code vraiment basique, sélectionnant le bon compositeur et les bonnes cartes:
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())
Une autre option serait de maintenir l'échelle initiale dans les cartes esclaves à définir après la nouvelle étendue si les cartes ont des formes différentes, mais dans mon cas personnel avec ce code était suffisant:
Je suis ouvert à l'amélioration de cette solution (je n'ai presque aucune expérience avec PyQGIS
).
Faire face à différentes étendues et échelles
Le code ci-dessus fonctionne très bien avec la même étendue (et par conséquent, la forme) et l'échelle. Maintenant, j'ai un code amélioré testé avec différentes étendues, formes et échelles:
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)
Et le test résultant: