QGISのプラグイン作成 ツールチップサンプル


はじめに

このサンプルは、マップ上のマウスカーソルの位置に、ツールチップを表示させることができます。常に表示させると邪魔になるので、マウスカーソルの動きが止まった時に表示させるようにしました。

f:id:Chiakikun:20200530220359p:plain


使い方

ここからzipファイルをダウンロードしてインストールします。プラグインを実行した状態でマップにカーソルを動かすと、その位置の座標がツールチップに表示されます。


コード

class ToolTipSample(QgsMapTool):

    def start(self):
        maptool = ToolTipClass(self.canvas, 100)

~略~

class ToolTipClass(QgsMapTool):

    def __init__(self, canvas, ms): # msはミリ秒
        QgsMapTool.__init__(self, canvas)

        self.canvas = canvas

        self.ms = ms
        # canvasMoveEventで設定した秒数(msで設定)経過したら呼ばれるメソッドを設定
        self.timerMapTips = QTimer( canvas )
        self.timerMapTips.timeout.connect( self.showMapTip )


    def canvasMoveEvent(self, event):
        QToolTip.hideText()
        self.timerMapTips.start(self.ms)


    def showMapTip( self ):
        self.timerMapTips.stop()

        # 表示する値を設定する。
        mappos = self.toMapCoordinates(self.canvas.mouseLastXY())
        value = mappos

        if value == None:
            return
        text = str(value)
        QToolTip.showText( self.canvas.mapToGlobal( self.canvas.mouseLastXY() ), text, self.canvas )

~略~

4行目 ツールチップの表示を、マウスカーソルの移動が止まってから0.1秒後に表示するように設定します。
18行目 4行目で設定した時間が経過したらツールチップを表示させるメソッドを実行するように設定します。
23行目 マウスを動かしたら、タイマーをスタートさせます。そのため、マウスを動かし続けている間は、タイマーはリセットされ続けることになります。
26行目 マウスを動かさなければタイマーは進むので、4行目で設定した時間マウスを止めていれば、このメソッドが呼ばれます。
コード全文


最後までご覧いただき、ありがとうございました。

QGISのプラグイン作成 地物の色設定(連続値による定義)のサンプル


はじめに

このサンプルプラグインは、あるフィールドの値を基に、連続値による定義で色設定を行います。例えば...

f:id:Chiakikun:20200531165640p:plain
点群のレイヤです。

 

f:id:Chiakikun:20200531165657p:plain
拡大したところ。あるフィールドには標高値が入っています。

 

f:id:Chiakikun:20200531165721p:plain
あるフィールドを対象に連続値による定義で地物の色を設定すると、上の真っ黒にしか見えなかった点群がこんな感じに見えるようになります


使い方

ここからzipファイルをダウンロードしてインストールします。
インストールできたら、値が入っているフィールドと色の設定をします。
graduatedsymbol_sample.pyの以下の部分を適当に編集して下さい。

        self.field = '〇〇'

        # ルール
        self.rules = (
            (0,     30,   '#ffffff'),
            (30.1,  60,   '#ffcccc'),
            (60.1,  90,   '#ff9999'),
            (90.1,  120,  '#ff6666'),
            (120.1, 150,  '#ff3333'),
            (150.1, 9999, '#ff0000')
        )

設定が終わったら、プラグインを再読み込みして、色分けしたいレイヤをアクティブにした状態で実行します。

f:id:Chiakikun:20210515110205p:plain

設定後のシンボロジは上の画像の様になります。


コード

class GraduatedSymbolSample(QgsMapTool):

    def start(self):
    
