docs: 릴리즈 노트 업데이트 + lint 에러 수정

This commit is contained in:
htlee 2026-03-20 08:44:55 +09:00
부모 8b69bea667
커밋 bb7c428528
5개의 변경된 파일27개의 추가작업 그리고 9개의 파일을 삭제

파일 보기

@ -4,6 +4,23 @@
## [Unreleased]
### 추가
- 중국어선 조업분석: AIS Ship Type 30 + 선박명 패턴 분류, GC-KCG-2026-001/CSSA 기반 안강망 추가
- 중국어선 선단 탐지: 본선-부속선 쌍, 운반선 환적, 선망 선단
- 어구/어망 카테고리 신설 + 모선 연결선 시각화
- 어구 SVG 아이콘 5종 (트롤/자망/안강망/선망/기본)
- 이란 주변국 시설 레이어 (MEFacilityLayer 35개소)
- 사우스파르스 가스전 피격 + 카타르 라스라판 보복 공격 반영
- 한국 해군부대 10개소, 항만, 풍력발전단지, 북한 발사대/미사일 이벤트 레이어
- 정부기관 건물 레이어 (GovBuildingLayer)
- CCTV 프록시 컨트롤러
### 변경
- 레이어 재구성: 선박(최상위) → 항공망 → 해양안전 → 국가기관망
- 오른쪽 패널 접기/펼치기 기능
- 센서차트 기본 숨김
- CCTV 레이어 리팩토링
## [2026-03-19]
### 변경

파일 보기

@ -18,7 +18,7 @@ const TYPE_STYLE: Record<string, { icon: string; label: string; color: string }>
joint: { icon: '⭐', label: '합동기지', color: '#a78bfa' },
};
function MilIcon({ type, size = 16 }: { type: string; size?: number }) {
function _MilIcon({ type, size = 16 }: { type: string; size?: number }) {
const ts = TYPE_STYLE[type] || TYPE_STYLE.army;
return (
<svg width={size} height={size} viewBox="0 0 24 24" fill="none">
@ -34,7 +34,7 @@ export function MilitaryBaseLayer() {
return (
<>
{MILITARY_BASES.map(base => {
const cs = COUNTRY_STYLE[base.country] || COUNTRY_STYLE.CN;
const _cs = COUNTRY_STYLE[base.country] || COUNTRY_STYLE.CN;
const ts = TYPE_STYLE[base.type] || TYPE_STYLE.army;
return (
<Marker key={base.id} longitude={base.lng} latitude={base.lat} anchor="center"

파일 보기

@ -695,14 +695,15 @@ function parseSignalBatchVessel(d: RecentPositionDetailDto): Ship {
// DEBUG: kindCode 분포 집계
if (typeof window !== 'undefined') {
if (!(window as any).__kindCodeMap) (window as any).__kindCodeMap = {};
const km = (window as any).__kindCodeMap;
const w = window as Window & { __kindCodeMap?: Record<string, number>; __kindCodeLogged?: boolean };
if (!w.__kindCodeMap) w.__kindCodeMap = {};
const km = w.__kindCodeMap;
const key = `${kindCode}|${rawShipTy}`;
km[key] = (km[key] || 0) + 1;
if (!(window as any).__kindCodeLogged && Object.keys(km).length > 20) {
(window as any).__kindCodeLogged = true;
if (!w.__kindCodeLogged && Object.keys(km).length > 20) {
w.__kindCodeLogged = true;
console.log('[SHIP DEBUG] kindCode|shipTy distribution:', JSON.stringify(
Object.entries(km).sort((a: any, b: any) => (b[1] as number) - (a[1] as number)).slice(0, 30)
Object.entries(km).sort((a, b) => b[1] - a[1]).slice(0, 30)
));
}
}

파일 보기

@ -45,7 +45,7 @@ export { GEAR_META as GEAR_LABELS };
/**
* ()
*/
const FISHING_ZONES = {
const _FISHING_ZONES = {
I: { name: '수역Ⅰ(동해)', lngMin: 128.86, lngMax: 131.67, latMin: 35.65, latMax: 38.25, allowed: ['PS', 'FC'] },
II: { name: '수역Ⅱ(남해)', lngMin: 126.00, lngMax: 128.89, latMin: 32.18, latMax: 34.34, allowed: ['PT', 'OT', 'GN', 'PS', 'FC'] },
III:{ name: '수역Ⅲ(서남해)', lngMin: 124.01, lngMax: 126.08, latMin: 32.18, latMax: 35.00, allowed: ['PT', 'OT', 'GN', 'PS', 'FC'] },

파일 보기

@ -40,7 +40,7 @@ function distNm(lat1: number, lng1: number, lat2: number, lng2: number): number
export function detectFleet(selectedShip: Ship, allShips: Ship[]): FleetConnection | null {
if (selectedShip.flag !== 'CN') return null;
const mtCat = getMarineTrafficCategory(selectedShip.typecode, selectedShip.category);
const _mtCat = getMarineTrafficCategory(selectedShip.typecode, selectedShip.category);
const members: FleetMember[] = [];
// 주변 중국 선박 탐색 (10NM 반경)