疑似カラーをスタイルへ反映

70 views
Skip to first unread message

松浦信

unread,
Jul 10, 2022, 10:20:13 PM7/10/22
to QGIS初心者質問グループ
使用マシン:Windows10
QGIS Ver    :QGIS 3.24.1
Puthon Ver:Python 3.9.5

 シングルバンドラスター(DEM)をPython(下部に添付)で
「疑似カラー」の設定を行ったのですが、
画面上は対象のラスターは正しく表示されるのですが、
プロパティのスタイルは、表示された内容ではないものが設定されています。

Pythonで設定した内容をスタイルへ反映するには、どの様にしたら宜しいでしょうか?


「疑似カラー」の設定 内容:
# アクティブレイヤ(DEM)のスタイル設定
rlayer = iface.activeLayer()                                            # アクティブレイヤ取得
moto_path = rlayer.dataProvider().dataSourceUri()                       # 元レイヤのパス取得

band = 1                                                                # バンド番号 設定
sec_per = 36.1779 / 100.0                                               # 着色2番目の全体に対する率
thd_per = 59.9760 / 100.0                                               # 着色3番目の全体に対する率

provider = rlayer.dataProvider()                                        # データプロバイダー取得
renderer = QgsSingleBandGrayRenderer( rlayer.dataProvider(), band )     # レンダオブジェクト取得

renderer.setGradient( 1 )                                               # レンダ勾配設定
renderer.setOpacity( 1.0 )                                              # レンダ透過率設定

# データプロバイダーよりバンドステータス取得
stats = provider.bandStatistics( band, QgsRasterBandStats.All, rlayer.extent(), 0 )
mean, sd = stats.mean, stats.stdDev                                     # 平均値・標準偏差の取得
min_val = mean - 3.0 * sd                                               # 平均値 - 標準偏差×3.0 を最小値として算出
max_val = mean + 3.0 * sd                                               # 平均値 + 標準偏差×3.0 を最大値として算出
sec_val = sec_per * (max_val - min_val) + min_val                       # 範囲の2番目の率にある値を算出
thd_val = thd_per * (max_val - min_val) + min_val                       # 範囲の3番目の率にある
# 新しいカラーランプシェーダーを作成
fcn = QgsColorRampShader()
fcn.setColorRampType(QgsColorRampShader.Interpolated)
fcn.setMinimumValue(min_val)                                            # 最小値設定
fcn.setMaximumValue(max_val)                                            # 最大値設定
lst = [ QgsColorRampShader.ColorRampItem(min_val, QColor('#0400ff')),
        QgsColorRampShader.ColorRampItem(sec_val, QColor('#00ffff')),
        QgsColorRampShader.ColorRampItem(thd_val, QColor('#ffff00')),
        QgsColorRampShader.ColorRampItem(max_val, QColor('#ff0000')) ]
fcn.setColorRampItemList(lst)                                           # カラーリスト設定
shader = QgsRasterShader()                                              # カラーランプシェーダー取得
shader.setRasterShaderFunction(fcn)                                     # カラーランプシェーダー設定
# レンダーへカラーランプシェーダーを反映
renderer = QgsSingleBandPseudoColorRenderer(rlayer.dataProvider(), band, shader)
rlayer.setRenderer(renderer)
# 現在の図面更新
rlayer.triggerRepaint()
Reply all
Reply to author
Forward
0 new messages