首頁 > QGIS, 操作功能 > QGIS中的自定樣式

QGIS中的自定樣式

2013年12月20日 發表評論 閱讀評論

在QGIS中,可在圖層屬性中點選樣式頁面,依所需的展示方式自行決定符號的樣式。如下面的範例,假設我們有兩個不同的GPS資訊,我們可以經由設定將不同的類別以不同圖示表示:

從第一張圖的資訊可以看到此筆資料除了有兩個不同類別的資料外,還包含了速率及移動方向的資訊,我們是否有辦法可以將這些資訊也以圖形化(比如說圖形越大依速率決定,並把方向性加入)的方式展示呢?在樣式對話框的右下角,我們可以選擇控制地標點大小及旋轉的工具

以內建的工具即可以做到以上的效果,但若我們的資料更複雜,或想做更進階的展示該怎麼做呢?其實在QGIS中是以.qml檔案來控制樣式,在樣式的對話框中可以「儲存樣式」即可得到目前樣式的.qml檔案,我們只要適當地修改此文件即可進階控制樣式。

以文字編輯器打開後,可以看到以下的文字

上圖中紅框部份可以看出,這個樣式分為兩類(category),檔案內並分別對兩個類別的樣式進行定義。仔細找看看,也可找到大小(sizescale)及旋轉(rotation field)欄位的定義。

修改完成後,載入樣式即可得我們預期的結果。

瞭解以上QGIS對於樣式的處理方法,我們便可以在自已開發的客製化小工具中依更複雜的條件式做出不同的樣式。只要先以條件自動生成所需的.qml檔,再在小工具的程式碼中加入此.qml,即可得出客製化的樣式。可參考以下在python中載入.qml檔案的函式:

#load the qml
qmlfile = QtCore.QFile(“qgis-layer-style.qml”)
doc = QtXml.QDomDocument( “Categories” )
if qmlfile.open(QtCore.QIODevice.ReadWrite | QtCore.QIODevice.Text) == 0:
print “cannot open file”
if doc.setContent( qmlfile ) == 0:
print “no xml content”

# creating a new renderer
myRenderer = QgsCategorizedSymbolRendererV2(”,[])
myRenderer.load(doc.documentElement())
# here myRenderer has still no categories!

# assign myRenderer to the active layer
layer = qgis.utils.iface.activeLayer()
layer.setRendererV2(myRenderer)

Categories: QGIS, 操作功能 Tags:
  1. 目前尚無任何的評論。
  1. 2020年8月7日20:34 | #1
您必須 登入 後才能發表評論。