用 QGIS 計算"點對線"最近距離的幾種方式

qgis 點對線 最短距離


上一篇教學中,流浪貓介紹各位使用 Network Analysis 與 Least Cost Path來分析向量與點陣圖層的最短路徑,但這個方法只能計算『點對點』的距離,如果今天是要分析『公車路線與便利商店的距離』,該如何處理這種點對鄰近線的課題呢?

 

雖然我們可以將路線轉換成點 (Points along geometry) 來分析公車路線與商店最短距離,不過這個方法會產生相當大量的點圖徵,對電腦而言是不小的負擔。因此以下將介紹各位更有效率的方案來解決這個問題。

 

 

用 overlay_nearest 函數計算

這個是 QGIS 3.16 後新增的好東西,可以直接在符號學 (Symbology) 內產生與目標線圖層鄰近的線段。但這個方法只限於展示線段,無法產生實體線條,也不能用來運算。翠近維尼

 

進入點圖層的 Properties 後,開啟符號學設定:

 

Symbology > Add > Symbol layer type: Geometry Generator

 

make_line (
    $geometry,
    closest_point (
        overlay_nearest ('線圖層名稱', $geometry)[0],
        $geometry
    )
)

 

 

Nearest-distance-point-line-1

 

 

用 NNJoin 計算點對線的最近距離

相當簡單易用的工具,運算完成後會重製點圖層並紀錄與線的距離。圖層的 CRS 要選擇麥卡托平面投影 (EPSG:3826 或 3857),如果用球體座標系 EPSG: 4326 的話會無法運作。

 

Input vector layer: 選擇點圖層

Join vector layer: 選擇線圖層

 

 

用 Closest Points 於線段上產出鄰近點

同樣也是簡單易用的工具,會在線段上產生距離最近的點圖徵,並紀錄距離。

 

Layer to calculate closest points from: 點圖層

Layer to calculate closest points to: 線圖層

 

 

以 Distance to nearest hub 連接點圖徵

用 Closest Points 於線段上產生點圖徵之後,我們就可以用 Distance to nearest hub (line to hub) 將最鄰近的兩點連成線了。

 

Source point layer: 原始點圖層

Destination hubs layer: 線段上產生的點圖層

 

 

Nearest-distance-point-line-2

 

 

 

延伸閱讀

更多 QGIS

QGIS 3.22 Geometry Generator

Nearest distance between point and line layers in QGIS

Connecting points by lines using QGIS?

 

 

 

 

留言

這個網誌中的熱門文章

寶鐘瑪琳中之人前世照片、年齡分析