Cách duy nhất mà tôi tìm thấy tại thời điểm này là tạo một tập lệnh nhỏ trong python, có thể điều này có thể di chuyển vào một plugin nhưng tôi không có kinh nghiệm về điều đó.
Là một mã thực sự cơ bản, chọn đúng nhà soạn nhạc và bản đồ:
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())
Tùy chọn khác sẽ duy trì tỷ lệ ban đầu trong bản đồ nô lệ để đặt sau phạm vi mới nếu bản đồ có hình dạng khác nhau, nhưng trong trường hợp cá nhân của tôi với mã này là đủ:
Tôi đang mở để cải thiện giải pháp này (tôi gần như không có kinh nghiệm với PyQGIS
).
Xử lý các phạm vi và quy mô khác nhau
Mã ở trên hoạt động tuyệt vời với cùng mức độ (và do đó, hình dạng) và quy mô. Bây giờ tôi có một mã được cải tiến được thử nghiệm với các mức độ khác nhau, hình dạng và tỷ lệ:
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)
Và kết quả kiểm tra: