fix: 토글 패널 위치 재생 컨트롤러 정렬 + 일치율 필터 전역 적용
패널 위치: - left: 10 → left: calc(50% - 210px) (재생 컨트롤러 중앙 정렬 근처) 일치율 드롭다운 전역 적용: - 기존: 현재 ON인 모델의 대상만 필터 - 수정: 모든 모델의 모든 대상에 전역 적용 (모델 on/off 무관) - 동일 MMSI가 여러 모델에 있을 때 최고 score 기준 판단 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
부모
6789f82e3b
커밋
e8187b3a6c
@ -203,7 +203,7 @@ const CorrelationPanel = ({
|
|||||||
<div style={{
|
<div style={{
|
||||||
position: 'absolute',
|
position: 'absolute',
|
||||||
bottom: historyActive ? 100 : 20,
|
bottom: historyActive ? 100 : 20,
|
||||||
left: 10,
|
left: 'calc(50% - 210px)',
|
||||||
display: 'flex',
|
display: 'flex',
|
||||||
gap: 6,
|
gap: 6,
|
||||||
alignItems: 'flex-start',
|
alignItems: 'flex-start',
|
||||||
@ -212,7 +212,7 @@ const CorrelationPanel = ({
|
|||||||
fontSize: 10,
|
fontSize: 10,
|
||||||
color: '#e2e8f0',
|
color: '#e2e8f0',
|
||||||
pointerEvents: 'auto',
|
pointerEvents: 'auto',
|
||||||
maxWidth: 'calc(100vw - 340px)',
|
maxWidth: 'calc(100vw - 40px)',
|
||||||
overflowX: 'auto',
|
overflowX: 'auto',
|
||||||
overflowY: 'visible',
|
overflowY: 'visible',
|
||||||
}}>
|
}}>
|
||||||
|
|||||||
@ -469,15 +469,20 @@ export function FleetClusterLayer({ ships, analysisMap: analysisMapProp, onShipS
|
|||||||
<HistoryReplayController
|
<HistoryReplayController
|
||||||
onClose={closeHistory}
|
onClose={closeHistory}
|
||||||
onFilterByScore={(minPct) => {
|
onFilterByScore={(minPct) => {
|
||||||
|
// 전역: 모든 모델의 모든 대상에 적용 (모델 on/off 무관)
|
||||||
if (minPct === null) {
|
if (minPct === null) {
|
||||||
// 전체: 모든 연관 선박 ON
|
|
||||||
setEnabledVessels(new Set(correlationTracks.map(v => v.mmsi)));
|
setEnabledVessels(new Set(correlationTracks.map(v => v.mmsi)));
|
||||||
} else {
|
} else {
|
||||||
// 해당 퍼센트 이상만 ON
|
|
||||||
const threshold = minPct / 100;
|
const threshold = minPct / 100;
|
||||||
const filtered = new Set<string>();
|
const filtered = new Set<string>();
|
||||||
|
// correlationData에서 모든 모델의 모든 대상 중 최고 score 기준
|
||||||
|
const maxScores = new Map<string, number>();
|
||||||
for (const c of correlationData) {
|
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);
|
setEnabledVessels(filtered);
|
||||||
}
|
}
|
||||||
|
|||||||
불러오는 중...
Reference in New Issue
Block a user