解碼水利署官方資料:淡水河水系拓樸的 Python 萃取與 Mermaid 樹狀視覺化實踐#

在河流地學與 GIS 探索中,理解一條大河的「水系拓樸(River Network Topology)」是核心基石。拓樸關係告訴我們哪條溪是主流,哪條是支流,水流又是如何從小溪匯入大河,最終流向大海的。這不僅是空間幾何,更是史前先民定居、現代水利發電與防洪工程設計的底層邏輯。

為了取得最權威的拓樸定義,我找到了經濟部水利署(WRA)公佈的 《台灣地區河川拓樸(112 年)》官方 PDF。然而,這份權威的資料僅以 PDF 表格形式存在,且在機器讀取時存在許多格式斷線與字元夾雜的坑。

這篇筆記記錄了我如何透過 Python 撰寫對合腳本,從二進位 PDF 中萃取出乾淨的樹狀結構,並以 Mermaid 語法自動繪製出淡水河完整流向拓樸的實踐過程。


🛠️ 技術挑戰與解題思路#

PDF 格式本質上是為了「視覺排版」而非「數據讀取」設計的,因此在進行數據萃取時,我們遇到了三個主要的實作挑戰:

挑戰 1:跨行文字斷線(Line-wrapping)#

在 PDF 轉換為純文字時,部分較長的河川名稱(例如:鶯歌溪(兔子坑溪排水)暖暖溪(含東勢坑溪))會因為表格寬度限制而被強行折行:

鶯歌溪(兔子坑溪排
水) 114012 0@114000@114010@114012 Q16929506

這導致正則表達式在匹配時,會把第一行漏掉,而第二行則只匹配到 水) 作為河川名稱。

  • 解法:在 Python 迴圈中建立一個 prefix 快取區。如果某一行沒有匹配到標準的代碼與拓樸格式,且結尾不是數字,就將其暫存為 prefix,並在下一行成功匹配時將其拼接回去。

挑戰 2:Unicode 正則匹配 bug(中文與拓樸代碼混淆)#

水利署的拓樸路徑是用 @ 符號串接河川代碼(例如:0@114000@114010@114011),而部分欄位結尾會黏連著中文備註,如 0@114000@114010@114011@11401C二鬮溪。 在 Python 3 中,正則表達式 \w 預設會匹配 Unicode 字符(包括中文字)。因此 [\d@\w]+ 會直接將 二鬮溪 誤判為拓樸路徑的一部分。

  • 解法:將拓樸路徑的正則規則從 [\d@\w]+ 剛性限制為英數與 @ 符號 [0-9a-zA-Z@]+。這能精確截斷拓樸邊界,並將剩餘的 二鬮溪 作為別名(Alias)自動括號歸併入河川名稱中,形成 麻園溪(二鬮溪)

挑戰 3:過濾表格頁首雜訊#

PDF 跨頁時會重複出現表頭資訊,如 河川名稱 河川 代碼 河川拓樸,這些非數據行如果不進行清洗,會被誤判為斷線名稱。

  • 解法:在快取過濾中增加黑名單判斷,凡是包含「代碼」、「拓樸」、「維基」等字眼的行,一律跳過,不寫入 prefix 快取。

💻 核心 Python 萃取腳本#

以下是我們在本地 scratch 中運行並驗證通過的數據處理代碼片段:

import pypdf
import re
import json

# 1. 使用 pypdf 提取關鍵字頁面
reader = pypdf.PdfReader("wra_river_topology_112.pdf")
# 匹配規則:名稱 (Group 1)、代碼 (Group 2)、拓樸 (Group 3)、維基數據 (Group 4)
pattern = re.compile(r"^(.+?)\s+([A-Za-z0-9]+)\s+([0-9a-zA-Z@]+)(?:\s+(Q\d+))?")

river_list = []
prefix = ""

for page in reader.pages:
    lines = page.extract_text().split("\n")
    for line in lines:
        line = line.strip()
        if not line or "河川" in line or "代碼" in line or line.isdigit():
            continue
            
        match = pattern.match(line)
        if match:
            name = (prefix + match.group(1).strip()).strip()
            remaining = line[match.end():].strip()
            if remaining:
                name = f"{name}({remaining})"  # 合併如二鬮溪等別名
                
            prefix = ""
            code = match.group(2).strip()
            topology = match.group(3).strip()
            
            # 僅提取淡水河水系 (代碼 114 開頭)
            if code.startswith("114"):
                river_list.append({
                    "name": name,
                    "code": code,
                    "topology": topology
                })
        else:
            if not re.search(r'\d+$', line):
                prefix = line

