วิธีเดียวที่ฉันพบในขณะนี้เพื่อสร้างสคริปต์ขนาดเล็กในหลามบางทีนี่อาจย้ายไปยังปลั๊กอิน แต่ฉันไม่มีประสบการณ์ในเรื่องนั้น
เป็นรหัสพื้นฐานจริงๆเลือกนักแต่งเพลงและแผนที่ที่ถูกต้อง:
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)
และผลการทดสอบ: