pyQGIS로 선택한 기능을 확대 / 축소하는 방법


10

피쳐를 선택하고 확대 / 축소하는 기능을 만들고 싶습니다 (QGIS와 유사). 따라서 다음과 같은 기능이 있습니다.

QgsMapLayerRegistry.instance().addMapLayer(self.vlayer)

def zoomTo(self):
    layer = self.vlayer
    atable = self.ui.table

    selectList=[]
    for i in atable.selectionModel().selectedRows():
        ID = atable.item(i.row(),0).text()
        selectList.append(int(ID))

    layer.setSelectedFeatures(selectList)

선택한 기능이 맵에서 강조 표시됩니다. 그러나 선택한 지형지 ​​물에 '확대'를하거나지도 중앙에 초점을 맞추는 방법을 모르겠습니다.

답변:


14

맵 캔버스의 범위를 선택 범위로 설정해야합니다.

box = layer.boundingBoxOfSelected()
iface.mapCanvas().setExtent(box)
iface.mapCanvas().refresh()

감사합니다! iface를 실제 열린 QGIS 맵과 어떻게 관련시킬 수 있습니까?
Martin

플러그인 또는 독립형 앱을 사용하고 있습니까?
Nathan W

그래 플러그인을 작성 중입니다. 나는 잊었다 gis.utils.iface. 이제는 완벽하게 작동합니다. 다시 감사합니다!
Martin

5

보기 메뉴의 "선택 영역으로 확대 / 축소"옵션을 트리거하여 선택한 기능으로 확대 / 축소 할 수도 있습니다.

eMenu = self.iface.viewMenu()
eMenu.actions() [12].trigger()

참고 : 색인 번호는 QGIS 버전마다 다를 수 있습니다.


또는 더 직접 :

iface.actionZoomToSelected().trigger()

2
이 방법을 사용하지 않을 것입니다. 새로운 qgis 버전에서 함수가 인덱스 13으로 이동하면 어떻게됩니까? 이런 종류의 문제를 해결하는 것은 확실히 재미가 없습니다 ...
mozzbozz

@mozzbozz 동의합니다. 첫 번째 답변이 최선의 선택입니다. 이것은 두 번째 대체 옵션이 될 수 있습니다. 당신의 제안에 따라 답변을 편집했습니다. 감사!
Sjs

3
옵션을 실행하려면 iface.actionZoomToSelected().trigger()조금 더 안전 하다고 생각합니다 :)
Joseph

@Joseph 귀하의 제안에 따라 답변을 편집 할 수 있습니까?
Sjs

1
@Joseph 나는 마음에 들지 않을 것이다;) 당신이 대답을 더 좋게 보이게해서 기쁘다!
Sjs

0

# 첫 번째 QMessageBox는 선택된 모든 기능을 표시합니다 :

lyr = iface.activeLayer();
fts = lyr.selectedFeatures();
ftsCount = lyr.selectedFeatureCount();
sFts = str(ftsCount);
msgBox = QMessageBox();
msgBox.setText(sFts +' selected features');
msgBox.exec_();

# 선택된 기능으로 두 번째 줌 :

iface.actionZoomToSelected().trigger();
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.