你是否想過:「如果新竹內灣山區下起大暴雨,市區的經國大橋到底幾個小時後水位會開始暴漲?」

傳統上記者會說「請注意下游水位」,但身為工程師與 AI Agent 的推動者,我想知道的是精確的數字與物理過程:長度幾公里?落差幾公尺?平均坡降千分之幾?流速多少?

在這篇文章中,我將分享我們如何從最基礎的 水利署河川拓樸整理 開始,結合 OpenStreetMap (OSM) 向量幾何,再跨入 全球 3D 數位高程 (DEM),最後讓 AI Agent 達成**「輸入一個 Prompt,自動算出一整份水力推算報告」**的實戰過程!


💡 一、痛點:從 2D 平面圖資到 3D 實體水文的跨越#

在過去探索河流時,我們往往只有平面地圖上的「一條線」。但在真實的水文世界裡,河流是 3D 立體 的:

  1. 2D 拓樸 (Parent-Child):哪條支流匯入哪條主流?(例如:那羅溪 ➔ 油羅溪 ➔ 頭前溪)。
  2. 實體向量幾何 (OSM Geometries):這條溪在實體地表上的折線軌跡到底長怎樣?哪裡有交點 (Node)?
  3. 3D 空間高程 (Z / Elevation):這條溪的海拔高度是 1,000 公尺還是 30 公尺?坡降是陡降還是平緩?

如果沒有把這三者串起來,你就無法計算流速與洪峰抵達時間。


🛠️ 二、三階堆疊:我們是如何打造這套 AI 水力演算鏈的?#

為了讓 AI 能具備這種「深度水理思考力」,我們在專案中完成了三階工具堆疊:

[1. 拓樸幾何引擎 (confluence_atlas.py)] 
        │ ➔ 抓取 OSM 全台河流向量折線,11 秒計算實體匯流點交點
        ▼
[2. 3D 高程厚化 CLI (elevation_hydrator.py)] 
        │ ➔ 串接 Open-Elevation API,沿河道每 1km 自動採樣 Z 軸海拔
        ▼
[3. Agent 認知整合與一鍵 Prompt 輸出] 
        │ ➔ AI 讀取 3D 水網,直接算出流速、坡降與時間預警報告!

1. 第一階:極速 11 秒水系幾何與匯流點演算 (Spec v3.1.0)#

我們首先解決了 OpenStreetMap 圖資對接的問題。透過一次性批次打包 Overpass QL 查詢,我們將頭前溪水系 40 條水脈的幾何抓取時間從 400 秒壓縮到 11 秒,並實現了 「水系唯一 Key (basin_130000_頭前溪_raw.json) 本地 100% 落庫」,第二次執行 0 秒秒讀連線!

2. 第二階:全球高程 API 與河道縱剖面採樣 (python scripts/elevation_hydrator.py)#

接著,我們寫出了全新的 elevation_hydrator.py CLI 工具。這個工具能做四件事:

  • query:查詢任意座標的海拔高度。
  • hydrate-atlas:把高程注入匯流點 JSON。
  • profile善用本地 OSM 快取,沿著油羅溪每隔 1000 公尺採樣一個點的海拔,畫出縱剖面。
  • slope:計算任意兩點間的落差與千分比水力坡降 ($S = \Delta H / L$)。

⛰️ 三、v2.4 重磅升級:終端機 3D 海拔縱剖面與 AI-Native JSONL 資料庫#

為了讓這套 3D 水文拓樸能真正普及給所有開發者與 AI Agent,我們在最新的 v2.4 版本 進行了大一統升級:

1. 終端機一鍵印出水系 3D 海拔縱剖面 (river_cli.py profile)#

我們升級了 river_cli.py 萬用工具。現在只需在終端機輸入 python scripts/river_cli.py profile 頭前溪,就能直接畫出帶有全形中文字精密對齊、高山至河口降落趨勢的 3D 剖面圖:

⛰️ 【頭前溪 水系全體水脈 3D 海拔縱剖面與降落趨勢圖】
📊 已獲取高程: 11 筆 (最高: 1291.0m | 最低: 121.0m) | 待厚化高程: 30 筆
================================================================================
  花園溪                 (130010-C01)             | ██████████████████████████████ 1291.0 m
  爺巴堪溪               (130010-C03)             | ███████████████████████████    1200.0 m
  麥巴來溪               (130010-C02)             | ███████████████████████        1025.0 m
  霞喀羅溪               (130011)                 | █████████████████████           932.0 m
  那羅溪                 (130025)                 | ████████                        372.0 m
  內灣幹線               (130023)                 | █████                           249.0 m
  新庄子排水             (130021)                 | ████                            198.0 m
  大肚溪                 (130000-C04-C02)         | ████                            178.0 m
  王爺坑溪               (130000-C04-C01)         | ███                             150.0 m
  油羅溪                 (130020)                 | ██                              121.0 m
  上坪溪                 (130010)                 | ██                              121.0 m
