## ENC 베이스맵 (features/encMap/)
- gcnautical 타일 서버 연동 (nautical.json 49개 레이어, 73개 S-52 스프라이트)
- 설정 패널: 12개 레이어 토글, 영역 색상 3종, 수심 색상 5단계
- 배경색 밝기 기반 선박 라벨 색상 자동 전환 (labelColor.ts)
- useMapStyleSettings에 ENC 가드 추가 (스타일 간섭 방지)
- useBaseMapToggle 초기 로드 스킵 (useMapInit과 중복 setStyle 방지)
## 선박 표시 개선
- Globe 원형 halo/outline 제거 — 아이콘 본체만 표시
- Globe 아이콘 스케일 1.3배, 줌아웃 최소 크기 보장 (minzoom 2)
- SDF icon-halo로 테두리 적용 (성능 영향 없음)
- 기타 AIS 투명도 상향 (0.28→0.6 ~ 1.0)
- 선박명 영문 우선 표시 (shipNameRoman > shipNameCn)
## 오버레이 제어 수정
- 연결선/범위/선단 토글 off 시 인터랙티브 오버레이도 비활성
- Globe pair/fc/fleet 레이어: || active 제거 → 토글 우선
- 강조 링/알람 링: shipData→shipLayerData (클러스터링 연동)
## 기본값 변경
- 경고 필터 5개: 초기 false
- 연결선/범위/선단: 초기 false
- 사진 파란 원 아이콘: Globe+Mercator 모두 제거
## 폰트 정리
- Open Sans 폴백 전면 제거 → Noto Sans 단독
- ENC 스타일 fetch 시 text-font 패치
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
기존 대상선박 전용 우클릭 메뉴를 모든 선박 아이콘으로 확장.
선명 복사, MMSI 복사 항목을 상단에 추가하고,
항적조회는 대상선박(isPermitted)에만 조건부 표시.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
다중 항적 조회 모달에서 반복 선택을 줄이기 위해 선박 그룹 관리 기능 추가.
계정별 localStorage 영속화(usePersistedState), 최대 10개 그룹, 동명 덮어쓰기.
그리드 헤더 클릭으로 6개 컬럼 asc/desc 정렬, 푸터에 선택 초기화 버튼 추가.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- 대상 선박 멀티 선택 모달 (features/vesselSelect, widgets/vesselSelect)
· 업종/상태 필터 분리 + 그룹별 전체 on/off
· 드래그 선택 (클릭+드래그로 범위 체크/언체크)
· 기간 프리셋 7/14/21/28일, 최대 조회 28일 제한(초과 시 자동 조정)
· MAX_VESSEL_SELECT=20, MAX_QUERY_DAYS=28
- trackReplay 확장: beginMultiQuery, queryMultiTrack, 다중 CSV 내보내기
- GlobalTrackReplayPanel: 기간 편집/재조회, 선박 목록 on/off 토글
- 경고 브리딩 효과: filled circle → stroked ring
· Globe: zoom-interpolated offset 기반 반경
· Mercator: ScatterplotLayer → IconLayer + SVG ring (깜빡임 해결)
- hideLiveShips 조회 시 기본 체크
- Topbar "다중항적" 버튼 강조 스타일
- 공지사항 id:2 추가
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
gc-wing-simple의 SVG 기반 선종별 아이콘 시스템을 도입하여 기타 AIS 선박을
8종 선종별 색상+형태(이동:화살표/정지:원형)로 구분하고, 대상 선박에는
legacy code 색상 + 브리딩 링 강조 효과를 적용한다.
- shipKind.ts: 선종별 SVG 생성기 + 아이콘 스펙 사전 생성
- Mercator: 기타 AIS 20px SVG IconLayer, 대상 선박 26px SVG IconLayer
- Globe: signalKindCode 기반 색상, 대상 선박 1.3x 크기
- 브리딩 rAF: 시안(선택)/주황(강조) 링, 2000ms 주기
- 범례: "기타 AIS(선종)" 7항목으로 변경
- shipIconCache.ts, SHIP_ICON_MAPPING 삭제
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- features/announcement/ 자체 완결 블록 (타입, 상수, 훅, 모달 UI)
- useAnnouncementPopup: lastSeenAnnouncementId 기반 계정별 1회 표시
- AnnouncementModal: 업데이트 안내 (Ocean 맵/자유시점/선박사진)
- Ocean DEFAULT_OCEAN_MAP_SETTINGS: depthStops 빈 배열 (네이티브 색상 유지)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
MapTiler Ocean 완전 스타일 기반 별도 베이스맵 모드.
features/oceanMap/ 자체 완결 블록 — 기존 enhanced 코드 변경 없음.
- resolveOceanStyle: Ocean style.json fetch + 한국어 라벨
- useOceanMapSettings: 런타임 커스텀 (수심색상/등심선/hillshade/라벨)
- OceanMapSettingsPanel: 9개 섹션 설정 UI
- 사이드바 Ocean 토글 + 설정 패널 baseMap 분기
- resolveMapStyle dynamic import로 번들 분리
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- AIS 타겟에 shipImagePath/shipImageCount 필드 추가
- 선박 이미지 API 연동 (fetchShipImagesByImo)
- 지도 위 사진 인디케이터 (ScatterplotLayer)
- 호버 툴팁에 썸네일 표시
- 정보 패널 카드 갤러리 (스크롤+화살표)
- 고화질 이미지 모달 (initialIndex 지원)
- Vite 프록시 /shipimg 추가
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- shipData를 ref로 관리하여 AIS poll마다 effect 재실행 방지
- isStyleLoaded 가드 제거 → try/catch로 즉시 실행
- duration 700→400ms로 단축
- selectedMmsi만 의존성으로 → 선택 시 1회만 fly-to 실행
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- mapInitiatedSelectRef 도입: 지도 클릭 선택과 패널 선택을 구분
- 좌측 패널(선박 목록, 알람 목록) 선택 시 해당 위치로 fly-to
- 지도에서 직접 클릭/우클릭 선택 시에는 fly-to 비활성화
- onMapSelectMmsi 래퍼로 지도 내 선택 경로 통합 (Globe+Mercator)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Part A — 오버레이 라인 가시성:
- Globe/Mercator 쌍끌이·FC·선단 라인 굵기 ~2x 증가
- Globe 범위 원·선단 원 대시 패턴 추가
- Globe 오버레이 호버 시 브리딩(breathing) 맥동 rAF
Part B — 경고 선박 강조:
- DashboardPage → Map3D alarmMmsiMap 전달
- Globe: 경고 맥동 레이어(ships-globe-alarm-pulse) + 배지(ships-globe-alarm-badge)
- Mercator: Deck.gl ScatterplotLayer 맥동 + TextLayer 배지
- 경고 종류별 배지(이/수/환/휴/A), z-index 상향, 호버 스케일 확대
- 경고 필터 OFF 시 맥동/배지 자동 비표시
Part C — Mercator 선명 라벨:
- MapLibre 라벨 → Deck.gl TextLayer 교체 (z-order 안정)
Part D — 프로젝션 전환 안정화:
- Globe→Mercator 전환 시 Globe custom layer 맵에서 분리
- alarm rAF에 projectionBusyRef 가드 추가
- overlay.setProps() stale WebGL 자원 참조 방지
Part E — 김개발(DEV) 모드 더미 데이터:
- mockOverlayData.ts: 서해 12척 가상 선박 (5종 경고 시나리오)
- 김개발 로그인 시 자동 주입, 일반 계정 미노출
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>