{/* 드로잉 모드 안내 */}
{isDrawingBoom && (
오일펜스 배치 모드 — 지도를 클릭하여 포인트를 추가하세요 ({drawingPoints.length}개 포인트)
)}
{drawAnalysisMode === 'polygon' && (
다각형 분석 모드 — 지도를 클릭하여 꼭짓점을 추가하세요 ({analysisPolygonPoints.length}개)
)}
{drawAnalysisMode === 'circle' && (
{!analysisCircleCenter ? '원 분석 모드 — 중심점을 클릭하세요' : '반경 지점을 클릭하세요'}
)}
{measureMode === 'distance' && (
거리 재기 — {measureInProgress.length === 0 ? '시작점을 클릭하세요' : '끝점을 클릭하세요'}
)}
{measureMode === 'area' && (
면적 재기 — 꼭짓점을 클릭하세요 ({measureInProgress.length}개){measureInProgress.length >= 3 && ' → 첫 번째 점 근처를 클릭하면 닫힙니다'}
)}
{/* 기상청 연계 정보 */}
{showOverlays &&
}
{/* 범례 */}
{showOverlays &&
}
{/* 좌표 표시 */}
{showOverlays &&
}
{/* 타임라인 컨트롤 (외부 제어 모드에서는 숨김 — 하단 플레이어가 대신 담당) */}
{!isControlled && oilTrajectory.length > 0 && (
p.time))}
isPlaying={isPlaying}
playbackSpeed={playbackSpeed}
onTimeChange={setInternalCurrentTime}
onPlayPause={() => setIsPlaying(!isPlaying)}
onSpeedChange={setPlaybackSpeed}
/>
)}
{/* 역추적 리플레이 바 */}
{backtrackReplay?.isActive && (
)}
)
}
// 지도 컨트롤 (줌, 위치 초기화)
function MapControls({ center, zoom }: { center: [number, number]; zoom: number }) {
const { current: map } = useMap()
return (
)
}
// 지도 범례
interface MapLegendProps {
dispersionResult?: DispersionResult | null
incidentCoord?: { lon: number; lat: number }
oilTrajectory?: Array<{ lat: number; lon: number; time: number }>
boomLines?: BoomLine[]
selectedModels?: Set