Merge pull request 'release: 점수표시 + 마커위치 + 클러스터 수정' (#121) from develop into main
All checks were successful
Deploy KCG / deploy (push) Successful in 1m50s

This commit is contained in:
htlee 2026-03-20 16:19:56 +09:00
커밋 15b68bb634
3개의 변경된 파일20개의 추가작업 그리고 16개의 파일을 삭제

파일 보기

@ -320,7 +320,7 @@ export function AnalysisStatsPanel({ stats, lastUpdated, isLoading, analysisMap,
{item.mmsi} {item.mmsi}
</span> </span>
<span style={{ color, fontWeight: 700, fontSize: 10, flexShrink: 0 }}> <span style={{ color, fontWeight: 700, fontSize: 10, flexShrink: 0 }}>
{Math.round(item.score * 100)} {item.score}
</span> </span>
<span style={{ color: '#94a3b8', fontSize: 9, flexShrink: 0 }}></span> <span style={{ color: '#94a3b8', fontSize: 9, flexShrink: 0 }}></span>
</div> </div>

파일 보기

@ -240,20 +240,24 @@ export function KoreaMap({ ships, allShips, aircraft, satellites, layers, osintF
return classifyFishingZone(s.lat, s.lng).zone !== 'OUTSIDE'; return classifyFishingZone(s.lat, s.lng).zone !== 'OUTSIDE';
}).slice(0, 200).map(s => ( }).slice(0, 200).map(s => (
<Marker key={`illegal-${s.mmsi}`} longitude={s.lng} latitude={s.lat} anchor="center"> <Marker key={`illegal-${s.mmsi}`} longitude={s.lng} latitude={s.lat} anchor="center">
<div style={{ <div style={{ position: 'relative', pointerEvents: 'none' }}>
width: 20, height: 20, borderRadius: '50%', {/* 강조 펄스 링 — 선박 아이콘 중앙에 오버레이 */}
border: '2px solid #ef4444', <div style={{
backgroundColor: 'rgba(239, 68, 68, 0.2)', width: 24, height: 24, borderRadius: '50%',
animation: 'pulse 2s infinite', border: '2px solid #ef4444',
pointerEvents: 'none', backgroundColor: 'rgba(239, 68, 68, 0.15)',
}} /> animation: 'pulse 2s infinite',
<div style={{ boxShadow: '0 0 8px rgba(239, 68, 68, 0.4)',
fontSize: 8, fontWeight: 700, color: '#ef4444', }} />
textShadow: '0 0 2px #000, 0 0 2px #000', {/* 선박명 — 아이콘 아래 */}
textAlign: 'center', marginTop: -2, <div style={{
whiteSpace: 'nowrap', pointerEvents: 'none', position: 'absolute', top: 26, left: '50%', transform: 'translateX(-50%)',
}}> fontSize: 8, fontWeight: 700, color: '#ef4444',
{s.name || s.mmsi} textShadow: '0 0 2px #000, 0 0 2px #000',
whiteSpace: 'nowrap',
}}>
{s.name || s.mmsi}
</div>
</div> </div>
</Marker> </Marker>
))} ))}

파일 보기

@ -10,7 +10,7 @@ logger = logging.getLogger(__name__)
def detect_group_clusters( def detect_group_clusters(
vessel_snapshots: list[dict], vessel_snapshots: list[dict],
spatial_eps_nm: float = 10.0, spatial_eps_nm: float = 3.0,
time_eps_hours: float = 2.0, time_eps_hours: float = 2.0,
min_vessels: int = 3, min_vessels: int = 3,
) -> dict[int, list[dict]]: ) -> dict[int, list[dict]]: