Use configured home location
This commit is contained in:
+33
-8
@@ -1312,6 +1312,29 @@ const HOME_JITTER_SAMPLE_SECONDS = 30 * 60;
|
||||
const TRACK_MAX_GAP_SECONDS = 30 * 60;
|
||||
const AWAY_MAX_GAP_SECONDS = 2 * 60 * 60;
|
||||
|
||||
function homeConfigFromData(data) {
|
||||
const home = data?.home || {};
|
||||
const radius = Number(home.radius_m || HOME_RADIUS_M);
|
||||
return {
|
||||
lat: Number(home.latitude),
|
||||
lng: Number(home.longitude),
|
||||
radius: Number.isFinite(radius) && radius > 0 ? radius : HOME_RADIUS_M,
|
||||
};
|
||||
}
|
||||
|
||||
function homeRadiusMeters() {
|
||||
return mapState.homeCenter?.radius || HOME_RADIUS_M;
|
||||
}
|
||||
|
||||
function updateConfiguredHome(data) {
|
||||
const home = homeConfigFromData(data);
|
||||
if (hasValidCoords(home.lat, home.lng)) {
|
||||
updateHomeCenter(home.lat, home.lng, home.radius);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
function pointWithLatLng(point, lat, lng, extra = {}) {
|
||||
return {
|
||||
...point,
|
||||
@@ -1408,12 +1431,13 @@ function buildStayPoints(points) {
|
||||
return stays;
|
||||
}
|
||||
|
||||
function updateHomeCenter(lat, lng) {
|
||||
function updateHomeCenter(lat, lng, radius = HOME_RADIUS_M) {
|
||||
if (!hasValidCoords(lat, lng)) return;
|
||||
mapState.homeCenter = {
|
||||
lat: Number(lat),
|
||||
lng: Number(lng),
|
||||
latlng: new naver.maps.LatLng(Number(lat), Number(lng))
|
||||
latlng: new naver.maps.LatLng(Number(lat), Number(lng)),
|
||||
radius: Math.max(1, Number(radius) || HOME_RADIUS_M)
|
||||
};
|
||||
updateHomeCircle();
|
||||
}
|
||||
@@ -1424,7 +1448,7 @@ function updateHomeCircle() {
|
||||
mapState.homeCircle = new naver.maps.Circle({
|
||||
map: mapState.map,
|
||||
center: mapState.homeCenter.latlng,
|
||||
radius: 50,
|
||||
radius: homeRadiusMeters(),
|
||||
strokeColor: '#5856d6',
|
||||
strokeOpacity: 0.8,
|
||||
strokeWeight: 2,
|
||||
@@ -1433,6 +1457,7 @@ function updateHomeCircle() {
|
||||
});
|
||||
} else {
|
||||
mapState.homeCircle.setCenter(mapState.homeCenter.latlng);
|
||||
mapState.homeCircle.setRadius(homeRadiusMeters());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1443,7 +1468,7 @@ function distanceFromHome(point) {
|
||||
|
||||
function classifyHomePoint(point) {
|
||||
const distance = distanceFromHome(point);
|
||||
if (distance <= HOME_RADIUS_M) return 'home';
|
||||
if (distance <= homeRadiusMeters()) return 'home';
|
||||
if (mapState.filterOutliers && distance <= HOME_JITTER_ABSORB_RADIUS_M) return 'home';
|
||||
if (distance <= HOME_NEAR_RADIUS_M) return 'near';
|
||||
return 'away';
|
||||
@@ -1583,7 +1608,7 @@ function renderHistorySummary() {
|
||||
<span>${t.historyMaxGap}</span><strong>${formatDuration(Math.round(stats.maxGap))}</strong>
|
||||
<span>${t.historyPoints}</span><strong>${stats.rawPoints && stats.rawPoints !== stats.renderPoints ? `${formatNumber(stats.renderPoints)} / ${formatNumber(stats.rawPoints)}` : formatNumber(stats.points)}</strong>
|
||||
<span>${t.historyStops}</span><strong>${formatNumber(stats.stops || 0)}</strong>
|
||||
<span>${t.homeRadius}</span><strong>${mapState.filterOutliers ? '50m + GPS 1.2km' : '50m'}</strong>
|
||||
<span>${t.homeRadius}</span><strong>${mapState.filterOutliers ? `${formatNumber(homeRadiusMeters())}m + GPS 1.2km` : `${formatNumber(homeRadiusMeters())}m`}</strong>
|
||||
<span>${t.homeStay}</span><strong>${home ? formatDuration(Math.round(home.homeSeconds)) : '-'}</strong>
|
||||
<span>${t.awayTime}</span><strong>${home ? formatDuration(Math.round(home.awaySeconds)) : '-'}</strong>
|
||||
<span>${t.awaySessions}</span><strong>${home ? formatNumber(sessions.length) : '-'}</strong>
|
||||
@@ -2088,7 +2113,7 @@ function updateDOMWithData(data) {
|
||||
if (!mapState.map && baseLatLng) {
|
||||
initMap(baseLatLng, data.accuracy || 50);
|
||||
}
|
||||
updateHomeCenter(data.latitude, data.longitude);
|
||||
updateConfiguredHome(data) || updateHomeCenter(data.latitude, data.longitude);
|
||||
|
||||
// 히스토리 궤적/포인트 업데이트
|
||||
if (data.history?.length > 0) {
|
||||
@@ -2103,9 +2128,9 @@ function updateDOMWithData(data) {
|
||||
return;
|
||||
}
|
||||
|
||||
// ── 라이브 모드 기존 로직 ──
|
||||
// ── 라이브 모드 기존 로직 ──
|
||||
const latlng = new naver.maps.LatLng(data.latitude, data.longitude);
|
||||
updateHomeCenter(data.latitude, data.longitude);
|
||||
updateConfiguredHome(data) || updateHomeCenter(data.latitude, data.longitude);
|
||||
|
||||
// DOM 업데이트
|
||||
updateDOM(data);
|
||||
|
||||
Reference in New Issue
Block a user