🌊 淡水河水系拓樸分析報告 (官方數據還原)#

經過 Python 腳本的精確解析,我們成功重建了淡水河(代碼 114000)的完整拓樸樹。

1. 水系樹狀階層結構#

  • 淡水河 (代碼: 114000, 拓樸: 0@114000)
    • 大漢溪 (代碼: 114010, 拓樸: 0@114000@114010)
      • 三峽溪 (代碼: 114011, 拓樸: 0@114000@114010@114011)
        • 大豹溪 (代碼: 11401B, 拓樸: 0@114000@114010@114011@11401B)
        • 麻園溪(二鬮溪) (代碼: 11401C, 拓樸: 0@114000@114010@114011@11401C)
        • 中埔溪 (代碼: 11401D, 拓樸: 0@114000@114010@114011@11401D)
        • 竹崙溪 (代碼: 11401E, 拓樸: 0@114000@114010@114011@11401E)
        • 竹坑溪 (代碼: 11401F, 拓樸: 0@114000@114010@114011@11401F)
        • 橫溪 (代碼: 11401G, 拓樸: 0@114000@114010@114011@11401G)
      • 鶯歌溪(兔子坑溪排水) (代碼: 114012, 拓樸: 0@114000@114010@114012)
      • 塔寮坑溪排水 (代碼: 114013, 拓樸: 0@114000@114010@114013)
      • 塔克金溪 (代碼: 114014, 拓樸: 0@114000@114010@114014)
      • 三光溪 (代碼: 114015, 拓樸: 0@114000@114010@114015)
      • 泰崗溪 (代碼: 114016, 拓樸: 0@114000@114010@114016)
      • 白石溪(薩克雅尖溪) (代碼: 114017, 拓樸: 0@114000@114010@114017)
      • 玉峰溪(馬里闊丸溪) (代碼: 114018, 拓樸: 0@114000@114010@114018)
      • 永福溪幹線 (代碼: 114019, 拓樸: 0@114000@114010@114019)
      • 街口溪幹線 (代碼: 11401A, 拓樸: 0@114000@114010@11401A)
      • 觀音溪幹線 (代碼: 11401H, 拓樸: 0@114000@114010@11401H)
      • 三坑溪幹線 (代碼: 11401I, 拓樸: 0@114000@114010@11401I)
      • 打鐵溪幹線 (代碼: 11401J, 拓樸: 0@114000@114010@11401J)
      • 二坪溪幹線 (代碼: 11401K, 拓樸: 0@114000@114010@11401K)
    • 新店溪 (代碼: 114020, 拓樸: 0@114000@114020)
      • 南勢溪 (代碼: 114021, 拓樸: 0@114000@114020@114021)
        • 桶後溪 (代碼: 11402A, 拓樸: 0@114000@114020@114021@11402A)
        • 軋孔溪 (代碼: 11402P, 拓樸: 0@114000@114020@114021@11402P)
        • 大羅蘭溪 (代碼: 11402Q, 拓樸: 0@114000@114020@114021@11402Q)
      • 北勢溪 (代碼: 114022, 拓樸: 0@114000@114020@114022)
        • 後寮溪 (代碼: 11402B, 拓樸: 0@114000@114020@114022@11402B)
        • 溪尾寮溪 (代碼: 11402C, 拓樸: 0@114000@114020@114022@11402C)
        • 坪溪 (代碼: 11402D, 拓樸: 0@114000@114020@114022@11402D)
        • 灣潭溪 (代碼: 11402E, 拓樸: 0@114000@114020@114022@11402E)
        • 金瓜寮溪 (代碼: 11402F, 拓樸: 0@114000@114020@114022@11402F)
        • 石硿子溪 (代碼: 11402G, 拓樸: 0@114000@114020@114022@11402G)
        • 後坑溪 (代碼: 11402H, 拓樸: 0@114000@114020@114022@11402H)
        • 𩻸魚堀溪 (代碼: 11402O, 拓樸: 0@114000@114020@114022@11402O)
      • 景美溪 (代碼: 114023, 拓樸: 0@114000@114020@114023)
        • 烏塗溪 (代碼: 11402I, 拓樸: 0@114000@114020@114023@11402I)
        • 指南溪 (代碼: 11402J, 拓樸: 0@114000@114020@114023@11402J)
        • 老泉溪 (代碼: 11402K, 拓樸: 0@114000@114020@114023@11402K)
        • 無名溪 (代碼: 11402L, 拓樸: 0@114000@114020@114023@11402L)
        • 中間溪 (代碼: 11402M, 拓樸: 0@114000@114020@114023@11402M)
        • 永定溪 (代碼: 11402N, 拓樸: 0@114000@114020@114023@11402N)
      • 青潭溪 (代碼: 114024, 拓樸: 0@114000@114020@114024)
    • 基隆河 (代碼: 114030, 拓樸: 0@114000@114030)
      • 暖暖溪(含東勢坑溪) (代碼: 114031, 拓樸: 0@114000@114030@114031)
      • 大武崙溪 (代碼: 114032, 拓樸: 0@114000@114030@114032)
      • 拔西猴溪 (代碼: 114033, 拓樸: 0@114000@114030@114033)
      • 瑪陵坑溪 (代碼: 114034, 拓樸: 0@114000@114030@114034)
      • 友蚋溪 (代碼: 114035, 拓樸: 0@114000@114030@114035)
      • 保長坑溪 (代碼: 114036, 拓樸: 0@114000@114030@114036)
      • 茄苳溪 (代碼: 114037, 拓樸: 0@114000@114030@114037)
      • 禮門溪 (代碼: 114038, 拓樸: 0@114000@114030@114038)
      • 智慧溪 (代碼: 114039, 拓樸: 0@114000@114030@114039)
      • 北港溪 (代碼: 11403A, 拓樸: 0@114000@114030@11403A)
      • 康誥坑溪 (代碼: 11403B, 拓樸: 0@114000@114030@11403B)
      • 下寮溪 (代碼: 11403C, 拓樸: 0@114000@114030@11403C)
      • 大坑溪排水 (代碼: 11403D, 拓樸: 0@114000@114030@11403D)
      • 四分溪 (代碼: 11403E, 拓樸: 0@114000@114030@11403E)
      • 草濫溪 (代碼: 11403F, 拓樸: 0@114000@114030@11403F)
      • 內溝溪排水 (代碼: 11403G, 拓樸: 0@114000@114030@11403G)
        • 安泰溪 (代碼: 11403R, 拓樸: 0@114000@114030@11403G@11403R)
      • 雙溪 (代碼: 11403H, 拓樸: 0@114000@114030@11403H)
        • 內雙溪 (代碼: 11403S, 拓樸: 0@114000@114030@11403H@11403S)
        • 外雙溪 (代碼: 11403T, 拓樸: 0@114000@114030@11403H@11403T)
        • 猴洞坑溪 (代碼: 11403U, 拓樸: 0@114000@114030@11403H@11403U)
      • 磺溪 (代碼: 11403I, 拓樸: 0@114000@114030@11403I)
      • 磺港溪 (代碼: 11403J, 拓樸: 0@114000@114030@11403J)
      • 貴子坑溪 (代碼: 11403K, 拓樸: 0@114000@114030@11403K)
      • 石厝坑溪 (代碼: 11403L, 拓樸: 0@114000@114030@11403L)
      • 拔下二溪 (代碼: 11403M, 拓樸: 0@114000@114030@11403M)
      • 關渡溪 (代碼: 11403N, 拓樸: 0@114000@114030@11403N)
      • 深澳坑溪排水 (代碼: 11403O, 拓樸: 0@114000@114030@11403O)
      • 大內坑溪排水 (代碼: 11403P, 拓樸: 0@114000@114030@11403P)

2. Mermaid 水文流向圖 (由上游流向下游)#

我們利用 graph BT(Bottom-Up,底端至頂端)繪製,能完美還原支流匯入主流、最終流向淡水河主流口的水文向心性:

graph BT
    R_114010["大漢溪 (114010)"] ---> R_114000["淡水河 (114000)"]
    R_114011["三峽溪 (114011)"] ---> R_114010["大漢溪 (114010)"]
    R_11401B["大豹溪 (11401B)"] ---> R_114011["三峽溪 (114011)"]
    R_11401C["麻園溪(二鬮溪) (11401C)"] ---> R_114011["三峽溪 (114011)"]
    R_11401D["中埔溪 (11401D)"] ---> R_114011["三峽溪 (114011)"]
    R_11401E["竹崙溪 (11401E)"] ---> R_114011["三峽溪 (114011)"]
    R_11401F["竹坑溪 (11401F)"] ---> R_114011["三峽溪 (114011)"]
    R_11401G["橫溪 (11401G)"] ---> R_114011["三峽溪 (114011)"]
    R_114012["鶯歌溪(兔子坑溪排水) (114012)"] ---> R_114010["大漢溪 (114010)"]
    R_114013["塔寮坑溪排水 (114013)"] ---> R_114010["大漢溪 (114010)"]
    R_114014["塔克金溪 (114014)"] ---> R_114010["大漢溪 (114010)"]
    R_114015["三光溪 (114015)"] ---> R_114010["大漢溪 (114010)"]
    R_114016["泰崗溪 (114016)"] ---> R_114010["大漢溪 (114010)"]
    R_114017["白石溪(薩克雅尖溪) (114017)"] ---> R_114010["大漢溪 (114010)"]
    R_114018["玉峰溪(馬里闊丸溪) (114018)"] ---> R_114010["大漢溪 (114010)"]
    R_114019["永福溪幹線 (114019)"] ---> R_114010["大漢溪 (114010)"]
    R_11401A["街口溪幹線 (11401A)"] ---> R_114010["大漢溪 (114010)"]
    R_11401H["觀音溪幹線 (11401H)"] ---> R_114010["大漢溪 (114010)"]
    R_11401I["三坑溪幹線 (11401I)"] ---> R_114010["大漢溪 (114010)"]
    R_11401J["打鐵溪幹線 (11401J)"] ---> R_114010["大漢溪 (114010)"]
    R_11401K["二坪溪幹線 (11401K)"] ---> R_114010["大漢溪 (114010)"]
    R_114020["新店溪 (114020)"] ---> R_114000["淡水河 (114000)"]
    R_114021["南勢溪 (114021)"] ---> R_114020["新店溪 (114020)"]
    R_11402A["桶後溪 (11402A)"] ---> R_114021["南勢溪 (114021)"]
    R_11402P["軋孔溪 (11402P)"] ---> R_114021["南勢溪 (114021)"]
    R_11402Q["大羅蘭溪 (11402Q)"] ---> R_114021["南勢溪 (114021)"]
    R_114022["北勢溪 (114022)"] ---> R_114020["新店溪 (114020)"]
    R_11402B["後寮溪 (11402B)"] ---> R_114022["北勢溪 (114022)"]
    R_11402C["溪尾寮溪 (11402C)"] ---> R_114022["北勢溪 (114022)"]
    R_11402D["坪溪 (11402D)"] ---> R_114022["北勢溪 (114022)"]
    R_11402E["灣潭溪 (11402E)"] ---> R_114022["北勢溪 (114022)"]
    R_11402F["金瓜寮溪 (11402F)"] ---> R_114022["北勢溪 (114022)"]
    R_11402G["石硿子溪 (11402G)"] ---> R_114022["北勢溪 (114022)"]
    R_11402H["後坑溪 (11402H)"] ---> R_114022["北勢溪 (114022)"]
    R_11402O["𩻸魚堀溪 (11402O)"] ---> R_114022["北勢溪 (114022)"]
    R_114023["景美溪 (114023)"] ---> R_114020["新店溪 (114020)"]
    R_11402I["烏塗溪 (11402I)"] ---> R_114023["景美溪 (114023)"]
    R_11402J["指南溪 (11402J)"] ---> R_114023["景美溪 (114023)"]
    R_11402K["老泉溪 (11402K)"] ---> R_114023["景美溪 (114023)"]
    R_11402L["無名溪 (11402L)"] ---> R_114023["景美溪 (114023)"]
    R_11402M["中間溪 (11402M)"] ---> R_114023["景美溪 (114023)"]
    R_11402N["永定溪 (11402N)"] ---> R_114023["景美溪 (114023)"]
    R_114024["青潭溪 (114024)"] ---> R_114020["新店溪 (114020)"]
    R_114030["基隆河 (114030)"] ---> R_114000["淡水河 (114000)"]
    R_114031["暖暖溪(含東勢坑溪) (114031)"] ---> R_114030["基隆河 (114030)"]
    R_114032["大武崙溪 (114032)"] ---> R_114030["基隆河 (114030)"]
    R_114033["拔西猴溪 (114033)"] ---> R_114030["基隆河 (114030)"]
    R_114034["瑪陵坑溪 (114034)"] ---> R_114030["基隆河 (114030)"]
    R_114035["友蚋溪 (114035)"] ---> R_114030["基隆河 (114030)"]
    R_114036["保長坑溪 (114036)"] ---> R_114030["基隆河 (114030)"]
    R_114037["茄苳溪 (114037)"] ---> R_114030["基隆河 (114030)"]
    R_114038["禮門溪 (114038)"] ---> R_114030["基隆河 (114030)"]
    R_114039["智慧溪 (114039)"] ---> R_114030["基隆河 (114030)"]
    R_11403A["北港溪 (11403A)"] ---> R_114030["基隆河 (114030)"]
    R_11403B["康誥坑溪 (11403B)"] ---> R_114030["基隆河 (114030)"]
    R_11403C["下寮溪 (11403C)"] ---> R_114030["基隆河 (114030)"]
    R_11403D["大坑溪排水 (11403D)"] ---> R_114030["基隆河 (114030)"]
    R_11403E["四分溪 (11403E)"] ---> R_114030["基隆河 (114030)"]
    R_11403F["草濫溪 (11403F)"] ---> R_114030["基隆河 (114030)"]
    R_11403G["內溝溪排水 (11403G)"] ---> R_114030["基隆河 (114030)"]
    R_11403R["安泰溪 (11403R)"] ---> R_11403G["內溝溪排水 (11403G)"]
    R_11403H["雙溪 (11403H)"] ---> R_114030["基隆河 (114030)"]
    R_11403S["內雙溪 (11403S)"] ---> R_11403H["雙溪 (11403H)"]
    R_11403T["外雙溪 (11403T)"] ---> R_11403H["雙溪 (11403H)"]
    R_11403U["猴洞坑溪 (11403U)"] ---> R_11403H["雙溪 (11403H)"]
    R_11403I["磺溪 (11403I)"] ---> R_114030["基隆河 (114030)"]
    R_11403J["磺港溪 (11403J)"] ---> R_114030["基隆河 (114030)"]
    R_11403K["貴子坑溪 (11403K)"] ---> R_114030["基隆河 (114030)"]
    R_11403L["石厝坑溪 (11403L)"] ---> R_114030["基隆河 (114030)"]
    R_11403M["拔下二溪 (11403M)"] ---> R_114030["基隆河 (114030)"]
    R_11403N["關渡溪 (11403N)"] ---> R_114030["基隆河 (114030)"]
    R_11403O["深澳坑溪排水 (11403O)"] ---> R_114030["基隆河 (114030)"]
    R_11403P["大內坑溪排水 (11403P)"] ---> R_114030["基隆河 (114030)"]

