https://www.shih.com.tw/EQfaultKML/index.html

服務名稱 容器內部 Port 主機對應 Port NAS 對外入口 備註
admin-api 5053 5056 5055 管理後台 (需手動在 NAS 修正目的地 Port)
pdf-api 5000 5052 5051 PDF 報表計算服務

2025-11-18 修正「點對點」(Point-to-Vertex) 的距離的演算法,這在斷層線轉折不多時誤差很小,但在精確工程計算中,確實應該計算\*\*「點對線段」(Point-to-Segment)\*\* 的最短距離(即:如果有垂足,取垂距;若無,取最近端點距離)。

網頁功能摘要:KML 地震力係數與斷層資訊工具

這是一個100% 純客戶端 (Client-Side) 的 JavaScript 應用程式,成功地將一個複雜的 Python 工程計算流程,轉換為一個高效能、零安裝、零後端依賴的網頁工具。

🌎 核心功能:三種查詢模式

使用者有三種方式來指定查詢位置,提供了極大的彈性:

  1. 地圖點選 (反向地理編碼)

    • 使用者可以直接在網頁上方的互動式地圖 (OpenStreetMap) 點擊任何位置。

    • 程式會自動獲取該點的座標,並立即呼叫 Nominatim API (反向查詢)

    • API 回傳地址後,程式會自動填入「緯度, 經度」輸入框,並自動選定對應的「縣市」與「鄉鎮市區」下拉選單。

  2. 地址查詢 (正向地理編碼)

    • 使用者可以先選擇「縣市」和「鄉鎮市區」。

    • 然後在「輸入地址」欄位填入街道名稱或門牌號碼(例如 中山路三段208號)。

    • 點擊「查詢座標」按鈕後,程式會呼叫 Nominatim API (正向查詢),將完整的地址(例如 臺南市歸仁區中山路三段208號)轉換為座標,並自動填入「緯度, 經度」輸入框。

  3. 座標輸入 (手動)

    • 使用者可以直接在「緯度, 經度」輸入框中手動輸入座標(使用 , 分隔)。

⚙️ 主要計算與輸出

當使用者按下「計算與斷層距離」按鈕時,程式會執行以下所有動作:

  1. 資料查詢 (詳細資訊)

    • 讀取「緯度, 經度」和「行政區」下拉選單。

    • spectrum_data.json 查閱該行政區的 V10(C), SDS, SD1 等基礎係數。

    • 使用 Haversine 距離公式 (JavaScript 實作) 計算輸入點與 台灣活動斷層.kml 中所有斷層的最短距離,並顯示於「輸出訊息」欄位。

    • 針對該行政區規範需考量的斷層,讀取其最短距離 (r),並從 fault_distance_data.json 內插計算出精確的 rSDS, rSD1 等係數。

  2. KML 檔案產生

    • 程式會動態產生一個 .kml 檔案,內容包含:

      • 該行政區所有規範斷層的軌跡(紅色粗線)。

      • 一條從查詢點到最近斷層的距離線(綠色粗虛線)。

    • 提供一個可點擊的「下載 KML」連結。

  3. 地圖快照產生 (核心視覺化)

    • 無斷層模式:如果該行政區無需考量斷層,快照會顯示一個淡化的地圖,並在查詢點上放置一個綠色小圓點座標標籤

    • 斷層模式

      • 在隱藏的 Leaflet 地圖 (preferCanvas: true) 上繪製所有圖形。

      • 斷層線:使用不同明暗度的紅色來區分多條斷層。

      • 距離線:使用綠色粗虛線

      • 範圍線:使用 14km 灰色虛線圓圈

      • 標籤:使用 Canvas 繪圖技術,將斷層名稱(自動左移)和距離(背景透明)直接繪製在圖片上。

      • 署名:在圖片右下角壓上 "Justin C. H. Shih & Gemini" 署名。

      • 最後使用 leaflet-image 截圖並顯示在頁面上。

🛠️ 進階設定與重繪

使用者可以在「地圖顯示設定 (進階)」區塊完全自訂快照的視覺風格:

📡 後端日誌 (PHP)