diff --git a/frontend/src/components/korea/KoreaMap.tsx b/frontend/src/components/korea/KoreaMap.tsx index 844990d..ac3db2e 100644 --- a/frontend/src/components/korea/KoreaMap.tsx +++ b/frontend/src/components/korea/KoreaMap.tsx @@ -189,7 +189,8 @@ export function KoreaMap({ ships, allShips, aircraft, satellites, layers, osintF ); }, []); - // 줌 레벨별 아이콘/심볼 스케일 배율 — z4=1.0x 기준, 2단계씩 상향 + const anyKoreaFilterOn = koreaFilters.illegalFishing || koreaFilters.illegalTransship || koreaFilters.darkVessel || koreaFilters.cableWatch || koreaFilters.dokdoWatch || koreaFilters.ferryWatch; + // 줌 레벨별 아이콘/심볼 스케일 배율 — z4=0.8x, z6=1.0x 시작, 2단계씩 상향 const zoomScale = useMemo(() => { if (zoomLevel <= 4) return 0.8; @@ -568,7 +569,13 @@ export function KoreaMap({ ships, allShips, aircraft, satellites, layers, osintF /> - {layers.ships && } + {layers.ships && } {/* Transship suspect labels — Marker DOM, inline styles kept for dynamic border color */} {transshipSuspects.size > 0 && ships.filter(s => transshipSuspects.has(s.mmsi)).map(s => ( @@ -671,14 +678,29 @@ export function KoreaMap({ ships, allShips, aircraft, satellites, layers, osintF {layers.osint && } {layers.eez && } - {/* Filter Status Banner */} + {/* Filter Status Banner — 필터별 개별 탐지 카운트 */} {(() => { const active = (Object.keys(koreaFilters) as (keyof KoreaFiltersState)[]).filter(k => koreaFilters[k]); if (active.length === 0) return null; + const filterCount: Record = { + illegalFishing: (allShips ?? ships).filter(s => { + if (s.mtCategory !== 'fishing' || s.flag === 'KR') return false; + return classifyFishingZone(s.lat, s.lng).zone !== 'OUTSIDE'; + }).length, + illegalTransship: transshipSuspects.size, + darkVessel: ships.filter(s => { + const dto = vesselAnalysis?.analysisMap.get(s.mmsi); + return dto?.algorithms.darkVessel.isDark || (s.lastSeen && currentTime - s.lastSeen > 3600000); + }).length, + cableWatch: cableWatchSuspects.size, + dokdoWatch: dokdoWatchSuspects.size, + ferryWatch: (allShips ?? ships).filter(s => s.mtCategory === 'passenger').length, + }; return ( {active.map(k => { const color = FILTER_COLOR[k]; + const count = filterCount[k] ?? 0; return ( {FILTER_ICON[k]} {t(FILTER_I18N_KEY[k])} + {count}척 ); })} - - {t('korea.detected', { count: ships.length })} - ); })()}