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 工程計算流程,轉換為一個高效能、零安裝、零後端依賴的網頁工具。
🌎 核心功能:三種查詢模式
使用者有三種方式來指定查詢位置,提供了極大的彈性:
-
地圖點選 (反向地理編碼):
-
使用者可以直接在網頁上方的互動式地圖 (OpenStreetMap) 點擊任何位置。
-
程式會自動獲取該點的座標,並立即呼叫 Nominatim API (反向查詢)。
-
API 回傳地址後,程式會自動填入「緯度, 經度」輸入框,並自動選定對應的「縣市」與「鄉鎮市區」下拉選單。
-
-
地址查詢 (正向地理編碼):
-
使用者可以先選擇「縣市」和「鄉鎮市區」。
-
然後在「輸入地址」欄位填入街道名稱或門牌號碼(例如
中山路三段208號)。 -
點擊「查詢座標」按鈕後,程式會呼叫 Nominatim API (正向查詢),將完整的地址(例如
臺南市歸仁區中山路三段208號)轉換為座標,並自動填入「緯度, 經度」輸入框。
-
-
座標輸入 (手動):
-
使用者可以直接在「緯度, 經度」輸入框中手動輸入座標(使用
,分隔)。
-
⚙️ 主要計算與輸出
當使用者按下「計算與斷層距離」按鈕時,程式會執行以下所有動作:
-
資料查詢 (詳細資訊):
-
讀取「緯度, 經度」和「行政區」下拉選單。
-
從
spectrum_data.json查閱該行政區的 V10(C), SDS, SD1 等基礎係數。 -
使用 Haversine 距離公式 (JavaScript 實作) 計算輸入點與
台灣活動斷層.kml中所有斷層的最短距離,並顯示於「輸出訊息」欄位。 -
針對該行政區規範需考量的斷層,讀取其最短距離 (r),並從
fault_distance_data.json內插計算出精確的 rSDS, rSD1 等係數。
-
-
KML 檔案產生:
-
程式會動態產生一個
.kml檔案,內容包含:-
該行政區所有規範斷層的軌跡(紅色粗線)。
-
一條從查詢點到最近斷層的距離線(綠色粗虛線)。
-
-
提供一個可點擊的「下載 KML」連結。
-
-
地圖快照產生 (核心視覺化):
-
無斷層模式:如果該行政區無需考量斷層,快照會顯示一個淡化的地圖,並在查詢點上放置一個綠色小圓點及座標標籤。
-
斷層模式:
-
在隱藏的 Leaflet 地圖 (
preferCanvas: true) 上繪製所有圖形。 -
斷層線:使用不同明暗度的紅色來區分多條斷層。
-
距離線:使用綠色粗虛線。
-
範圍線:使用 14km 灰色虛線圓圈。
-
標籤:使用
Canvas繪圖技術,將斷層名稱(自動左移)和距離(背景透明)直接繪製在圖片上。 -
署名:在圖片右下角壓上 "Justin C. H. Shih & Gemini" 署名。
-
最後使用
leaflet-image截圖並顯示在頁面上。
-
-
🛠️ 進階設定與重繪
使用者可以在「地圖顯示設定 (進階)」區塊完全自訂快照的視覺風格:
-
底圖樣式:可選擇「中文標註 (淡化 OSM)」或「極簡風格 (CartoDB Light, 英文)」。
-
底圖透明度:可自訂 0.0 到 1.0 的透明度。
-
視覺參數:可即時調整「斷層粗細」、「光暈粗細」和「標籤位移像素」。
-
重繪按鈕:允許使用者在不重新計算距離的情況下,立即使用新設定重繪地圖快照(此功能在有斷層或無斷層時均可使用)。
📡 後端日誌 (PHP)
-
計數器:網頁載入時,會自動發送
GET請求到log_query.php獲取並顯示總查詢次數。 -
日誌記錄:每次點擊「計算」按鈕,程式都會發送
POST請求到log_query.php。 -
伺服器端:PHP 腳本會記錄使用者的 IP 位址、查詢時間、查詢地點等資訊到
log/query_log.txt檔案中,並將log/query_count.txt計數器加 1。