Wing Fleet Dashboard
Go to file
htlee d0f67ae803 feat(encMap): gcnautical 타일 서버 기반 ENC 전자해도 + UI 개선
## 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>
2026-03-25 14:19:28 +09:00
.claude chore: 팀 워크플로우 v1.6.1 동기화 2026-03-18 13:46:05 +09:00
.gitea/workflows feat(auth): Google OAuth 로그인 구현 2026-02-16 08:44:25 +09:00
.githooks chore: 팀 워크플로우 v1.6.1 동기화 + 관리 파일 .gitignore 전환 2026-03-08 13:19:56 +09:00
apps feat(encMap): gcnautical 타일 서버 기반 ENC 전자해도 + UI 개선 2026-03-25 14:19:28 +09:00
data/raw/zones chore: initial commit 2026-02-15 11:22:38 +09:00
docs docs: 릴리즈 노트 정리 (2026-03-18) 2026-03-18 13:56:42 +09:00
legacy chore: initial commit 2026-02-15 11:22:38 +09:00
packages/ui fix(sidebar): 검색 복원, 경고 필터, 내부 스크롤 수정 (#25) 2026-02-17 08:12:14 +09:00
scripts feat(vesselSelect): 다중 선박 항적 조회 + 경고 링 개선 2026-03-08 12:54:20 +09:00
.editorconfig chore: 팀 프로젝트 워크플로우 세팅 2026-02-15 22:18:40 +09:00
.gitignore chore: 팀 워크플로우 v1.6.1 동기화 + 관리 파일 .gitignore 전환 2026-03-08 13:19:56 +09:00
.node-version chore: 팀 프로젝트 워크플로우 세팅 2026-02-15 22:18:40 +09:00
.npmrc chore: 팀 프로젝트 워크플로우 세팅 2026-02-15 22:18:40 +09:00
.prettierrc chore: 팀 프로젝트 워크플로우 세팅 2026-02-15 22:18:40 +09:00
CLAUDE.md docs: CLAUDE.md 최신 구조 반영 2026-02-16 16:24:52 +09:00
package-lock.json chore: Tailwind CSS v4 + @wing/ui 패키지 인프라 구축 2026-02-17 06:10:04 +09:00
package.json chore: Tailwind CSS v4 + @wing/ui 패키지 인프라 구축 2026-02-17 06:10:04 +09:00
README.md chore: initial commit 2026-02-15 11:22:38 +09:00

WING Fleet Dashboard (Prototype to Project)

This repo started as a single HTML prototype and is being refactored into a structured React + TypeScript project.

Layout

  • legacy/: original single-file HTML prototype (reference)
  • data/raw/zones/: raw GeoJSON zone polygons as received
  • apps/web/: React + TS frontend (MapLibre GL JS + Deck.gl, single WebGL context)
  • apps/api/: optional API server (proxy/stub)
  • scripts/: data preparation scripts (e.g. zone reprojection)

What Works Now (GIS Demo)

  • Live AIS polling (initial 10 minutes, then every 1 minute / last 2 minutes incremental) with MMSI upsert store:
    • frontend hook: apps/web/src/features/aisPolling/useAisTargetPolling.ts
    • API proxy (CORS safe): apps/api/src/index.ts (GET /api/ais-target/search?minutes=...&bbox=...)
  • MapLibre basemap:
    • default (no MapTiler key): local raster style + OpenSeaMap seamark overlay: apps/web/public/map/styles/osm-seamark.json
    • optional (recommended): MapTiler dataviz-dark + Ocean (bathymetry) vector overlays, plus OpenSeaMap seamark raster overlay
  • Deck.gl layers rendered into MapLibre WebGL context (single context via MapboxOverlay):
    • ships IconLayer, zones GeoJsonLayer, optional 3D density HexagonLayer
    • map widget: apps/web/src/widgets/map3d/Map3D.tsx
  • Zone polygons converted to WGS84 GeoJSON:
    • input: data/raw/zones/*.json
    • build: pnpm prepare:data -> apps/web/public/data/zones/zones.wgs84.geojson
  • Legacy CN-permit overlay (name/callsign/mmsi match; ring + color by 업종):
    • legacy sources: legacy/*.xlsx, legacy/*.jsx
    • build: pnpm prepare:data -> apps/web/public/data/legacy/chinese-permitted.v1.json

Quick Start

  1. pnpm install
  2. pnpm prepare:data
  3. pnpm dev:web
  4. (optional) pnpm dev:api # only needed when you start adding DB-backed/local APIs

API server (optional): pnpm dev:api (defaults to http://127.0.0.1:5174)

Ports (dev):

  • Web (Vite): http://127.0.0.1:5175 (default, strict). Change via WEB_PORT=....
  • API (Fastify): http://127.0.0.1:5174 (default). Change via PORT=.... and match API_PORT=.... for the web proxy.

Vite proxy (dev):

  • /snp-api/* -> http://211.208.115.83:8041 (override via VITE_SNP_API_TARGET=...)

MapTiler (Optional, Bathymetry Vector Map)

To enable a dark-mode basemap + bathymetry (MapTiler Ocean tiles):

  1. Create a free MapTiler Cloud account and get an API key
  2. Set env vars for the web app:
# enables MapTiler style + ocean bathymetry layers in MapLibre
VITE_MAPTILER_KEY="YOUR_KEY"

# optional: change basemap style id (default: dataviz-dark)
VITE_MAPTILER_BASE_MAP_ID="dataviz-dark"