-------------------------------------------------------------------------------------
  📋 [待厚化高程水脈清單]:
  豆子埔溪               (130000-C01)             | ░░░░░                             ? m (待測量)
  柯子湖溪               (130000-C02)             | ░░░░░                             ? m (待測量)
================================================================================

2. 全台 1,418 筆水脈 AI-Native JSONL Master 資料庫#

資料庫正式從傳統 CSV 表格全面升級為 AI-Native 雙軌流式 JSONL (taiwan_river_topology_registry.jsonl)

  • 全量收納 1,418 條水脈(727 筆水利署官方 6 碼 + 691 筆民間延伸水脈)。
  • 全量注入 356 筆實體匯流點經緯度與 3D 海拔高度 (plugins.elevation),並支援 links 權威外鏈與 culture / pois 人文景點擴充!

🌊 四、實戰驗證:一個 Prompt 算出的內灣暴漲預警報告#

當我們把這套底座建好後,我在對話視窗中輸入了一個極簡的 Prompt:

「如果在內灣下暴雨,新竹這邊的經國橋何時會水位爆漲?」

AI Agent 立刻自動發動剛才寫好的 elevation_hydrator 進行河道剖面採樣與坡降計算,不到 10 秒就給出了令人驚豔的實體分析:

📊 水文地理實體推算結果:#

段落起點 ➔ 終點河道距離起終點高程高程落差 $\Delta H$平均坡降 $S$
上游陡坡段內灣竹東大橋6.93 km249m ➔ 139m110 m15.8 ‰ (山區陡降)
中游平緩段竹東大橋經國大橋12.92 km139m ➔ 37m102 m7.9 ‰ (主流平緩)
全路徑總計內灣 ➔ 經國大橋19.85 km249m ➔ 37m212 m10.7 ‰

⏱️ 時間預警結論:#

  1. 初波水位上升 ($T + 1.5 \text{ 小時}$): 內灣暴雨發動後 90 分鐘,混濁水流抵達經國大橋,水位開始顯著上升。
  2. 洪峰最高暴漲 ($T + 2.5 \sim 3 \text{ 小時}$): 暴雨發動後 2.5 至 3 小時,經國大橋迎來最高洪峰水位。

📖 📚 五、想了解更多?歡迎參閱《台灣河流探索專書》與標準規格書#

本文討論的所有原始碼、水力算例、CLI 工具說明書與 AI-Native JSON Schema 規格,均已完整開源並收錄於專書中,歡迎點擊以下連結深入閱讀:

  1. 🏠 專書開源主頁《台灣河流探索專書 (RiverExploration Repo)》
  2. 📘 專書第 11.6 節 (大一統最新章節)《全台灣 150 主流水系、AI-Native 雙軌 JSONL 資料庫與 3D 拓樸》
  3. 🛠️ CLI 萬用工具手冊《river_cli.py 萬用查詢與 3D 轉譯手冊》
  4. 📜 JSON Schema 權威規格書《WRA-Civ AI-Native JSONL Master 規格說明書 (Spec v2.4)》

📝 六、結語與心得#

這次的實驗過程讓我非常興奮。

過往我們以為要回答這種「幾點幾分會淹水」的問題,需要動用極其龐大的水利專業模擬軟體;但今天,透過 「乾淨的資料庫拓樸 + OSM 開放圖資 + 全球 DEM 高程 API + CGS 規範的 CLI 工具」,再搭配一個具備工具調用能力的 Agentic AI,我們在幾十分鐘內就建立出了一條可重複運算的水力分析流水線。

這就是人機協作最迷人的地方:工程師負責構建工具與架構防線,AI 負責即時演算與知識合成

下一階段,我們準備把這套高程與縱剖面分析推展至全台灣 150 個水系,讓台灣每一條溪流都有屬於自己的 3D 數位雙生 (Digital Twin)!


AI 協作聲明: 本文由筆者提供原始遊記草稿與心情隨筆,由 AI 助手 Antigravity 彙整架構與修辭。結合了 WalkGIS 的地理紀錄特點與哈爸筆記的敘事風格,展現人機協作下的流域探索成果。