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行目 プラグインを終了すると、プラグイン実行前の色設定に戻ります。
ソース全文


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