docs: 릴리즈 노트 업데이트 + lint 에러 수정
This commit is contained in:
부모
8b69bea667
커밋
bb7c428528
@ -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 반경)
|
||||
|
||||
불러오는 중...
Reference in New Issue
Block a user