依欄位合併(dissolve)

Dissolve 是一個很常會進行的一個動作,概念上是將一個 面圖層,依據某一個欄位進行合併。例如,對鄉鎮圖層,依據縣市欄位來進行合併。或是將整個研究區進行合併,例如把所有縣市合併成台灣的海岸線。

QGIS 的 dissolve 有一些問題,主要是在處理統計資訊上,不過如果並沒有要應用這些統計值(例如是為了產生縣市面的邊界,來源的鄉鎮的統計數值並不會被用到的情況下),則不成問題。

若是需要在 dissolve 時,也依據欄位來將統計數值進行加總、平均等動作,建議使用下方介紹的 套件 Dissolve with stats。套件的安裝方式請參考套件安裝。若無法使用,也可以透過下面介紹的方法來達到同樣的目的。

以下主要用鄉鎮人口資料(點擊下載)作說明如何從鄉鎮加總到縣市。

全部合併成一個面

下列說明的是如何從 鄉鎮合併成臺灣的海岸線。

QGIS 自帶的 Dissolve 工具在 Vector-->Geoprocessing Tools-->Dissolve 界面000


視窗是這個樣子,其中 Input layer 選要 dissolve 的來源圖層;其下方的 Dissolve all (do not use field) 標記起來則表示將所有面都合併成一個面;在 Dissolved 欄位,點後面的 ... 按鈕: 界面001


選擇輸出的路徑及檔案名稱: 界面002


這 Dissolve 過程可能會需要很長時間,請耐心等候: 界面003


Dissolve 成果是一個只有一個面的台灣圖層: 界面004


使用 Dissolve with stats 套件

確認 Dissolve with stats 套件已安裝: 界面010


安裝好後,可以到 Vector-->Dissolve with stats-->Dissolve with stats 來打開 dissolve 視窗: 界面011


這視窗很簡單,第一個欄位項目是來源圖層的選項;第二個選項是要依據哪一個欄位進行合併,這裡選的是縣市ID;接下來的表單是讓使用者勾選「哪些欄位要留下來」,及「如何處理這些統計量」的地方。要留下的需要在 keep 標記,然後在後面 stat 的地方選擇如何計算這個統計量: 界面012


例如,年輕人口與老年人口數要用加的: 界面013


再下來的欄位是設定輸出的路徑及檔名: 界面015


按下 OK 後,等一下,就處理好了: 界面016


這是透過套件進行的 dissolve 的屬性表: 界面030


先產生鄉鎮點,再以 spatial join 到 dissolve 的面圖層

假如在較舊、或未來的 QGIS 版本中,上述 Dissolve with stats 套件不能用的情況下,且 QGIS 未提供統計量的 dissolve 處理方式,則可以選擇用這種轉個彎的方式。概念很簡單,就是先將鄉鎮資料進行兩件事,一件事是 dissolve 得到縣市的面資料;另一件事是產生 centroid,因為 centroid 會繼承所有原來的面的資料的屬性。在完成上述兩件事後,接下來可以將 centroid 圖層依照空間 join 到縣市的面資料上,因為在 join 的過程 QGIS 會讓使用者決定是否要、及要如何處理多點對一面情況下,計算其統計量 (例如加總、平均、計次等)。

以 dissolve 產生縣市面圖層

方法與前述產生台灣海岸線的方法類似: 界面005


在這需要注意的是, Dissolve all 的標記需要取消掉;在 Unique ID field 可以跟前面一樣選擇 COUNTY_ID: 界面007


確認設定好後,開始執行: 界面008


取得一個縣市面圖層資料: 界面009 . 這面圖層的屬性表中的數值,是預設成會取得來源資料中的第一筆COUNTY_ID屬於各個面的那筆來當作是 dissolve 後的屬性,在處理縣市名稱時沒有問題,不過在統計量時,我們常會用到的是將其加總。

產生 centroid

這步驟很簡單,請參考 centroid 章節 界面018


spatial join

空間 join 的工具是在 Vector-->Data Management Tools-->Join attributes by location: 界面018


這是 join 的視窗。目標圖層是 Dissolved (前面準備的縣市面圖層);Join vector layer 是 centroid 圖層;幾何關係的確認方法是 intersects (應該是落在面中的點,因此兩者必然在空間結構上相交);Attribute summary 的部分輸入 「sum」 就好,其他方法可以刪除掉,因為在這個範例中,有意義的只有人數加總的值。: 界面019


將視窗往下移,會在 Joined table 的底下有一個 Joined layer,這裡填寫輸出的路徑與檔名: 界面020


確認完成後,點 Run 執行: 界面021


執行中: 界面022


合併後的屬性表

QGIS 會自動在檔名的前面加上 sum 字樣,這些是透過 join 而產生的欄位,在屬性表的偏前面區域會有透過dissolve 來的欄位,應該需要刪除掉: 界面023
屬性表的最後有一個 count 欄位,是 join 過程中,被 join 進來的點有幾筆。

透過屬性表的計算,把縣市的老化指數給計算好: 界面028


分層設色圖 把縣市人口老化指數上色到面: 界面029