diff --git a/client/src/components/overlay/RoutePanel.tsx b/client/src/components/overlay/RoutePanel.tsx index e338bd4..d34836d 100644 --- a/client/src/components/overlay/RoutePanel.tsx +++ b/client/src/components/overlay/RoutePanel.tsx @@ -225,6 +225,14 @@ export default function RoutePanel({ currentTime, visible, onSeek }: RoutePanelP const maxKm = Math.max(...allKms); const kmToY = (km: number) => (1 - (km - minKm) / (maxKm - minKm)) * 100; + // 시점/종점 측점 + const sortedByKm = [...validStations].sort((a, b) => stationKm(a.title) - stationKm(b.title)); + const startStation = sortedByKm[0]; + const endStation = sortedByKm[sortedByKm.length - 1]; + + // 교량/터널만 표시 + const filteredPois = pois.filter(p => p.category === '\uD130\uB110' || p.category === '\uAD50\uB7C9'); + return (
{/* Center vertical line */}
- {/* Stations */} - {validStations.map((st, i) => { - const km = stationKm(st.title); - if (km < 0) return null; - return ( -
-
- {st.title} -
-
-
-
-
- ); - })} + {/* 시점 label — top */} +
+
+ {startStation.title} +
+
+
+
+
시점
+
- {/* POIs */} - {pois.map((poi, i) => { + {/* 종점 label — bottom */} +
+
+ {endStation.title} +
+
+
+
+
종점
+
+ + {/* 교량/터널 POIs */} + {filteredPois.map((poi, i) => { const km = poiKm(poi, validStations); if (km < 0) return null; + const y = kmToY(km); + if (y < 5 || y > 95) return null; // 시점/종점 영역과 겹치지 않게 return (
-
- {CATEGORY_EMOJI[poi.category] || '\uD83D\uDCCD'} -
-
-
+
+
{poi.title}