「在QGIS中,有辦法把許多功能一起串連起來嗎?」、「有方法可以減少重複步驟的執行嗎?」、「我可以寫出一個簡單的演算法嗎?」
本篇文章交進行QGIS model designer,並優化QGIS影向向量化的方式。
本篇文章不建議沒有任何背景知識的人閱讀,閱讀本篇文章前,建議先閱讀以下三篇文章:
1.學習如何使用 QGIS model designer:可以參考看看林政道老師的教學,請點此連結。
2.學習如何進行QGIS影向向量化:請參考本部落的教學貼文,QGIS技術-影像計算(Raster calculator),將WMTS圖磚轉換為向量資料
3.學習如何修正向量圖層錯樸拓物:請參考本部落格的教學文章,QGIS疑難雜症-SHP圖層拓樸校正
這篇文章算是集這個部落格技術的一個大成,一開始看不懂或是操作上遇到問題,都是很正常的~
以下文章將開始進行介紹。
第一部份:什麼是model designer?
model designer可以使用圖形化使用介面,將許多的演算法串接在一起,並自動化執行。舉例來說:如果要進行坡度分析(slope)要分乘三步驟執行,1.匯入dem檔案,2.使用遮罩進行範圍裁切後,3.進行坡度分析。而model designer可以一次性串接上述的三個步驟,只要按一個按鈕就可以執行完所有的步驟。如果你經常要執行重複性的動作,model designer可以節省你許多時間。
model designer並不是QGIS特有的功能。像是ArcGIS Pro的ModelBuilder與TerrSet- IDIRSI的Macro Modeler皆有類似的功能。QGIS的model designer一開始是用外掛的方式提供服務,而後才被整並到QGIS裡面,變成內建的功能。
第二部分:QGIS model designer的缺陷與環境問題
這部分很重要,請一定要先閱讀完後在進行QGIS model designer操作。
QGIS model designer存在不少的bug與問題,當初我進行操作時踩了許多坑,經過多次測試後才發現問題所在。
問題一:QIGS 2版檔案與QGIS 3版檔案無法相互支援
首先,QGIS model designer在QGIS 2版時便有提供此功能,QGIS 2版的環境儲存檔案的格式為「.model」,而QGIS 3版的環境儲存檔案的格式為「.model3」,QIGS 3版無法開啟「.model」檔案。詳細說明請見貼文,由於兩個版本的核心架構有所改變,因使無法互相支援。
問題二:部分QIGS 3版無法開啟現有的.model3檔案
這應該是QGIS的惡性bug,我測試了許多版的model designer,多數model designer的版本都可以儲存.model3,但是儲存完後想要重新讀取.model3檔案時,視窗上就會找不到檔案。
此情況請見以下圖片說明
![]() |
.model3檔案在我的電腦上儲存的位置 |
透過QGIS-3.22.7版本開啟時的畫面,找不到.model3檔案 |
透過QGIS-3.6.3版本開啟的畫面,出現.model3檔案 |
我不確定這個問題是只存在我的電腦上,還是這是共通的問題,如果你有遇到跟我一樣的問題,歡迎在貼文下方告訴我你的狀況。
我的電腦版本為win 10,測試過以下幾個版本。
可以開啟QGIS model designer的版本:
- QGIS-3.6.3。
- QIGS-3.16.9
- QGIS-3.18.2
- QGIS-3.18.3
- QGIS-3.22.7
與網友( )討論後,發現有可能此問題是只存在於我的電腦上,網友的環境為3.22與3.28的專案檔可以互通,並不會有我的問題。
- 打開QGIS model designer的介面
點選「Create New Model」 - 進入「model designer」編輯畫面
model designer的介面 - 「輸入」與「演算法」:在輸入的介面中可以調整要輸入的資料類型(向量資料、影像資料)、資料的座標系統設定(CRS)、資料輸入的範圍......等,只是不是QGIS的演算法功能,都可以被歸類到「輸入」這個群組裡面。演算法的話就是地理運算工具相裡面可以找到的各種功能,也包含你安裝的第三方外掛功能所提供的演算法。
輸入群組裡面所提供的各種功能 演算法群組裡面提供的功能,除了QIGS內建功能以外,也包含GDAL、GRESS、SAGA與我安裝的外掛「Lat Lon tools」 - 影像向量化核心概念與處理流程:建議你在使用QGIS model designer前,先在QGIS一般介面中做出來,等確定一般的方法可以做出來之後,再使用QGIS model designer重新建構出來。使用QGIS model designer時,應該要很清楚需要使用哪些演算法與功能,以及整個步驟的先後順序,我建議大家可以先繪製出一個流程圖,再進行操作。以下是影像向量化的整體流程圖。
「理想」情況的整體流程圖 - 匯入影像:使用「輸入」群組,選擇「raster layer」。參數名稱建議使用英文,不然QGIS model designer會出現錯誤。我命名名稱為「raster_layer1」。
使用「raster layer」匯入影像資料 完成動作後,發現model designer出現了第一個模組 - 匯入「raster calculator」演算法:在「演算法」的地方進行「raster calculator」搜尋,會發現到有很多種演算法,此時要選擇「QGIS-raster calculator」,不要選擇其他的演算法。並輸入設定公式,詳細的參數設定可參閱我之前的文章(QGIS技術-影像計算(Raster calculator),將WMTS圖磚轉換為向量資料)。
搜尋「raster calculator」,並選擇「QGIS-raster calculator」 整體詳細設定,請確定所有參數都調整的跟這張圖片一樣 reference layer(s)(used for automated extent,cellsize,and CRS)[optional]的地方記得要勾選「raster_layer1」
output CRS 選擇「3826」,使用QGIS model designer時需要注意到非常多的小細節,像是檔案名稱與檔案路徑不可以有中文、有些演算法需要用CRS為公尺單位的系統、進行處理的圖層不能有拓樸錯誤、檔案名稱在個別步驟是否連貫......等,考驗大家對於QGIS的熟悉度。最後在「Output」的地方輸入這個步驟處理完成的檔案名稱,我命名為「out1」。- 實驗現階段的模組是否成功(1):使用model designer時,我相當建議大家不要把所有的功能都設定完後才實驗模組可不可以運作,因為自己建立的模組相當容易出錯,如果你是同時設定了很幾個步驟,那你會不知道是那個步驟出錯。我建議完成一個步驟後就去運作模組,同時看一下輸出的結果有沒有出錯。
現階段的成果,共有3個模組 點及最右邊的綠色箭頭,進行模組執行 自己建立的模組視窗。我選擇自己先前建立好的測試檔案「test」進行測試,這裡需要大家自己先建立一個tif檔進行測試。 目前階段的執行結果,整體來說並沒有出錯 - 匯入「raster conversion」演算法,進行影像轉向量:在「演算法」的群組中搜尋「影像向量化」,會找到一個GDAL的演算法「raster conversion」。在輸入圖層的地方選擇之前步驟「raster calculator」的處理結果,並在「vectorized」的地方命名檔案輸出的名稱,我命名為「out2」。其餘的地方皆不要修改,使用預設的參數。
搜尋GDAL的演算法-raster conversion 此步驟整體的參數測定 現階段的成果 測試成功,到目前都還沒有問題 - 產生出向量檔後,建議要檢查一下產製的shp檔有沒有存在拓樸錯誤,使用「檢查有效性」就可以看出是否有錯誤。使用「影像向量化時」基本上會有「自我交會」的拓樸錯誤,詳細解決方法請參考我的這篇文章。這裡我直接使用「Fix geometries」進行修正。
使用檢查有效性後,發現產製的向量圖層有存在拓樸錯誤。 在演算法的地方,搜尋「Fix geometries」。 此步驟的輸出結果,名稱設定為「out3 - 最後一個步驟便是重先還原出影像檔的R、G、B的波段數值,R、G、B的還原公式分別為「R:DN" / 1000000 、G:( "DN" -"R" * 1000000 ) / 1000、B:( "DN" -"R" * 1000000 ) - ( "G" * 1000 )」。搜尋演算法「field calculator」,並逐步還原各波段的數值。
「field calculator」的中文名稱為「欄位計算」 R波段的設定參數 完成R波段後,先嘗試執行看看 R波段的數值成功還原!G波段參數 B波段參數 最後成果完成圖,這時只要留下最後一個步驟的輸出結果即可。 儲存後,可以在地理運算工具列中,找到我們剛剛完成的模組 執行模組時畫面
- 第四部分:成果限制與討論
- 在QGIS疑難雜症-SHP圖層拓樸校正QGIS技術-影像計算(Raster calculator),將WMTS圖磚轉換為向量資料這篇文章中,就提到使用QGIS的方法進行還原時,B的波段數字會不準確,由於在此篇貼文中教學的方法,還是用QGIS的方式去處理,因此還是會存在這個問題。
另外QGIS model designer除了在QGIS3.16.3版時會比較穩定以外,如果你組合的演算法過多、太複雜,也會有機會當機(我沒有遇到過,聽其他使用者說的)。
對於常常使用GIS軟體的人,QGIS model designer可以替我們省去重複執行的動作,進而加速GIS的處理速度。如果你學到這裡還是覺得處理空間的速度還是太慢了,那下一步歡迎你學習使用PYTHON的方式來處理資料XDD(來學寫程式吧~)。
這個部落格所寫的內容,都是依據我自己的學習經驗所寫的,對我來說,從一開始只會呼匯入地圖、環域分析,到開始組合不同的QGIS演算法,直到使用QGIS model designer來處理,都是一個循序漸進的過程,而我也開始發現自己不排斥寫程式,甚至到喜歡寫程式。
如果你看完這篇文章還有不懂的地方,或是操作上有遇到問題,歡迎在下方流言或是直接寄信告訴我,我會抽空回覆。
沒有留言:
張貼留言