この記事は旧レンダラの設定です。新レンダラについては以下のリンクを参照してください。
QGISでは、ベクタデータに対して、色、線種、線幅を指定したり、
ラベルの表示/非表示の切り替え、ラベル文字に対する操作などをAPIから行うことができます。
レンダラ
ベクタデータの表示属性は各レイヤーに割り当てられているレンダラオブジェクトが管理しています。
レンダラは4種類あって、それぞれベクタレイヤーのProperty-Symbology-Legend typeにある4つの表示属性に対応しています。
QgsVectorLayer
オブジェクトが作成された直後は、レンダラはQgsSingleSymbolRenderer
が割り当てられています。
そのまま現在のレンダラに対して設定を行いたい場合は
renderer = layer.renderer()
等としてレンダラを取得し、あれこれ設定すればよいでしょう。
別のレンダラを設定したい場合は、レンダラオブジェクトを作成後、layer.setRenderer(renderer)
等として割り当てなおします。
表示属性の設定が完了したら、キャンバスをリフレッシュして反映させます。
SingleSymbolの場合
SingleSymbolでは、レイヤーの全ての要素が同じ表示属性を持ちます。
以下のようにして表示属性を設定します。
# QgsSymbolポインタを取得 symbol = renderer.symbol() # 色をやや暗い青に設定 symbol.setColor(QColor.fromRgb(0, 0, 150)) # ポリゴンの塗りつぶしを無しに設定 symbol.setFillStyle(Qt.NoBrush) # 線種を実線に設定 symbol.setLineStyle(Qt.SolidLine) # 現在の線幅を取得 lwidth = symbol.lineWidth() # 線幅を設定 symbol.setLineWidth(1.0)
点要素のレイヤーの場合はレイヤーのプロパティでシンボルマークを選択することができます。
APIからポイントシンボルを指定する場合はシンボルの名称を指定します。
シンボルの名称は、上の図のようにシンボル上にマウスカーソルを置くとツールチップのように表示されます。
APIから調べるには以下のようにします。わかりやすいようにひとつずつ変数を用意しています。
layer = self.iface.activeLayer()
renderer = layer.renderer()
symbol = renderer.symbol()
# 現在のレイヤーに割り当てられているシンボルの名称を取得
name = symbol.pointSymbolName()
QMessageBox.information( self.iface.mainWindow(), "Symbol Name", name )
名称は11個の組み込みシンボルではは”hard:~~”となっています。
それ以外はSVGファイルで格納されており、その場合は”svg:フルパス名”となっています。
シンボルを指定する場合は以下のようにします。
symbol = layer.renderer().symbol() symbol.setNamedPointSymbol("svg:C:/OSGeo4W/apps/qgis/./svg/transport/railway=station.svg")
ラベル
ラベルはレンダラではなくレイヤークラスに属しています。
ラベルを有効にするにはlayer.enableLabels( True )
とします。
ラベルの表示属性を操作するには、以下のようにします。
# ラベルを表示させる layer.enableLabels(True) # ラベルオブジェクトへのポインタを取得 label = layer.label() # ラベル文字列に使用するフィールドを指定 label.setLabelField(QgsLabel.Text, 0) # ラベルの表示属性オブジェクトへのポインタを取得 labelAttr = label.layerAttributes() # ラベルの色を指定 labelAttr.setColor(QColor.fromRgb(0, 0, 150)) # ラベルのサイズを取得 size = labelAttr.size() # ラベルのサイズをポイント単位で指定 labelAttr.setSize(18.0, QgsLabelAttributes.PointUnits)
ラベルのサイズ指定はポイント単位と地図単位を選択できます。
ポイント単位を指定すると、キャンバスの表示範囲に関係なく一定の大きさで表示されます。
地図単位にした場合は表示範囲に伴って大きさが変化します。