fix: RoutePanel 시종점 역사(역사 카테고리) POI에서 km 최소/최대로 표시

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
minsung
2026-04-01 16:35:02 +09:00
parent 4636679537
commit 4fc59416b2

View File

@@ -93,23 +93,23 @@ export default function RoutePanel({ currentTime, visible, onSeek }: RoutePanelP
.catch(() => {}); .catch(() => {});
}, [visible, droneFramesLoaded]); }, [visible, droneFramesLoaded]);
// 시점/종점: 드론 첫/마지막 프레임에서 가장 가까운 역 이름 // 시점/종점: 역사(category=역사) POI 중 km 최소/최대
useEffect(() => { useEffect(() => {
if (!droneFramesLoaded || !stations.length) return; if (!stations.length || !pois.length) return;
const frames = allDroneFramesRef.current; const validSt = stations.filter(s => stationKm(s.title) >= 0);
if (!frames.length) return; if (!validSt.length) return;
const nearest = (f: DroneFrameBasic) => { const stationPois = pois.filter(p => p.category === '\uC5ED\uC0AC'); // 역사
let best = stations[0]; if (!stationPois.length) return;
let bestD = (f.lat - best.lat) ** 2 + (f.lon - best.lon) ** 2; let minKmPoi = stationPois[0], maxKmPoi = stationPois[0];
for (let i = 1; i < stations.length; i++) { let minK = poiKm(stationPois[0], validSt), maxK = minK;
const d = (f.lat - stations[i].lat) ** 2 + (f.lon - stations[i].lon) ** 2; for (let i = 1; i < stationPois.length; i++) {
if (d < bestD) { best = stations[i]; bestD = d; } const k = poiKm(stationPois[i], validSt);
} if (k >= 0 && k < minK) { minK = k; minKmPoi = stationPois[i]; }
return best.title; if (k >= 0 && k > maxK) { maxK = k; maxKmPoi = stationPois[i]; }
}; }
setRouteStartTitle(nearest(frames[0])); setRouteStartTitle(minKmPoi.title);
setRouteEndTitle(nearest(frames[frames.length - 1])); setRouteEndTitle(maxKmPoi.title);
}, [droneFramesLoaded, stations]); }, [stations, pois]);
// Update current km and visible range based on currentTime // Update current km and visible range based on currentTime
useEffect(() => { useEffect(() => {