空間查詢¶
警告
This tutorial is now obsolete. A new and updated version is available at Performing Spatial Queries (QGIS3)
空間查詢是許多種 GIS 分析技巧的核心。在 QGIS 中,這個功能可以透過 Spatial Query 這個附加元件來達成。
內容說明¶
我們使用的 2 個資料庫分別為河流的線圖層以及城市的點圖層,要做的事情是尋找所有與河流的距離小於 10 公里的城市。
你還會學到這些¶
在 QGIS 中直接開啟 zip 檔
選擇適合的投影法,重投影向量資料
製作「環域〈buffers〉」
使用類 SQL 的表示法選擇圖徵
把 shapefile 轉換為 KML 檔
利用 Google Earth 來驗證結果
取得資料¶
我們要使用 Natural Earth 提供的 ne_10m_rivers_lake_centerlines
和 10m_populated_places_simple
這兩個資料庫。
下載 河流與湖泊中心線
下載 人口居住地
資料來源 [NATURALEARTH]
操作流程¶
載好資料以後,打開 QGIS,選擇
。
點選 瀏覽 然後移到你下載資料的地方。
按住 Shift 鍵後點選兩個 zip 檔,全部選起來後按下 開啟。
你可能需要從 zip 檔中選擇圖層載入,選
ne_10m_rivers_lake_centerlines.shp
然後按下確定。
因為我們選了兩個壓縮檔,所以相同步驟要再重複一次。選擇
10m_populated_places_simple.shp
然後按下確定。
接著 QGIS 中就可以看到這兩個圖層。
我們的下一步是為點和線圖層製作「環域」,它是一種地理預算函數,QGIS 會使用圖層的單位計算空間中的任一點到圖徵的距離,也就是「環域距離」。目前我們的地理座標參考系統 (Geographic CRS) 以角度作單位,如果我們要使用公尺或公里為單位進行分析,可能就不是那麼適當。因此,我們必須先使用一個投影座標系統 (Projected CRS)重投影圖層。在
10m_populated_places_simple layer
圖層上按右鍵,然後選擇 存檔為…。
在 儲存向量圖層為… 的視窗中,按下在 另存為 旁邊的 瀏覽 鈕,然後選擇輸出檔的位置。把輸出檔命名為
populated_places_reprojected.shp
,然後按下在 CRS 旁邊的 瀏覽 鈕 〈地球圖示〉。
Now we must choose an appropriate CRS for our purpose. For creating buffers, a Azimuthal Equidistant projection would be best suited as radial distances around the center of the projection are accurate. In our case, since the dataset is global, we will choose a World projection. In the Coordinate Reference System Selector dialog, start searching for world az.. and you will see the results show up. Select the World_Azimuthal_Equidistant and click OK.
備註
World_Azimuthal_Equidistant 投影只會覆蓋到投影中心延伸出去 90 度角的地方,由於我們的投影中心會是經度 0 度,所以只有在經度正負 90 度以內的資料點會被轉換。
回到 儲存向量圖層為… 的視窗,勾選 加入儲存檔案至地圖中,然後按下 確定。
對
ne_10m_rivers_lake_centerlines
重複以上操作,把輸出檔存為rivers_lake_reprojected.shp
。
現在我們在 圖層面板 中可以看到 4 個圖層,請把原本的圖層取消勾選,這樣就只有重投影過的圖層會顯示。不過,重投影的圖層目前因為設定的關係,仍然以 Geographic CRS 顯示,讓我們把此設定關掉吧。點選 專案屬性 鈕,或是前往 。
在 專案屬性 視窗中 CRS 的分頁下,取消 開啟即時 CRS 轉換 的勾選,然後按下 確定。
回到 QGIS 主視窗,右鍵點選任一個重投影過的圖層,選擇 縮放到圖層範圍。
現在我們就可以看到資料使用圖層的 CRS 投影了。接下來就來製作兩個資料集的環域,請前往
。
在 環域 工具視窗中,選擇
populated_places_reprojected
作為輸入圖層,環域距離輸入 10000。注意本 CRS 的單位是公尺,所以 10,000 意味著 10 公里。輸出檔取名為populated_places_buffer.shp
,然後按下 確定。
環域處理結束後,按下 是 以加入新建的圖層到 QGIS 中。(較新的 QGIS 版本則需要在上一步驟選擇。)
對
rivers_lake_reprojected
圖層重複以上步驟,輸出檔命名為rivers_lake_buffer.shp
。
rivers_lake_buffer
圖層實際上包含了河流與湖泊,我們的目標只需要用到河流圖徵,所以我們還要執行一次查詢工作,把河流選取起來。在rivers_lake_buffer
圖層上按右鍵,選擇 開啟屬性表格。
可以看到,featurecla 屬性可以利用來作為選擇河流圖徵的工具。請按下 使用表示式選取圖徵 鈕。
輸入表達式 「featurecla」 = 『River』 然後按下 選取,接著按下 關閉,回到 QGIS 主視窗。
現在我們可以進行空間查詢了。首先你必須要啟用 Spatial Query 附加元件才能使用此功能,如需更多細節請查閱 使用附加元件。啟用後,前往 。
我們的查詢目標是選擇那些自身環域有被河流的環域覆蓋到(也就是當圖徵「相交於」)的城市。請確認 選中的圖徵 旁的方框有被勾選起來,這是確保本查詢只會只用到我們之前選擇的河流圖徵。最後按下 套用。
查詢完成後,視窗會出現一個新區域,名為 選中的圖徵。按下 由所選建立圖層 鈕後,有個新圖層就會被加到 QGIS 的圖層列表中。最後按下 關閉。
現在你可以縮放到任一區域察看一下結果,可以發現新的圖層只包含了與河流環域相交的圖徵。
最後,我們應該要隨時檢查我們的結果,確保分析的過程中並沒有出錯。有個驗證的方法是把結果輸出成 KML 檔,然後在 Google 地球中讀取,這樣就可以確認你找到的城市真的距離河流不到 10 公里。請以右鍵點選圖層,選擇 存檔為…。
在 儲存向量圖層為… 的視窗中,需要選擇 WGS84 為 CRS,這是 KML 檔案格式的需求。把 KML 命名為
cities_near_river.kml
。
打開 Google 地球,然後驗證這些城市(環域可表達其約略範圍)真的非常接近河流。
If you want to give feedback or share your experience with this tutorial, please comment below. (requires GitHub account)