どんな動きをするの?
上のようなレイヤを地物毎にスクリーンショット撮ります。
こんな感じに。
地物の数が多いレイヤで実行すると、出力されるファイルが多くなります。また、終了するのに時間がかかるので気を付けてください。
使い方
例として、ここからダウンロードできるサンプルプラグインに追加します。
nodialog_skelton.pyの__init__にcheckableを設定しているところがあるので、Trueが設定されている場合はFalseに変更します。
self.checkable = False
nodialog_skelton.pyのstartを次のコードに書き換えます。
def start(self): self.outputdir = 'f:\\output' self.layer = self.iface.activeLayer() self.zoomscale = 0 self.ids = self.layer.allFeatureIds() self.canvas.mapCanvasRefreshed.connect( self.exportMap ) self.setNextFeatureExtent() # setNextFeatureExtent -> exportMap -> ... のループ
次のコードを追加します。
def exportMap(self): self.canvas.saveAsImage(self.outputdir + '\{}.png'.format(self.ids.pop()) ) if self.ids: self.setNextFeatureExtent() else: self.canvas.mapCanvasRefreshed.disconnect( self.exportMap ) def setNextFeatureExtent(self): self.canvas.zoomToFeatureIds( self.layer, [self.ids[-1]] ) if self.zoomscale != 0: self.canvas.zoomScale(self.zoomscale)
このようになればOKです。
~略~ class NodialogSkelton(qgis.gui.QgsMapTool): def exportMap(self): self.canvas.saveAsImage(self.outputdir + '\{}.png'.format(self.ids.pop()) ) if self.ids: self.setNextFeatureExtent() else: self.canvas.mapCanvasRefreshed.disconnect( self.exportMap ) def setNextFeatureExtent(self): self.canvas.zoomToFeatureIds( self.layer, [self.ids[-1]] ) if self.zoomscale != 0: self.canvas.zoomScale(self.zoomscale) def start(self): self.outputdir = 'f:\\output' self.layer = self.iface.activeLayer() self.zoomscale = 0 self.ids = self.layer.allFeatureIds() self.canvas.mapCanvasRefreshed.connect( self.exportMap ) self.setNextFeatureExtent() # setNextFeatureExtent -> exportMap -> ... のループ ~略~ def __init__(self, iface): self.plugin_name = 'ダイアログ無し雛形' # プラグイン名 self.menu_pos = '雛形' # プラグインの登録場所(このサンプルの場合、メニューの「プラグイン/雛形/ダイアログ無し雛形」) self.toolbar = True # Trueならツールバーにアイコンを表示する self.checkable = False # Trueならプラグイン実行中はアイコンが凹んだままになる
参考にしたサイト
最後までご覧頂き、ありがとうございました