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