एकमात्र तरीका जो मुझे इस समय मिला, वह अजगर में एक छोटी सी स्क्रिप्ट बनाने के लिए था, शायद यह एक प्लगइन में माइग्रेट कर सकता है लेकिन मुझे इसमें कोई अनुभव नहीं है।
एक बहुत ही मूल कोड है, सही संगीतकार और नक्शे का चयन:
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())
अन्य विकल्प गुलाम नक्शों में प्रारंभिक पैमाना बनाए रखेंगे, यदि नक्शे में अलग-अलग आकार हों तो नई सीमा के बाद सेट करना होगा, लेकिन इस कोड के साथ मेरे व्यक्तिगत मामले में पर्याप्त था:
मैं इस समाधान में सुधार के लिए खुला हूं (मेरे पास लगभग कोई अनुभव नहीं है PyQGIS
)।
विभिन्न विस्तार और तराजू से निपटना
ऊपर दिया गया कोड समान सीमा (और फलस्वरूप, आकृति) और स्केल के साथ बढ़िया काम करता है। अब मेरे पास एक कोड है जिसे विभिन्न रूप, आकार और तराजू के साथ परीक्षण किया गया है:
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)
और परिणामी परीक्षा: