Pythonを使用してQGISで選択した機能の「スクリーンショット」を自動的に取得することは可能ですか?


11

ユーザーがフィーチャ(私の場合は都市部)のプロファイルを作成できるツールを実装しています。この機能(QGISウィンドウに表示される)のスクリーンショットを自動的に取得して、PDFプロファイルに表示することは可能ですか?

写真は、フィーチャーの範囲と、フィーチャーを超えたWMSレイヤーのみを示す必要があります。提案できるツールは既にありますか?


PNGではなくJPGを保存するにはどうすればよいですか?QgsMapCanvas.saveAsImage(QString theFileName、QPixmap * QPixmap = 0、QString = "PNG")最後のパラメーターとして "JPG"を使用できることは知っていますが、実際のマップとまったく同じであるQPixmapの定義方法はわかりません。 qgisのウィンドウ。手伝ってくれてありがとう。ミカ
ギズミック

回答:


10

コピ、

ソリューションにはいくつかのアプローチがありますが、これは最も簡単なものの1つである場合があります(ニーズに応じて)。

QgsVectorLayerを使用して機能を選択します

ベクターレイヤー(vlayer)およびフィーチャのid(fid)への参照を想定しています。こちらもご覧ください

vlayer.select(fid)

QgsInterfaceを使用して選択した機能にズームする

qgis.utils.iface.actionZoomToSelected().trigger()

QgsVectorLayerを使用して機能を選択解除する

vlayer.deselect(fid)

QgsMapCanvasを使用してキャンバスを画像として保存する

qgis.utils.iface.mapCanvas().saveAsImage('/Users/me/Desktop/feature.png')

キャンバスの保存は画面解像度で行われるため、ウィンドウがいっぱいに拡大されている場合、このアプローチでは可能な限り大きな写真が作成されます。ただし、写真が同じマップズームスケールで表示されることは保証されず、ピクセルサイズは比較的同じになります。QgisInterface::actionPanToSelected()ズームスケールの一貫性を保つ必要がある場合など、他のオプションがあります。


ワオ。ご回答ありがとうございます!これは非常にうまくいきます!
kopi

1
「easy print」プラグインもご覧ください。おそらく必要なものではありませんが、インスピレーションには役立ちます。
ジョヴァンニマンギ

スクリーンショットを撮る前にスケールを設定することは可能ですか?そして、「actionPanToSelected」をどのように使用できますか?qgis.utils.iface.actionPanToSelected(機能にパンしている機能...)が、このリターンエラーメッセージ:「Attritbuteエラー:QgisInterfaceオブジェクトは何の属性がactionPanToSelectedなかった私はそれをこのようにしようとしています
コピ

1
qgis.utils.iface.mapCanvas().zoomScale(scale)地図の縮尺を設定してみてください。actionPanToSelected()はパラメーターを受け取りませんが、アクション自体への参照を返します(上記のactionZoomToSelected()など)。パブリックスロットqgis.utils.iface.actionPanToSelected().trigger()を使用してアクションを起動します。これにより、選択されているものを特定できます。
dakcarto

1
うーん。qgis.utils.iface.actionPanToSelected()。trigger()はQGISバージョン1.8.0で動作します。最新の安定バージョン(1.8.0)を使用していますか?この機能は1月に追加されたため、バージョン1.7.xにはありません
dakcarto
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.