내 문제와 매우 비슷한 질문을 찾았 습니다. ArcGIS 또는 QGIS에서 데이터 프레임을 연결하는 방법은 무엇입니까? . 그러나 QGIS 용 솔루션은 현재 작동하지 않습니다 (Dual View 플러그인은 더 이상 사용할 수 없음).
세 가지보기를 동기화하고 싶습니다.
아이디어는 QGIS 인쇄 작곡가의 마스터 맵과 동시에 세 개의 맵 뷰를 이동하는 것입니다.
이를위한 방법이나 플러그인이 있습니까?
내 문제와 매우 비슷한 질문을 찾았 습니다. ArcGIS 또는 QGIS에서 데이터 프레임을 연결하는 방법은 무엇입니까? . 그러나 QGIS 용 솔루션은 현재 작동하지 않습니다 (Dual View 플러그인은 더 이상 사용할 수 없음).
세 가지보기를 동기화하고 싶습니다.
아이디어는 QGIS 인쇄 작곡가의 마스터 맵과 동시에 세 개의 맵 뷰를 이동하는 것입니다.
이를위한 방법이나 플러그인이 있습니까?
답변:
내가 지금 파이썬에서 작은 스크립트를 생성하는 유일한 방법은 아마도 플러그인으로 마이그레이션 할 수는 있지만 그 경험은 없습니다.
올바른 작곡가와지도를 선택하는 정말 기본적인 코드입니다.
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)
그리고 결과 테스트 :
코드없이 할 수있는 작은 팁. aldo의 답변보다 덜 효율적이지만 최종지도를 수행하는 경우 결국 트릭을 수행합니다. 마스터 뷰도 필요하지 않습니다. 맵 캔버스 범위는 다음과 같습니다.
기타
다른 맵을 마스터로 사용해야하는 경우 다른 맵을 클릭 한 다음 다른 맵을 설정하기 전에 "맵 캔버스에서 범위보기"를 클릭하십시오.
나중에 특정보기를 유지하려면 공간 책갈피 패널을 사용하는 것이 좋습니다. 맵 캔버스를 선택한 범위로 설정 한 다음 필요한 각 슬레이브에서 캔버스를 맵핑하려면 설정을 클릭하십시오. :)
방금 동일한 문제가 있었고 종속 맵의 표현식을 사용하여 원하는 결과를 얻을 수있었습니다. 레이아웃에서 모든지도의 크기가 동일하다고 가정합니다.
마스터 맵에 항목 ID를 지정하십시오 (예 : 'map1'(항목 속성의 맨 아래))
각 종속 맵에서 각 범위 값에 표현식을 추가하십시오.
x_min(map_get(item_variables('map1'), 'map_extent'))
이 코드는 작곡가 항목 'map1'에 대한 변수를 가져오고 범위를 지오메트리로 가져오고 마지막으로 지오메트리에서 x_min 값을 가져옵니다. x_min을 y_min, x_max 및 y_max로 적절히 변경하십시오.
단점은 마스터 맵을 이동할 때마다 종속 맵을 새로 고쳐야한다는 것입니다. 내보낼 때 자동으로 업데이트됩니다.