From e8187b3a6c6c42100dd9c75ac331e992b0b2b388 Mon Sep 17 00:00:00 2001 From: htlee Date: Tue, 31 Mar 2026 09:44:15 +0900 Subject: [PATCH] =?UTF-8?q?fix:=20=ED=86=A0=EA=B8=80=20=ED=8C=A8=EB=84=90?= =?UTF-8?q?=20=EC=9C=84=EC=B9=98=20=EC=9E=AC=EC=83=9D=20=EC=BB=A8=ED=8A=B8?= =?UTF-8?q?=EB=A1=A4=EB=9F=AC=20=EC=A0=95=EB=A0=AC=20+=20=EC=9D=BC?= =?UTF-8?q?=EC=B9=98=EC=9C=A8=20=ED=95=84=ED=84=B0=20=EC=A0=84=EC=97=AD=20?= =?UTF-8?q?=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 패널 위치: - left: 10 → left: calc(50% - 210px) (재생 컨트롤러 중앙 정렬 근처) 일치율 드롭다운 전역 적용: - 기존: 현재 ON인 모델의 대상만 필터 - 수정: 모든 모델의 모든 대상에 전역 적용 (모델 on/off 무관) - 동일 MMSI가 여러 모델에 있을 때 최고 score 기준 판단 Co-Authored-By: Claude Opus 4.6 (1M context) --- frontend/src/components/korea/CorrelationPanel.tsx | 4 ++-- frontend/src/components/korea/FleetClusterLayer.tsx | 11 ++++++++--- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/frontend/src/components/korea/CorrelationPanel.tsx b/frontend/src/components/korea/CorrelationPanel.tsx index de2d050..6d1b5ee 100644 --- a/frontend/src/components/korea/CorrelationPanel.tsx +++ b/frontend/src/components/korea/CorrelationPanel.tsx @@ -203,7 +203,7 @@ const CorrelationPanel = ({
diff --git a/frontend/src/components/korea/FleetClusterLayer.tsx b/frontend/src/components/korea/FleetClusterLayer.tsx index f87590a..2ec108d 100644 --- a/frontend/src/components/korea/FleetClusterLayer.tsx +++ b/frontend/src/components/korea/FleetClusterLayer.tsx @@ -469,15 +469,20 @@ export function FleetClusterLayer({ ships, analysisMap: analysisMapProp, onShipS { + // 전역: 모든 모델의 모든 대상에 적용 (모델 on/off 무관) if (minPct === null) { - // 전체: 모든 연관 선박 ON setEnabledVessels(new Set(correlationTracks.map(v => v.mmsi))); } else { - // 해당 퍼센트 이상만 ON const threshold = minPct / 100; const filtered = new Set(); + // correlationData에서 모든 모델의 모든 대상 중 최고 score 기준 + const maxScores = new Map(); for (const c of correlationData) { - if (c.score >= threshold) filtered.add(c.targetMmsi); + const prev = maxScores.get(c.targetMmsi) ?? 0; + if (c.score > prev) maxScores.set(c.targetMmsi, c.score); + } + for (const [mmsi, score] of maxScores) { + if (score >= threshold) filtered.add(mmsi); } setEnabledVessels(filtered); }