🔗 官民大整合:淡水河流域完整拓樸整合版 (WRA-Civ)#

為了解決官方拓樸資料庫在細微溪谷與山區野溪上的缺失,我們將水利署官方的 74 條權威拓樸河段,與社群第一階段及第二階段深度下鑽擴充的 34 條民間 WRA-Civ 拓樸子流進行了全面大對合。

這份整合圖(共計 108 條水系節點)以 graph TD 樹狀分支視角,完整還原了淡水河從主流、主要支流(大漢溪、新店溪、基隆河)、二級官方支流,一路下鑽至三級、四級民間微細末梢野溪(如處女瀑布源流 11401B-C01-C01、哈盆古道露門溪 114021-C06)的完整階層脈絡:

graph TD
    classDef official fill:#e1f5fe,stroke:#0288d1,stroke-width:1px;
    classDef civilian fill:#fff3e0,stroke:#f57c00,stroke-width:1px;

    R_114000["淡水河 (114000)"] --> R_114010["大漢溪 (114010)"]
    R_114010["大漢溪 (114010)"] --> R_114011["三峽溪 (114011)"]
    R_114011["三峽溪 (114011)"] --> R_11401B["大豹溪 (11401B)"]
    R_114011["三峽溪 (114011)"] --> R_11401C["麻園溪(二鬮溪) (11401C)"]
    R_114011["三峽溪 (114011)"] --> R_11401D["中埔溪 (11401D)"]
    R_114011["三峽溪 (114011)"] --> R_11401E["竹崙溪 (11401E)"]
    R_114011["三峽溪 (114011)"] --> R_11401F["竹坑溪 (11401F)"]
    R_114011["三峽溪 (114011)"] --> R_11401G["橫溪 (11401G)"]
    R_114010["大漢溪 (114010)"] --> R_114012["鶯歌溪(兔子坑溪排水) (114012)"]
    R_114010["大漢溪 (114010)"] --> R_114013["塔寮坑溪排水 (114013)"]
    R_114010["大漢溪 (114010)"] --> R_114014["塔克金溪 (114014)"]
    R_114010["大漢溪 (114010)"] --> R_114015["三光溪 (114015)"]
    R_114010["大漢溪 (114010)"] --> R_114016["泰崗溪 (114016)"]
    R_114010["大漢溪 (114010)"] --> R_114017["白石溪(薩克雅尖溪) (114017)"]
    R_114010["大漢溪 (114010)"] --> R_114018["玉峰溪(馬里闊丸溪) (114018)"]
    R_114010["大漢溪 (114010)"] --> R_114019["永福溪幹線 (114019)"]
    R_114010["大漢溪 (114010)"] --> R_11401A["街口溪幹線 (11401A)"]
    R_114010["大漢溪 (114010)"] --> R_11401H["觀音溪幹線 (11401H)"]
    R_114010["大漢溪 (114010)"] --> R_11401I["三坑溪幹線 (11401I)"]
    R_114010["大漢溪 (114010)"] --> R_11401J["打鐵溪幹線 (11401J)"]
    R_114010["大漢溪 (114010)"] --> R_11401K["二坪溪幹線 (11401K)"]
    R_114000["淡水河 (114000)"] --> R_114020["新店溪 (114020)"]
    R_114020["新店溪 (114020)"] --> R_114021["南勢溪 (114021)"]
    R_114021["南勢溪 (114021)"] --> R_11402A["桶後溪 (11402A)"]
    R_114021["南勢溪 (114021)"] --> R_11402P["軋孔溪 (11402P)"]
    R_114021["南勢溪 (114021)"] --> R_11402Q["大羅蘭溪 (11402Q)"]
    R_114020["新店溪 (114020)"] --> R_114022["北勢溪 (114022)"]
    R_114022["北勢溪 (114022)"] --> R_11402B["後寮溪 (11402B)"]
    R_114022["北勢溪 (114022)"] --> R_11402C["溪尾寮溪 (11402C)"]
    R_114022["北勢溪 (114022)"] --> R_11402D["坪溪 (11402D)"]
    R_114022["北勢溪 (114022)"] --> R_11402E["灣潭溪 (11402E)"]
    R_114022["北勢溪 (114022)"] --> R_11402F["金瓜寮溪 (11402F)"]
    R_114022["北勢溪 (114022)"] --> R_11402G["石硿子溪 (11402G)"]
    R_114022["北勢溪 (114022)"] --> R_11402H["後坑溪 (11402H)"]
    R_114022["北勢溪 (114022)"] --> R_11402O["𩻸魚堀溪 (11402O)"]
    R_114020["新店溪 (114020)"] --> R_114023["景美溪 (114023)"]
    R_114023["景美溪 (114023)"] --> R_11402I["烏塗溪 (11402I)"]
    R_114023["景美溪 (114023)"] --> R_11402J["指南溪 (11402J)"]
    R_114023["景美溪 (114023)"] --> R_11402K["老泉溪 (11402K)"]
    R_114023["景美溪 (114023)"] --> R_11402L["無名溪 (11402L)"]
    R_114023["景美溪 (114023)"] --> R_11402M["中間溪 (11402M)"]
    R_114023["景美溪 (114023)"] --> R_11402N["永定溪 (11402N)"]
    R_114020["新店溪 (114020)"] --> R_114024["青潭溪 (114024)"]
    R_114000["淡水河 (114000)"] --> R_114030["基隆河 (114030)"]
    R_114030["基隆河 (114030)"] --> R_114031["暖暖溪(含東勢坑溪) (114031)"]
    R_114030["基隆河 (114030)"] --> R_114032["大武崙溪 (114032)"]
    R_114030["基隆河 (114030)"] --> R_114033["拔西猴溪 (114033)"]
    R_114030["基隆河 (114030)"] --> R_114034["瑪陵坑溪 (114034)"]
    R_114030["基隆河 (114030)"] --> R_114035["友蚋溪 (114035)"]
    R_114030["基隆河 (114030)"] --> R_114036["保長坑溪 (114036)"]
    R_114030["基隆河 (114030)"] --> R_114037["茄苳溪 (114037)"]
    R_114030["基隆河 (114030)"] --> R_114038["禮門溪 (114038)"]
    R_114030["基隆河 (114030)"] --> R_114039["智慧溪 (114039)"]
    R_114030["基隆河 (114030)"] --> R_11403A["北港溪 (11403A)"]
    R_114030["基隆河 (114030)"] --> R_11403B["康誥坑溪 (11403B)"]
    R_114030["基隆河 (114030)"] --> R_11403C["下寮溪 (11403C)"]
    R_114030["基隆河 (114030)"] --> R_11403D["大坑溪排水 (11403D)"]
    R_114030["基隆河 (114030)"] --> R_11403E["四分溪 (11403E)"]
    R_114030["基隆河 (114030)"] --> R_11403F["草濫溪 (11403F)"]
    R_114030["基隆河 (114030)"] --> R_11403G["內溝溪排水 (11403G)"]
    R_11403G["內溝溪排水 (11403G)"] --> R_11403R["安泰溪 (11403R)"]
    R_114030["基隆河 (114030)"] --> R_11403H["雙溪 (11403H)"]
    R_11403H["雙溪 (11403H)"] --> R_11403S["內雙溪 (11403S)"]
    R_11403H["雙溪 (11403H)"] --> R_11403T["外雙溪 (11403T)"]
    R_11403H["雙溪 (11403H)"] --> R_11403U["猴洞坑溪 (11403U)"]
    R_114030["基隆河 (114030)"] --> R_11403I["磺溪 (11403I)"]
    R_114030["基隆河 (114030)"] --> R_11403J["磺港溪 (11403J)"]
    R_114030["基隆河 (114030)"] --> R_11403K["貴子坑溪 (11403K)"]
    R_114030["基隆河 (114030)"] --> R_11403L["石厝坑溪 (11403L)"]
    R_114030["基隆河 (114030)"] --> R_11403M["拔下二溪 (11403M)"]
    R_114030["基隆河 (114030)"] --> R_11403N["關渡溪 (11403N)"]
    R_114030["基隆河 (114030)"] --> R_11403O["深澳坑溪排水 (11403O)"]
    R_114030["基隆河 (114030)"] --> R_11403P["大內坑溪排水 (11403P)"]
    R_114021["南勢溪 (114021)"] -.-> R_114021_C01["加九寮溪 (114021-C01)"]
    R_114021["南勢溪 (114021)"] -.-> R_114021_C02["給里瀨溪 (114021-C02)"]
    R_114021["南勢溪 (114021)"] -.-> R_114021_C03["內洞溪 (114021-C03)"]
    R_114021["南勢溪 (114021)"] -.-> R_114021_C04["卡拉莫基溪 (114021-C04)"]
    R_114020["新店溪 (114020)"] -.-> R_114020_C01["平廣溪 (114020-C01)"]
    R_114020["新店溪 (114020)"] -.-> R_114020_C02["磺窟溪 (114020-C02)"]
    R_114020["新店溪 (114020)"] -.-> R_114020_C03["粗坑溪 (114020-C03)"]
    R_114023["景美溪 (114023)"] -.-> R_114023_C01["石碇溪 (114023-C01)"]
    R_114023["景美溪 (114023)"] -.-> R_114023_C02["大溪墘溪 (114023-C02)"]
    R_114010["大漢溪 (114010)"] -.-> R_114010_C01["草嶺溪 (114010-C01)"]
    R_114010["大漢溪 (114010)"] -.-> R_114010_C02["三民溪 (114010-C02)"]
    R_114010["大漢溪 (114010)"] -.-> R_114010_C03["奎輝溪 (114010-C03)"]
    R_114010["大漢溪 (114010)"] -.-> R_114010_C04["霞雲溪 (114010-C04)"]
    R_114010["大漢溪 (114010)"] -.-> R_114010_C05["宇內溪 (114010-C05)"]
    R_114010["大漢溪 (114010)"] -.-> R_114010_C06["寶里苦溪 (114010-C06)"]
    R_114010["大漢溪 (114010)"] -.-> R_114010_C07["卡拉溪 (114010-C07)"]
    R_114011["三峽溪 (114011)"] -.-> R_114011_C01["五寮溪 (114011-C01)"]
    R_11401B["大豹溪 (11401B)"] -.-> R_11401B_C01["蚋仔溪 (11401B-C01)"]
    R_11401B["大豹溪 (11401B)"] -.-> R_11401B_C02["熊空溪 (11401B-C02)"]
    R_114030["基隆河 (114030)"] -.-> R_114030_C01["竿蓁林溪 (114030-C01)"]
    R_114030["基隆河 (114030)"] -.-> R_114030_C02["火燒寮溪 (114030-C02)"]
    R_114030["基隆河 (114030)"] -.-> R_114030_C03["灰窯溪 (114030-C03)"]
    R_114030["基隆河 (114030)"] -.-> R_114030_C04["尪子上天溪 (114030-C04)"]
    R_114030["基隆河 (114030)"] -.-> R_114030_C05["魚桀魚坑溪 (114030-C05)"]
    R_114036["保長坑溪 (114036)"] -.-> R_114036_C01["姜子寮溪 (114036-C01)"]
    R_11402A["桶後溪 (11402A)"] -.-> R_11402A_C01["阿玉溪 (11402A-C01)"]
    R_114021["南勢溪 (114021)"] -.-> R_114021_C05["波露溪 (114021-C05)"]
    R_114021["南勢溪 (114021)"] -.-> R_114021_C06["露門溪 (114021-C06)"]
    R_11402F["金瓜寮溪 (11402F)"] -.-> R_11402F_C01["九芎根溪 (11402F-C01)"]
    R_11402E["灣潭溪 (11402E)"] -.-> R_11402E_C01["子口溪 (11402E-C01)"]
    R_11402E["灣潭溪 (11402E)"] -.-> R_11402E_C02["南勢子溪 (11402E-C02)"]
    R_11401B["大豹溪 (11401B)"] -.-> R_11401B_C03["水車寮溪 (11401B-C03)"]
    R_11401B_C01["蚋仔溪 (11401B-C01)"] -.-> R_11401B_C01_C01["蚋仔溪次級支流 (11401B-C01-C01)"]
    R_114018["玉峰溪(馬里闊丸溪) (114018)"] -.-> R_114018_C01["薩克亞金溪 (114018-C01)"]

    class R_114000,R_114010,R_114011,R_11401B,R_11401C,R_11401D,R_11401E,R_11401F official;
    class R_11401G,R_114012,R_114013,R_114014,R_114015,R_114016,R_114017,R_114018 official;
    class R_114019,R_11401A,R_11401H,R_11401I,R_11401J,R_11401K,R_114020,R_114021 official;
    class R_11402A,R_11402P,R_11402Q,R_114022,R_11402B,R_11402C,R_11402D,R_11402E official;
    class R_11402F,R_11402G,R_11402H,R_11402O,R_114023,R_11402I,R_11402J,R_11402K official;
    class R_11402L,R_11402M,R_11402N,R_114024,R_114030,R_114031,R_114032,R_114033 official;
    class R_114034,R_114035,R_114036,R_114037,R_114038,R_114039,R_11403A,R_11403B official;
    class R_11403C,R_11403D,R_11403E,R_11403F,R_11403G,R_11403R,R_11403H,R_11403S official;
    class R_11403T,R_11403U,R_11403I,R_11403J,R_11403K,R_11403L,R_11403M,R_11403N official;
    class R_11403O,R_11403P official;
    class R_114021_C01,R_114021_C02,R_114021_C03,R_114021_C04,R_114020_C01,R_114020_C02,R_114020_C03,R_114023_C01 civilian;
    class R_114023_C02,R_114010_C01,R_114010_C02,R_114010_C03,R_114010_C04,R_114010_C05,R_114010_C06,R_114010_C07 civilian;
    class R_114011_C01,R_11401B_C01,R_11401B_C02,R_114030_C01,R_114030_C02,R_114030_C03,R_114030_C04,R_114030_C05 civilian;
    class R_114036_C01,R_11402A_C01,R_114021_C05,R_114021_C06,R_11402F_C01,R_11402E_C01,R_11402E_C02,R_11401B_C03 civilian;
    class R_11401B_C01_C01,R_114018_C01 civilian;

AI 協作聲明: 本文由筆者提供原始遊記草稿與心情隨筆,由 AI 助手 Antigravity 彙整架構與修辭。結合了 WalkGIS 的地理紀錄特點與哈爸筆記的敘事風格,展現人機協作下的流域探索成果。中英文與數字間保留半形空格,完美紀錄現場實遊軌跡。