運用 GIS 及路網資料找出 Y 字路口

Y 字路口是指一條道路在同一平面上分岔成兩條,或兩條道路逐漸匯合為一條,整體外型近似英文字母「Y」的三岔路口。在臺灣民間,這類路口有時也被俗稱為「三角窗」(sann-kak-thang)路口,主要是因道路分岔後,往往會在交會處形成尖角或三角形的街廓與基地。

從地理與都市發展的角度來看,Y 字路口並不只是道路幾何形狀上的特殊現象,其形成往往與聚落發展、舊有道路走向、河川水系、地形限制、行政界線,甚至不同時期道路開闢與都市計畫有關。有些今日看似不規則的Y字路口,其實保留了早期聚落道路、古道或農路的走向;隨著都市擴張與新道路建設,舊有路徑與後來的街道系統交會,也可能逐漸形成特殊的Y字型街廓。因此,觀察Y字路口,有時也像是在閱讀城市與聚落長期發展留下來的「空間痕跡」。

長期觀察臺灣街道與生活文化的作家栖來光(台灣協會台灣連絡所長、台灣山口縣人會會長),就曾以 Y 字路為主題出版《在台灣尋找Y字路》,從日常街景出發,記錄散布各地的Y字型道路及其周邊建築、歷史與生活樣貌。透過這些看似不起眼的道路分岔,可以發現地圖上的一個「Y」,背後往往連結著地方發展、交通路徑與居民生活的故事。

栖來光著《在台灣尋找Y字路》封面
栖來光在臺北 Y 字路口留影(引用自:台灣歷史資源經理學會FB
「同安街8巷」與「同安街8巷2弄」形成的 Y 字路口(來源:Google地圖街景影像

筆者不禁想到,除了親自用雙腳漫遊城市、尋找散布街巷之間的 Y 字路口之外,是否也能運用 GIS 技術與道路路網資料,從空間資料中自動辨識出潛在的 Y 字路口?於是嘗試透過路網幾何關係與交會角度進行分析,整理出以下一套操作 SOP,建立運用道路中心線(line)路網資料中找出 Y 字路口候選點的初步方法。

  • 先將道路交會處切成獨立線段 edge,建立道路拓撲節點。
  • 統計每一個節點連接的 edge 數量(numbers)。
  • 只保留 numbers = 3 的三岔路口候選。
  • 計算三個道路分支彼此的夾角,取最小夾角 min_angle。
  • 篩選 20° < min_angle < 40° ( 角度上下限可以調整),作為本 SOP 定義的 Y 字路口。

1.首先取得「道路中心線(line)」資料,可以嘗試透過 OpenStreetMap 擷取。

2.分割線段(Split with lines)

3.使用欄位計算器(Field Calculator),設定每一個線段都有唯一ID

4. 使用 Extract specific vertices 功能,將 Vertex indices 設定 0, -1,產生 edge 的起點與終點節點

5.使用 Delete duplicate geometries 功能,建立唯一道路節點。

6.使用 Join attributes by location (summary) 功能,計算出每個節點連結數 numbers

7.使用 filter 功能,保留連結數 numbers =3 的節點

8.使用欄位計算器(Field Calculator),利用小程式,計算三條 edge 的最小夾角值

程式:

with_variable(
    ‘roads’,
    overlay_intersects(
        layer := ‘road_edges’,
        expression := $geometry,
        limit := 3,
        cache := true
    ),
    with_variable(
        ‘azimuths’,
        array_foreach(
            @roads,
            with_variable(
                ‘road’,
                @element,
                if(
                    distance($geometry, start_point(@road))
                    <= distance($geometry, end_point(@road)),
                    azimuth(
                        $geometry,
                        point_n(@road, 2)
                    ),
                    azimuth(
                        $geometry,
                        point_n(
                            @road,
                            num_points(@road) – 1
                        )
                    )
                )
            )
        ),
        if(
            array_length(@azimuths) = 3,
            array_min(
                array(
                    degrees(acos(cos(
                        array_get(@azimuths, 0)
                        – array_get(@azimuths, 1)
                    ))),
                    degrees(acos(cos(
                        array_get(@azimuths, 0)
                        – array_get(@azimuths, 2)
                    ))),
                    degrees(acos(cos(
                        array_get(@azimuths, 1)
                        – array_get(@azimuths, 2)
                    )))
                )
            ),
            NULL
        )
    )
)

9.使用 filter 功能, 篩選出 20° < min_angle < 40° 的節點,若Y 字路口定義不同,可直接修改上下限數值。

10.套疊臺灣通用電子地圖(有建物輪廓),放大圖面就可以找到符合 Y 字路口定義,且路口有建築物的位置,後續則可以運用 Google地圖街景影像進一步確認。

重慶南路三段83巷與汀州路二段交叉口有一個符合條件的潛在 Y 字路口
重慶南路三段83巷與汀州路二段交叉口(來源:Google地圖街景影像
中華路二段443巷有一個符合條件的潛在 Y 字路口
中華路二段443巷的 Y 字路口(來源:Google地圖街景影像

從前面的操作可以看到,要從道路中心線資料中找出潛在的 Y 字路口,看起來需要經過不少 GIS 處理步驟;不過這些流程其實都可以進一步整合到 QGIS 的「模型設計器(Model Designer)」中,將資料分割、節點建立、道路連結數統計、夾角計算與條件篩選等程序串接成一套自動化模型。如此一來,只要更換不同城市的道路中心線資料,就能快速套用相同方法,將搜尋範圍從臺北擴展到臺灣各個城市與鄉鎮。或許透過 GIS 的「地毯式搜索」,還真的能從地圖中挖掘出一些過去不容易注意到、具有特殊街廓或建築景觀的 Y 字路口,成為下一個值得實地走訪、攝影,甚至「打卡」的城市角落。

不過,這套方法畢竟是以道路幾何與拓撲關係進行判斷,因此仍有幾項限制需要特別注意。首先,道路中心線資料的細緻程度、幾何品質與拓撲正確性非常關鍵;若道路節點沒有正確銜接、線段過度簡化,或同一道路的建模方式不同,都可能影響交會節點與夾角的計算結果。其次,GIS 中看到的道路交叉,目前主要是在二維的 XY 平面上判斷,但「平面上相交」並不代表現地真的存在路口。例如高架橋、地下道、交流道匝道等不同高程的道路,即使在地圖上彼此交叉,也可能完全沒有實際連通關係,因此容易被誤判為道路節點。

這套 GIS 方法比較適合作為「Y 字路口候選點」的自動篩選工具,而不是直接判定最終結果。經過程式大量篩選之後,仍需要搭配電子地圖、航空影像或 Google 街景等資料進一步確認。GIS 幫我們縮小尋找範圍,而真正有趣的部分,或許還是留給最後一步——走進城市,親自去看看地圖上那個小小的「Y」,究竟藏著什麼樣的街道風景與地方故事。

進階閱讀: