近鄰分析¶
警告
This tutorial is now obsolete. A new and updated version is available at Nearest Neighbor Analysis (QGIS3)
GIS 非常適合用於分析圖徵的空間關係。這些分析的其中之一是為特定的圖徵尋找最接近的另一個圖徵,這時 QGIS 的距離矩陣(Distance Matrix)工具就可以派上用場。在本教學中,我們會使用 2 個資料集,並且尋找這兩個圖層中,哪些點彼此最為靠近。
內容說明¶
我們已有許多重要地震的位置,現在要找出這些離地震最近的人口聚居地。
你還會學到這些¶
如何在 QGIS 中操作資料表連結 (如需更多介紹請看 資料表連接)
使用 查詢建構器 來顯示圖層中的次群組
使用 MMQGIS 附加元件畫出樞紐線以呈現近鄰分析的結果
取得資料¶
這裡我們要使用 NOAA 的美國國立地球物理資料中心(NGDC)的 Significant Earthquake Database,內含所有的全球重大地震。下載 地震資料的 tab 分隔檔
Natural Earth 上有不錯的 `人口居住地 資料庫,`其中也有 `簡化版 (欄位較少) 的資料庫<http://www.naturalearthdata.com/http//www.naturalearthdata.com/download/10m/cultural/ne_10m_populated_places_simple.zip>`_
為了方便起見,你也可以直接用下面的連結下載這兩份資料集:
`signif.txt <http://www.qgistutorials.com/downloads/signif.txt>
ne_10m_populated_places_simple.zip
Data Sources: [NCEI] [NATURALEARTH]
操作流程¶
打開 QGIS,選擇
,然後選擇剛下載的signif.txt
。
這個檔案是 Tab 分隔檔,所以我們可以在 檔案格式 欄位選擇 定位鍵。程式會自動選擇 X 和 Y 欄位,所以按下 確定 即可。
備註
可能你會看到 QGIS 顯示讀取檔案的時候出現了一些錯誤,這是由於檔案中的某些值異常所引起的,這些異常的資料不會被讀取。在本教學中,我們就先忽略這些錯誤沒關係。
由於地震資料採用經緯度座標,輸入的 CRS 應該會採用
EPSG: 4326
,可在視窗右下角檢查是否正確。接下來來開啟人口聚居地圖層,選擇 。
選擇剛下載的
ne_10m_populated_places_simple.zip
並按下 確定。
稍微縮放一下瀏覽這兩個資料庫。每個紫色的點都是一個重要地震,而每個藍色的點都是一個人口聚居地(譯按:你的點顏色可能會不同,請對照圖層各自的名字)。我們要做的是為每個地震點找出最接近的人口聚居地。
選擇
。
在開啟的視窗中,「輸入點圖層」選擇
signif
,「目標點圖層」選擇ne_10m_populated_places_simple
。此外,我們還要為這兩個圖層選擇一個「唯一ID欄位」(每個點的此欄位值都不相同),輸出檔將會依照此欄位顯示。在此例中,我們只要尋找最接近的1
個點,所以要勾選 僅使用最鄰近(k)目標點,然後輸入 1。把輸出檔命名為matrix.csv
,然後按下確定。程式執行完畢後,點選 關閉。
備註
有件事值得一提:你可以只針對單一圖層執行近鄰分析,只需要把輸入點圖層和目標點圖層都設為相同圖層即可。輸入就會是在 1 個圖層中的點的近鄰結果。
程式執行完畢後,在 距離矩陣 視窗點選 關閉。現在你可以使用 Notepad 或任何的文字編輯器瀏覽
matrix.csv
。QGIS 也可以把此檔案匯入,這樣就可以把結果加到 QGIS 中瀏覽了。選擇 。
選擇剛剛產生的新檔案
matrix.csv
,因為它只包含了文字的欄位,所以要在 幾何欄位定義 選項中勾選 無幾何欄位 (僅產生屬性表格)。按下 確定。
現在此 CSV 檔案已以表格的形式匯入 QGIS 中。在這個表格上按右鍵,選擇 開啟屬性表格,
現在就可以看到近鄰分析的結果了。InputID 欄位是從地震的圖層過來的,TargetID 則是從人口聚居地的圖層過來的,代表距離地震最近的人口聚居點。Distance 則是 2 個點的距離。
備註
這裡距離的計算是使用圖層的 CRS,也就是說因為我們的來源圖層是經緯度座標,輸入距離的單位也會是角度。如果你想要把距離用公尺呈現,在執行近鄰分析之前,要先重投影輸入的圖層。
本結果已相當接近我們想要的樣子。對某些使用者來說,得到一張表格已顯足夠;然而,我們可以把結果進一步連接到原本的地震圖層屬性表格上。以右鍵點選地震圖層,選擇 屬性。
前往 連結(Joins)的分頁,按下 + 按鈕。
我們要作的是連接我們的分析結果到此圖層上,所以必須要為兩個表格各選擇一個能夠連接起來(具有相同數值)的欄位。為 連結(Join)圖層 選擇
matrix
,再為 連結欄位 選擇InputID
,而 目標欄位 就選擇I_D
。其他選項使用預設值,最後按下 確定。
在 連結(Joins)的分頁中,就出現了一筆連接資訊。按下 確定。
現在在
signif
圖層上按右鍵選 開啟屬性表格。
現在每個地震的圖徵,都多了新屬性顯示最近的 (人口聚居地) 點圖徵,以及其距離。
接下來我們要來看看怎麼視覺畫這些結果。首先,我們要另存新圖層,把資料表連接的結果永久保存下來。以右鍵點選
signif
然後選擇 存檔為…,
點選在 另存為 欄位側邊的 瀏覽 鈕,把新檔案命名為
earthquake_with_places.shp
,確認一下 加入儲存檔案至地圖中 有開啟,最後按下 確定。
新圖層載入後,就可以把
signif
圖層取消勾選以隱藏起來。由於本資料集相當大,所以我們可以先對資料集的一部分進行視覺化試試看。QGIS 可以讓你不用另存新檔或匯入新圖層,就載入某個圖層的子集。在earthquake_with_places
上以右鍵點選進入 屬性。
在「一般」分頁中,找到 Feature subset (或 Provider feature filter)的欄位,選擇 查詢建構器。
本教學中,我們要把焦點放在墨西哥附近的地震和人口聚居地。因此,請在 查詢建構器 中輸入以下的表達式。
"COUNTRY" = 'MEXICO'
可以看到在 QGIS 視窗中,只剩下落在墨西哥境內的地震會顯示。接下來對人口聚居地的層進行相同操作,在
ne_10m_populated_places_simple
上以右鍵點選進入 屬性。
在「一般」分頁中,開啟 查詢建構器,輸入以下的表達式。
"adm0name" = 'Mexico'
資料呈現的準備已經完成。我們接下來要使用一個稱為
MMQGIS
的核心附加元件,可參考 使用附加元件 進行搜尋及安裝等相關操作。安裝後,選擇 。
Hub Point Layer 欄位選擇
ne_10m_populated_places_simple
,Hub ID Attribute 欄位選name
,Spoke Point Layer 欄位選擇earthquake_with_places
,Spoke Hub ID Attribute 欄位選擇matrix_Tar
。此程式會藉由比對屬性欄位值,把每個地震點和最鄰近的人口點用線連接起來。點選 Browse 然後把 Output Shapefile 命名為earthquake_hub_lines.shp
,最後按下 確定 開始執行。
程式可能會花幾分鐘的時間。你可以在 QGIS 螢幕左下角看到目前進度。
處理結束後,
earthquake_hub_lines
圖層會載到 QGIS 中,可以看到現在每個地震都附帶一條線,連接到最接近的人口聚居地。
If you want to give feedback or share your experience with this tutorial, please comment below. (requires GitHub account)