把水利署淹水潛勢圖做成能點的地圖:資料長怎樣、我算出哪些數字、哪些話不能說
第五個工具上線了:淹水潛勢查詢。這篇把做的過程中量到、算到的東西寫下來,包括幾個寫進頁面裡會被當成結論、其實只是模擬的數字。
2026-08-21 作者 William Hsu
資料從哪來、長什麼樣
經濟部水利署在政府資料開放平臺上放了「淹水潛勢圖」(dataset 25766,政府資料開放授權)。 點進去有兩套:一套是 2018 年各縣市打包的 7z,另一套是 2022 年 8 月水利空間資訊服務平台整理的全國版, 按降雨情境分檔。我先抓了縣市版的基隆來看,87 MB 裡 150 MB 是十張 14,044×9,934 像素的海報 JPG, 真正能算的 SHP 只有幾 MB。後來改用全國版,十個情境總共 140 MB,沒有 JPG,而且每個多邊形都帶鄉鎮代碼。
- 情境 6 小時 150/250/350 mm、12 小時 200/300/400 mm、24 小時 200/350/500/650 mm,共十個
- 深度級距 0.3–0.5、0.5–1、1–2、2–3、>3 公尺五級。0.3 以下不畫
- 座標 TWD97 二度分帶;各情境 1,204 到 2,356 個多邊形,最大的一檔 375 萬個頂點
- 版本 第三代,2022-08-12 建置;水利署規定每五年檢討一次
鄉鎮界另外從內政部國土測繪中心拿(2025 年 3 月版,368 個鄉鎮市區),用來當面積分母、判斷點查時落在哪個鄉鎮。
怎麼變成能點的地圖
原圖是向量多邊形,最直接的做法是切成向量圖磚。我沒有 tippecanoe,而且點查的需求是「這一點在十個情境各是什麼級距」, 用多邊形要做十次點在多邊形內的判斷。所以改走格子:
- 把每個情境的多邊形格子化到經度 0.0004°、緯度 0.00036° 的等距格,在台灣大約 41×40 公尺,跟原圖的 40 公尺網格同量級。 再細只是假精度。
- 每格存十個情境的級距,一格 10 bytes,只存至少一個情境有淹的格子:1,276,400 格,SQLite 28 MB。
- 另外存 8×8 與 64×64 合併的粗格,取最大級距,縮小時用。
- 圖磚由伺服器即時畫:查一個範圍的格子,畫成 256×256 的 PNG,3 到 30 毫秒一張,快取起來。 緯度方向是麥卡托、格子是等距經緯度,所以每個像素列要各自換算落在哪一格,不能線性取樣。
- 全部格子化用 rasterio 跑,十個情境 82 秒。
格子化的代價是面積會跟原多邊形差一點。我把十個情境的原多邊形面積(TWD97 平面座標直接算)跟格子加總比:格子加總一律多 0.3 到 0.5%,最大 0.53%,因為壓到邊界的格子會整格算進去。全國層級可以接受;單一鄉鎮面積越小,這個比例誤差越大,頁面上有寫。

算出來才知道的幾個數字
以下都是模擬結果的統計,不是發生過的事。
全台有多少面積會淹
24 小時 350 mm(大約一個颱風或強烈梅雨鋒面一天的量)模擬淹水超過 0.3 公尺的面積是 674.5 km², 占全台陸地 1.8%。雨量到 650 mm,變成 2,060 km²、5.6%。6 小時 350 mm 是 1,178 km²。 同樣 350 mm,擠在 6 小時裡下,淹的面積是 24 小時的 1.75 倍。這就是都市排水最怕短時強降雨的原因。
哪些鄉鎮比例最高
24 小時 350 mm 情境下,模擬淹水面積比例最高的是高雄市苓雅區(38%)、前金區(32%)、新興區(30%), 但這三區面積都很小(2 到 8 km²),比例被放大;面積大又比例高的是宜蘭縣壯圍鄉(39.6 km² 淹 29%)、五結鄉(24%)、 嘉義縣東石鄉(82 km² 淹 21%)、六腳鄉、雲林縣元長鄉、嘉義縣布袋鎮。
到 650 mm,五結鄉 67%、壯圍鄉 65%、宜蘭市 58%。全台有 58 個鄉鎮超過四分之一面積淹水,8 個超過一半。
雨量一升就淹最快的地方
把 24 小時 200 mm 跟 650 mm 比,比例跳最多的是:五結鄉 7% → 67%、宜蘭市 2.5% → 58%、壯圍鄉 10% → 65%、 高雄市茄萣區 5% → 57%、嘉義縣六腳鄉 4% → 53%、高雄市湖內區 1% → 49%、新竹市北區 0.6% → 48%。 這些地方在一般豪雨下看起來沒事,雨量再上去就整片淹。蘭陽平原三個鄉鎮同時上榜,地形就是一個大碗。
短時強降雨反而更嚴重的鄉鎮
全台有 166 個鄉鎮,6 小時 350 mm 的模擬淹水面積比 24 小時 350 mm 大 1.5 倍以上。差最多的是花蓮縣玉里鎮 (32.5 km² 對 5.6 km²)、臺中市霧峰區(16.9 對 1.1)、嘉義縣新港鄉、民雄鄉、新竹縣竹北市、臺南市後壁區。 這些多半是排水要靠重力流掉、一下太急就來不及的地方。
縣市
按 24 小時 350 mm 的比例排,雲林縣 7.9%、嘉義縣 5.1%、臺南市 4.8%、彰化縣 3.7% 在前面; 六都裡臺南 4.8%、高雄 2.1%、桃園 2.0%、臺中 0.8%、新北 0.5%、臺北 0.4%。 但臺北市在 650 mm 情境跳到 6.6%,大雨量下盆地的排水極限會出來。
有 32 個鄉鎮在最大的情境下也一格都沒有:全是山區(屏東霧臺、三地門,高雄六龜、甲仙、茂林,南投信義、鹿谷……)。 它們並不因此安全:潛勢圖模擬的是淹水,山區的災害是土石流,那是另一張圖。
哪些話不能說
做這個工具最花時間的部分是決定頁面上能寫什麼,程式反而其次。
- 《水災潛勢資料公開辦法》第 8 條寫明:「水災潛勢資料僅供防救災使用;相關土地管制或土地利用限制及其他相關措施, 應依各目的事業主管機關相關法令規定辦理。」所以頁面上不出現房價、保險、該不該買。
- 第 4 條要求註明「係基於設計降雨條件、特定地形地貌資料及水理模式演算所繪製,參考使用時應特別注意」。照寫。
- 水利署成品圖上自己列的假設:SOBEK 模式、民國 99–101 年地形、民國 97 年土地利用、所有防洪排水設施正常運作、 不考慮建築物阻水。這些全放進資料頁,因為「不考慮建築物」一條就足以讓「我家那格」的判讀失效。
- 「潛勢」跟「會淹」是兩回事。同一個地點在 200 mm 沒顏色、650 mm 紅色,兩個都對,差的是假設。 所以點查一次把十個情境列出來,讓人看到它是怎麼跳的,而不是只給一個顏色。
沒做的
- 門牌地址轉座標。沒有可以合法免費用的全國服務,改用事故地圖那 35,339 筆路名地名索引加 368 個鄉鎮重心。
- 歷史淹水。水利署的「歷年颱風淹水範圍」KML 只有 1,231 個多邊形,集中在 2015–2016 的幾個颱風,不完整到放上去會誤導。
- 即時水位與淹水感測器。那是另一種資料、另一種更新頻率,之後再說。
工具在 lazetool.com/flood,各鄉鎮的數字在 各鄉鎮統計。