- ShipLayer: buildFleetGroups() 제거 → Python analysisMap cluster_id 기반
- 선박 클릭 시 같은 cluster_id 멤버만 연결선 표시
- AnalysisOverlay: 보라색 100NM+ 클러스터 연결선 제거
- 프론트엔드 전체 순회 제거로 성능 복원
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- buildFleetGroups(): BFS 3NM 클러스터링으로 전체 중국어선 사전 그룹핑
- mmsi → groupId 맵으로 어느 멤버를 눌러도 같은 그룹 표시
- 그룹별 유형 자동 판별 (trawl_pair/purse_seine/transship/cluster)
- ShipLayer: detectFleet → buildFleetGroups 기반으로 전환
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- 위험도 버튼 클릭 → 해당 레벨 선박 목록 펼침 (최대 50척)
- 선박 행 클릭 → 지도 중심이동(flyTo) + 근거 상세 펼침
- 근거: 위치/활동/다크/GPS/선단 정보 표시
- 선택 선박 항적: trail 데이터를 GeoJSON LineString으로 렌더링
- KoreaMap flyTo 기능 구현 (mapRef.flyTo)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- KoreaMap에 allShips(전체 라이브 선박) prop 추가
- AnalysisOverlay: allShips 기반으로 분석 대상 매칭 (필터링 무관)
- 불법어선 마커: allShips에서 라이브 위치 참조 (위치 갭 해소)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- 불법어선 필터: classifyFishingZone으로 수역 내 비한국 어선만 판별
- 수역 내 어선에 빨간 강조 링+선박명 마커 표시
- AI 분석 패널: 데이터 유무 무관하게 항상 표시
- Backend: analyzed_at 기준 1시간 윈도우로 확대 (10분 → 1시간)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- WGS84 사전 변환 GeoJSON 생성 (런타임 변환 제거)
- FishingZoneLayer: 수역별 색상 fill/line + 이름 라벨
- AnalysisOverlay: 마커 크기 확대, 한글 라벨, 선박명 표시
- fishingAnalysis.ts: EPSG:3857 변환 로직 제거, WGS84 JSON 직접 사용
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- gearLinks: 부분 매칭(startsWith) 제거 → 정확 이름 매칭만
- gearLinks: 거리 제한 0.15도(~10NM) 추가 — 원거리 연결선 차단
- gearLinks: 최대 200개 제한
- operating 마커: 최대 100척
- 역할 라벨: 일반 어선(FV) 제외, 본선/부속/운반만 최대 100개
- parentName 최소 3글자 이상만 매칭
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- 국적 분류 필터 추가 (한국/중국/북한/일본/미분류)
- S&P Global / MarineTraffic 탭 디자인 개선
- CCTV 백엔드 프록시 연결 (CctvProxyController)
- 풍력단지 레이어 (8개소 해상풍력)
- 항구 레이어 (한국/중국/일본/북한/대만 46개)
- 공항 확장 (중국 20, 일본 18, 북한 5, 대만 9개 추가)
- 군사시설 레이어 (중국/일본/북한/대만 38개소)
- 정부기관 레이어 (중국/일본 32개소)
- 북한 발사/포병진지 레이어 (19개소)
- 북한 미사일 낙하 시각화 (2026년 4건, 궤적 라인, 인근 선박 감지)
- 항행정보/팝업 공통 스타일 정리
- 선박 현황 정렬 스타일 개선
- 레이어 패널 폰트 축소
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- getMarineTrafficCategory: VesselType 문자열 매칭을 STAT5CODE 접두사보다 우선 적용
- STAT5CODE 매칭: 2번째 문자가 숫자인 경우만 적용 ("Cargo" → fishing 오분류 방지)
- EventLog 로컬 getShipMTCategory 제거 → 공통 getMarineTrafficCategory 통합
- EventLog 배지 색상: 하드코딩 hex → CSS 변수 (LayerPanel/ShipLayer와 동일)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- SensorChart: 히스토리 1H/2H/3H/6H, 기압 SLP 보정, 데이터 범위 확장(y축 시작)
- SensorChart Tooltip: KST 시간 포맷, 위치 상단 고정, 스타일 통일
- 지진 포인트 클릭 → 지도 flyTo + SeismicMarker 진도별 펄스 원형 표시
- SatelliteMap flyTo 지원 추가
- OilFacilityLayer: planned ring SVG 내부로 이동 (아이콘 중심 정렬 수정)
- 밝은 테마 text-shadow CSS 변수 분리 (dark/light)
- deploy.yml: SSH SCP+실행 각 3회 재시도 (kex_exchange 거부 대응)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- SensorChart: 지진 ScatterChart(진도별 색상/크기) + 기압 관측소별 개별 라인
- 한국 선박 현황 ON/OFF 토글 → 지도 강조 링/라벨 표시 (기본 ON)
- 우측 패널 한국 선박 목록: hover 시 지도 강조 링, 클릭 시 모달 호출
- ShipLayer: hoveredMmsi/focusMmsi props, 외부 모달 트리거
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- ShipLayer: IMO 기반 /signal-batch/api/v1/shipimg/{imo} API로 실제 이미지 목록 조회
- 각 이미지 path + _2.jpg(원본) 사용 (기존 잘못된 _1→_2→_3 번호 패턴 제거)
- IMO별 이미지 목록 캐시(spgImageCache) 적용
- LoginPage: KCG 로고 우측 하단에 DEMO 문구 오버레이
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- OSINT: GDELT + Google News RSS 수집기 (@Scheduled 2분)
- Satellite: CelesTrak TLE 수집기 (@Scheduled 10분)
- Caffeine 캐시 TTL 2일 (Aircraft 포함 전체 통일)
- 프론트: 백엔드 API 우선 호출 + CelesTrak/GDELT fallback
- frontend/ 폴더로 프론트엔드 전체 이관
- signal-batch API 연동 (한국 선박 위치 데이터)
- Tailwind CSS 4 + CSS 변수 테마 토큰 (dark/light)
- i18next 다국어 (ko/en) 인프라 + 28개 컴포넌트 적용
- 레이어 패널 트리 구조 재설계 (카테고리별 온/오프, 범례)
- Google OAuth 로그인 화면 + DEV LOGIN 우회
- 외부 API CORS 프록시 전환 (Airplanes.live, OpenSky, CelesTrak)
- ShipLayer 이미지 탭 전환 (signal-batch / MarineTraffic)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>