From 4fc59416b2ef0d13c5230055e1d7d8ef690a2245 Mon Sep 17 00:00:00 2001 From: minsung Date: Wed, 1 Apr 2026 16:35:02 +0900 Subject: [PATCH] =?UTF-8?q?fix:=20RoutePanel=20=EC=8B=9C=EC=A2=85=EC=A0=90?= =?UTF-8?q?=20=EC=97=AD=EC=82=AC(=EC=97=AD=EC=82=AC=20=EC=B9=B4=ED=85=8C?= =?UTF-8?q?=EA=B3=A0=EB=A6=AC)=20POI=EC=97=90=EC=84=9C=20km=20=EC=B5=9C?= =?UTF-8?q?=EC=86=8C/=EC=B5=9C=EB=8C=80=EB=A1=9C=20=ED=91=9C=EC=8B=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Sonnet 4.6 --- client/src/components/overlay/RoutePanel.tsx | 32 ++++++++++---------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/client/src/components/overlay/RoutePanel.tsx b/client/src/components/overlay/RoutePanel.tsx index 43a6fe9..57bdf3d 100644 --- a/client/src/components/overlay/RoutePanel.tsx +++ b/client/src/components/overlay/RoutePanel.tsx @@ -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(() => {