資料科學 地理資訊系統 公共安全 課程報告

資料科學課程報告:以台灣環境為例設計戰時避難疏散路線指引

資料科學課程報告:以台灣環境為例設計戰時避難疏散路線指引

  • 撰稿日期:2025年2月23日
  • 作者:aaronyu
  • 類別:資料科學、地理資訊系統、公共安全
  • 標籤:Python、KML、地理數據、MongoDB、避難疏散、資料清理、路線規劃、台灣環境、宮廟資料

摘要

本報告利用資料科學方法,從「車床天地」的Google Map KML檔案提取數據,結合台灣政府開放資料平台(https://data.gov.tw)中的多項資料集(包括內政部的宮廟資料),設計一套適用於台灣環境的戰時避難疏散路線指引系統。系統基於車泊點與宮廟資料,加入避難相關元數據(如可容納人數、即時收容人數),並採用MongoDB作為資料庫,實現高效儲存與查詢。本報告刻意排除民防系統常見的學校與公園作為主要避難場域,並解釋其理由。內容涵蓋資料提取與清理、Metadata設計、路線規劃邏輯、資料庫設計,以及未來擴展建議,旨在提供一個具實用性與可擴展性的避難解決方案。


課程目標

利用資料科學技術,將車床天地KML檔案中的車泊點數據與政府開放資料(特別是內政部的宮廟資料)整合,設計戰時避難疏散路線指引系統。目標包括:

  1. 整理並擴展車泊點與宮廟資料,適配避難需求。
  2. 結合政府開放資料,提升系統的全面性與即時性。
  3. 設計可擴展的資料結構與儲存方案,支援戰時應用。
  4. 明確排除學校與公園作為主要避難場域,提供替代方案。

資料來源與背景

主要資料來源

  • 車床天地KML檔案
    • 內容:台灣各地車泊點的區域、名稱、經緯度座標(N,E)、地址及電話等基礎資訊。
    • 格式:Google Map KML(XML結構)。
    • 特點:涵蓋全台露營與車泊地點,多位於郊區或山區,具有避難潛力。

政府開放資料

從政府開放資料平台(https://data.gov.tw)獲取以下相關資料集,補充系統資訊:

宮廟資料

  • 資料集:宗教團體登記資料(內政部)
    • 內容:全台宮廟的登記名稱、地址、負責人資訊及部分經緯度資料。
    • 應用:宮廟在台灣文化中常作為社區避難場所,具備空間、設施(如廁所、水源)及社會信任優勢,可與車泊點結合形成避難網絡。
    • 格式:CSV,部分資料需透過地址轉換為經緯度。

地理與空間資料

  • 全國避難收容處所資料(內政部):避難所位置、名稱、地址及經緯度,用於比對與驗證。
  • 道路網圖資(交通部):台灣道路GIS數據,用於路線規劃。
  • 全國建物資料(內政部營建署):建物分佈與用途,評估人口壓力與安全風險。

人口與容量相關資料

  • 人口統計資料(內政部戶政司):鄉鎮區人口數與分佈,估算避難容量。
  • 災害潛勢圖(國家災害防救科技中心):地震、颱風、洪水潛勢,計算安全評分。

交通與基礎設施資料

  • 公共運輸站點資料(交通部運輸研究所):公車與火車站點,提升可達性評估。
  • 電力設施分布(台灣電力公司):電網位置,判斷電力供應能力。

災害應變相關資料

  • 即時地震資訊(中央氣象署):地震數據,動態調整路線與地點。
  • 颱風即時資訊(中央氣象署):颱風路徑與影響,更新安全評分。
  • 緊急醫療資源分布(衛生福利部):醫療設施位置,提供傷患支援。

其他潛在資料

  • 土地使用分區資料(內政部國土測繪中心):土地用途,評估長期避難適宜性。
  • 行動通訊基地台分布(國家通訊傳播委員會):通訊覆蓋,確保避難地點聯繫能力。

為何不納入學校與公園作為主要避難場域

在台灣民防系統中,學校與公園常被指定為避難場所,但本報告刻意排除其作為主要場域,理由如下:

  1. 戰時脆弱性
    • 學校:多位於人口密集區,建築結構(如教室)易受砲火或地震損壞,且為敵方潛在目標(如徵用為指揮中心)。
    • 公園:多為開放空間,缺乏遮蔽與基礎設施,易受空襲或氣象災害影響。
  2. 容量與設施限制
    • 學校:雖有教室與操場,但戰時可能優先用於安置學生或軍事用途,避難容量受限,且缺乏獨立供水與電力。
    • 公園:無穩定設施(如廁所、庇護所),不適合長期避難。
  3. 交通與隱蔽性不足
    • 學校與公園:多位於城市中心或顯眼位置,交通易堵塞,缺乏隱蔽性,增加暴露風險。
  4. 替代方案優勢
    • 車泊點位於郊區或山區,隱蔽性高且遠離潛在目標;宮廟具備社區信任與基礎設施(如水源、集會空間),更適合戰時分散避難。

背景

台灣地形多山,人口分佈不均,戰時避難需考慮地點的可達性、安全性及容量。車泊點與宮廟結合官方避難所,可形成分散式避難網絡,避免過度依賴脆弱的學校與公園,提升整體韌性。


資料整理思路與流程

1. 資料提取與清理

  • 輸入格式
    • KML檔案:XML結構,含Placemark標籤。
    • 宮廟資料:CSV格式,需地址轉經緯度。
  • 提取步驟
    1. 使用Python的pykml解析KML檔案,提取車泊點名稱、座標及描述。
    2. 從內政部「宗教團體登記資料」提取宮廟名稱、地址及負責人資訊,使用地理編碼工具(如Google Geocoding API)轉換地址。
    3. 將非結構化數據(如「雨棚◎」)轉為結構化欄位。
  • 清理步驟
    • 座標轉換:將"25° 7'43.50""N,121°46'48.34""E"轉為[121.78009, 25.12875]
    • 狀態標記:車泊點「解約」、「停業」設為非活躍,宮廟假設「活躍」除非註記歇業。
    • 缺失值處理:地址或電話缺失時,補充「未知」或從其他資料填充。

2. Metadata設計

為適配避難需求,設計以下欄位:

  • 基礎欄位
    • type(類型):區分「車泊點」或「宮廟」。
    • region(區域)
    • name(名稱)
    • coordinates(座標):[longitude, latitude]
    • address(地址)
    • phone(電話)
    • status(狀態):活躍、解約、暫停
  • 避難相關欄位
    • capacity(可容納人數):車泊點參考面積,宮廟參考人口與空間估計。
    • current_occupancy(即時收容人數):戰時動態更新。
    • facilities(設施):車泊點如「淋浴」,宮廟如「水源」、「集會空間」。
    • accessibility(可達性):參考道路網與運輸站點。
    • safety_score(安全評分):結合災害潛勢圖與隱蔽性計算。
  • 擴展性欄位
    • last_updated(最後更新時間):ISO 8601格式。
    • additional_notes(附加註釋):如宮廟的「宗教活動頻率」或醫療資源位置。

3. 資料結構範例(JSON)

車泊點範例

{
  "type": "車泊點",
  "region": "信義",
  "name": "基隆全方位汽車 (簡小璇)",
  "coordinates": [121.78009, 25.12875],
  "address": "基隆市信義區",
  "phone": "02-24658636",
  "status": "活躍",
  "capacity": 50,
  "current_occupancy": 0,
  "facilities": ["淋浴", "車泊", "電力"],
  "accessibility": "公路附近",
  "safety_score": 70,
  "last_updated": "2025-02-23T10:00:00Z",
  "additional_notes": "遠離城市中心,隱蔽性佳"
}

宮廟範例

{
  "type": "宮廟",
  "region": "萬華",
  "name": "台北市華中露營場",
  "coordinates": [121.49634, 25.01463],
  "address": "台北市萬華區萬大路底華中河濱公園左區",
  "phone": "0932210734",
  "status": "活躍",
  "capacity": 100,
  "current_occupancy": 0,
  "facilities": ["淋浴", "集會空間", "水源"],
  "accessibility": "河濱公園內",
  "safety_score": 65,
  "last_updated": "2025-02-23T10:00:00Z",
  "additional_notes": "社區信任高,可短期避難"
}

4. 路線規劃邏輯

  • 目標:根據使用者位置,推薦最近、安全且有空位的避難地點(車泊點或宮廟),並生成路線。
  • 方法
    1. 距離計算:使用Haversine公式:
      from math import radians, sin, cos, sqrt, atan2
      def haversine(lon1, lat1, lon2, lat2):
          R = 6371
          dlon, dlat = radians(lon2 - lon1), radians(lat2 - lat1)
          a = sin(dlat/2)**2 + cos(radians(lat1)) * cos(radians(lat2)) * sin(dlon/2)**2
          c = 2 * atan2(sqrt(a), sqrt(1-a))
          return R * c
      
    2. 篩選條件
      • status = “活躍”
      • current_occupancy < capacity
      • safety_score > 50
    3. 路線生成:使用道路網圖資與Google Maps API生成導航路徑。
  • 優先級:距離近、安全性高、容量充足,宮廟因社區信任可優先於偏遠車泊點;排除學校與公園以降低暴露風險。

5. MongoDB資料庫設計

  • 選擇理由
    • 支援非結構化數據,適配車泊點與宮廟差異。
    • 內建GeoJSON地理查詢。
    • 高效更新即時數據。
  • 集合設計
    • 集合名稱:shelter_locations
    • 索引:db.shelter_locations.createIndex({ "coordinates": "2dsphere" })
  • 查詢範例
    db.shelter_locations.find({
      "coordinates": {
        $near: {
          $geometry: { type: "Point", coordinates: [121.78009, 25.12875] },
          $maxDistance: 10000
        }
      },
      "status": "活躍",
      "current_occupancy": { $lt: "$capacity" }
    });
    

政府開放資料應用

資料整合

  • 方法:使用Python(Pandas)合併KML與政府資料:
    import pandas as pd
    shelters = pd.read_csv("carpark_data.csv")
    temples = pd.read_csv("宗教團體登記資料.csv")
    gov_shelters = pd.read_csv("全國避難收容處所資料.csv")
    merged_data = pd.concat([shelters, temples, gov_shelters]).drop_duplicates(subset=["latitude", "longitude"])
    

容量估算

  • 車泊點:根據面積估計(如每100平米10人)。
  • 宮廟:結合人口統計與空間大小,假設平均容納50-200人。

即時更新

  • 透過API(地震、颱風資料)更新safety_scorecurrent_occupancy

注意事項

  • 更新頻率:宮廟資料需定期驗證狀態。
  • 格式轉換:地址轉經緯度使用地理編碼工具。
  • 安全性:戰時加密敏感資訊。

未來擴展建議

  1. 動態數據整合:接入交通與氣象API。
  2. 手機應用程式:開發APP提供即時指引。
  3. 容量管理:使用IoT動態更新人數。
  4. 多用途應用:平時旅遊與宗教活動,戰時避難。

結論

本報告透過資料清理、Metadata設計與MongoDB儲存,將車床天地KML檔案與內政部宮廟資料等政府開放資料整合,打造一個高效、可擴展的戰時避難疏散系統。刻意排除學校與公園,轉而利用車泊點與宮廟的隱蔽性與設施優勢,形成分散式避難網絡。系統結合地理查詢與路線規劃,能為台灣民眾提供實用支援,未來可進一步提升即時性與應用範圍。