~略~

        # 元の設定を保存
        self.oldrenderer = self.layer.renderer().clone()

        # 設定
        rangelist = []
        for minv, maxv, color_name in self.rules:
            symbol = QgsSymbol.defaultSymbol(self.layer.geometryType())
            symbol.symbolLayer(0).setStrokeColor(QColor('transparent'))
            symbol.setColor(QColor(color_name))        
            rangelist.append( QgsRendererRange(minv, maxv, symbol, str(minv) +' - '+ str(maxv)) )

        self.renderer = QgsGraduatedSymbolRenderer(self.field, rangelist)
        self.renderer.setMode(QgsGraduatedSymbolRenderer.Custom)
        self.layer.setRenderer(self.renderer)
        self.layer.triggerRepaint()


    def finish(self):
        # 元の設定に戻す
        self.layer.setRenderer(self.oldrenderer)
        self.layer.triggerRepaint()

~略~

    def __init__(self, iface):

~略~

        self.field = '〇〇'

        # ルール
        self.rules = (
            (0,     30,   '#ffffff'),
            (30.1,  60,   '#ffcccc'),
            (60.1,  90,   '#ff9999'),
            (90.1,  120,  '#ff6666'),
            (120.1, 150,  '#ff3333'),
            (150.1, 9999, '#ff0000')
        )

~略~

35行目~45行目 色設定のルールを作成します。
8行目 新しく色設定をする前に、現在の設定を退避します。
11行目~16行目 色設定のルールを基に、連続値による色設定を行います。
18行目~21行目 設定を適用して、マップに再描画します。
26行目 プラグインを終了したら、プラグイン実行前の色設定に戻します。
ソース全文


最後までご覧いただき、ありがとうございました。

QGISのプラグイン作成 地物の色設定(ルールによる定義)のサンプル


はじめに

このサンプルは、設定するフィルタによって個別の色設定をすることができるプラグインです。
例えば、Aというフィールドの値に〇〇が含まれている地物は赤色とか、オブジェクトの面積が□□以上なら青色にすることができます。


使い方

ここからzipファイルをダウンロードしてインストールします。
rulebase_sample.pyの76行目からの以下の部分を、適当に編集します。

        # ルール (ラベル, 式, 色)
        self.style_rules = (
            ('設定1', '"フィールド名" = \'〇〇\'', '#ff0000'), # この設定では赤
            ('設定2', '"フィールド名" = \'□□\'', '#00ff00'), # この設定では緑
            ('その他',  'ELSE',    '#ffffff')                  # それ以外は白
        )

f:id:Chiakikun:20210514224331p:plain

上記のコードの設定項目は上の画像の赤で囲った部分になります。


コード

class RulebaseSample(QgsMapTool):

    def start(self):
    
~略~
        # 元の設定を保存
        self.oldrenderer = self.layer.renderer().clone()

        # 設定
        self.renderer = QgsRuleBasedRenderer(QgsSymbol.defaultSymbol(self.layer.geometryType()))
        self.root_rule = self.renderer.rootRule()
        for label, expression, color_name in self.style_rules:
            rule = self.root_rule.children()[0].clone() # ラベル、フィルタ、色以外はデフォルト 
            rule.setLabel(label)
            rule.setFilterExpression(expression)
            rule.symbol().setColor(QColor(color_name))
            self.root_rule.appendChild(rule)
        self.root_rule.removeChildAt(0)

        self.layer.setRenderer(self.renderer)
        self.layer.triggerRepaint()


    def finish(self):
        # 元の設定に戻す
        self.layer.setRenderer(self.oldrenderer)
        self.layer.triggerRepaint()

        self.canvas.mapToolSet.disconnect(self.unsetTool)


    def __init__(self, iface):
    
~略~
        # ルール (ラベル, 式, 色)
        self.style_rules = (
            ('設定1', '"フィールド名" = \'〇〇\'', '#ff0000'), # この設定では赤
            ('設定2', '"フィールド名" = \'□□\'', '#00ff00'), # この設定では緑
            ('その他',  'ELSE',    '#ffffff')                  # それ以外は白
        )

7行目 プラグインを実行すると、現在の設定を退避します。
10行目~18行目 36行目で作成したルールを設定します。
20行目 新しい設定でレイヤを描画します。
26行目 プラグインを終了すると、プラグイン実行前の色設定に戻ります。
ソース全文


最後までご覧頂き、ありがとうございました