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マップに関連付けることができますか?
マーティン

プラグイン、またはスタンドアロンのアプリで作業していますか?
Nathan W

はい、わかりました。プラグインに取り組んでいます。忘れましたgis.utils.iface。今では完全に機能しています。ありがとうございました!
マーティン

5

選択した機能へのズームは、[表示]メニューの[選択へズーム]オプションをトリガーして実行することもできます。

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

注:インデックス番号は、QGISのバージョンによって異なる場合があります。


またはもっと直接:

iface.actionZoomToSelected().trigger()

2
この方法は使用しません。新しいqgisバージョンで関数がインデックス13に移動するとどうなりますか?この種の問題のトラブルシューティングは、決して楽しいものではありません...
mozzbozz

@mozzbozz同意する。最初の答えが最良の選択です。これは2番目の代替オプションになります。あなたの提案に従って答えを編集しました。ありがとう!
Sjs 2017

3
オプションをトリガーしたい場合iface.actionZoomToSelected().trigger()は、少し安全だと思います:)
ジョセフ

@ジョセフはあなたの提案に従って答えを編集できますか?
Sjs 2017

1
@ジョセフ私はそれを気にしません;)あなたが答えをさらによく見せてくれてうれしい!
Sjs 2017

0

#最初のQMessageBoxは選択されたすべての機能を表示します:

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

#選択した機能への2番目のズーム:

iface.actionZoomToSelected().trigger();
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.