QGISのプラグイン作成 スクリーンショットサンプル(フューチャー毎)
はじめに
このページでは、ベクタレイヤの地物毎にスクリーンショットを撮って保存するサンプルを紹介しています。
サンプルプラグインの使い方
ここからzipファイルをダウンロードして、インストールしてください。
screenShot_sample_dialog.pyの41行目辺りの以下の部分を適当に設定してください。
self.savedir = 'c:/users/〇〇/desktop' # 画像の保存先 self.scale = 250000 # スクリーンショット撮るときのマップの縮尺
プラグインを実行すると、上のダイアログが表示されるので、スクリーンショットを撮りたいベクタレイヤを選択してから、実行ボタンを押下します。
保存先に指定したフォルダ内に、選択したベクタレイヤの地物毎に画像が保存されていきます。
コード
class ScreenShotSampleDialog(QtWidgets.QDialog, FORM_CLASS): ~略~ def exportMap(self): self.canvas.saveAsImage( self.savedir + "/{}.png".format( self.ids.pop() ) ) if self.ids: self.setNextFeatureExtent() else: self.canvas.mapCanvasRefreshed.disconnect( self.exportMap ) def setNextFeatureExtent(self): # この関数が終わるとself.exportMapが呼ばれます(リフレッシュが終わるので) self.canvas.zoomToFeatureIds( self.layer, [self.ids[-1]] ) self.canvas.zoomScale(self.scale) # 縮尺 def pushExec(self): self.layer = self.iface.activeLayer() if type(self.layer) is not qgis.core.QgsVectorLayer: return self.ids = self.layer.allFeatureIds() self.canvas.mapCanvasRefreshed.connect( self.exportMap ) self.setNextFeatureExtent() # setNextFeatureExtent -> exportMap -> ...のループに突入 self.close()
25行目 マップがリフレッシュされたときに、exportMapを実行してほしいので、登録しています。
14,15行目 撮影したい地物がマップの中心になるように移動して、縮尺設定する。この後マップの描画が終わると...
5行目 マップのスクリーンショットが撮られ、setNextFeatureExtentが実行されます。
参考にしたサイト
最後までご覧頂き、ありがとうございました