Header Example
マイページ

現在の位置

地図で表示

通知センター

取得中…

詳細表示

行動履歴

取得中…

地図で表示
ショートコード) const newEventJson = tempDom.querySelector("#eventdt-json")?.textContent || "{}"; const parsed = JSON.parse(newEventJson); if (parsed) { const est = parsed.est || "データなし"; const esp = parsed.esp || "データなし"; const fdn = parsed.fdn || "データなし"; const frn = parsed.frn || "データなし"; document.getElementById("est-time").innerText = est; document.getElementById("esp-time").innerText = esp; document.getElementById("fdn-time").innerText = fdn; document.getElementById("frn-time").innerText = frn; const titleElement = document.getElementById("location-status-title"); const messageElement = document.getElementById("location-status-message"); const estTime = new Date(est); const espTime = new Date(esp); const movementStatus = (espTime > estTime) ? "停車中" : "運転中"; let safetyStatus = "異常検出なし"; if (fdn && (!frn || new Date(frn) <= new Date(fdn))) { safetyStatus = "転倒発生"; } // ▼ ダッシュボード側にも同じ表示を出力 const dashboardStatusEl = document.getElementById("dashboard-status-message"); if (dashboardStatusEl) { dashboardStatusEl.textContent = `(${movementStatus}・${safetyStatus})`; dashboardStatusEl.style.color = (safetyStatus === "転倒発生") ? "red" : "black"; } messageElement.textContent = `(${movementStatus}・${safetyStatus})`; messageElement.style.color = (safetyStatus === "転倒発生") ? "red" : "white"; // ▼ 状態アイコンを更新(ここから追加) const statusIcon = document.getElementById("status-icon"); if (statusIcon) { let iconUrl = ""; if (safetyStatus === "転倒発生") { iconUrl = "https://www.fleaiot.com/wp-content/uploads/2025/05/scooter_icon_toggle_0.5s.gif"; } else if (movementStatus === "停車中") { iconUrl = "https://www.fleaiot.com/wp-content/uploads/2025/05/status_parking.png"; } else { iconUrl = "https://www.fleaiot.com/wp-content/uploads/2025/05/status_running.png"; } statusIcon.src = iconUrl; statusIcon.alt = `${movementStatus} / ${safetyStatus}`; } } }) .catch(error => console.error("更新エラー:", error)); } // 初回実行 + 60秒ごとに自動更新 updateLocationAndEventData(); setInterval(updateLocationAndEventData, 60000); // 緯度・経度から住所を取得して #latest-location-address に表示する処理 function fetchAddressFromLatLng(lat, lng) { const geocoder = new google.maps.Geocoder(); const latlng = { lat: parseFloat(lat), lng: parseFloat(lng) }; geocoder.geocode({ location: latlng }, function (results, status) { if (status === "OK" && results[0]) { let address = results[0].formatted_address; // ✅ 郵便番号を確実に削除("〒222-0033 " のような形式) address = address.replace(/〒\d{3}-\d{4}/g, ""); // ✅ 「日本、」なども削除 address = address.replace(/^日本、?\s*/, "").trim(); // ✅ 複数スペースを1つにまとめる address = address.replace(/^日本、?\s*/, "").trim(); // ✅ ダッシュボード&メイン地図、両方に反映 const dashboardEl = document.getElementById("dashboard-address"); const locationEl = document.getElementById("latest-location-address"); if (dashboardEl) dashboardEl.textContent = address; if (locationEl) locationEl.textContent = address; } else { console.warn("住所の取得に失敗:", status); } }); } }); function getCleanAddress(addressComponents) { let prefecture = ""; let city = ""; let ward = ""; let town = ""; let street = ""; let number = ""; console.log("addressComponents", addressComponents); addressComponents.forEach(component => { if (component.types.includes("administrative_area_level_1")) { prefecture = component.long_name; } else if (component.types.includes("locality")) { city = component.long_name; } else if (component.types.includes("sublocality_level_1") || component.types.includes("sublocality")) { ward = component.long_name; } else if (component.types.includes("neighborhood")) { town = component.long_name; } else if (component.types.includes("route")) { street = component.long_name; } else if (component.types.includes("street_number")) { number = component.long_name; } }); // 組み立て(必要なもののみ順に) return [prefecture, city, ward, town, street + number].filter(Boolean).join(''); }