커밋 그래프

180 커밋

작성자 SHA1 메시지 날짜
3fd5537553 feat: 예측 실행 이력 선택, 보고서 기능 개선, 수치예측자료 모니터링 추가
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-25 15:35:43 +09:00
5f84d5f11e feat(design): Components 탭 추가 (Button, TextField, Overview 페이지) 2026-03-25 14:43:58 +09:00
7a80eaf75e feat(admin): 수거인력 패널 및 선박모니터링 패널 추가 2026-03-25 11:02:23 +09:00
e4cd57a56d Merge pull request 'feat: 방제선 보유자재 패널 추가, 방제장비 필터 개선, 보고서 민감자원 지도 개선' (#116) from feature/layer-data-table-mapping into develop 2026-03-24 18:46:12 +09:00
932c8eca3f feat(관리자): 방제선 보유자재 패널 추가 + 방제장비 필터 개선 + 보고서 민감자원 지도 개선 2026-03-24 18:43:40 +09:00
a3b1a701e4 Merge remote-tracking branch 'origin/develop' into feature/stitch-mcp
# Conflicts:
#	docs/RELEASE-NOTES.md
2026-03-24 17:49:48 +09:00
50945c9049 feat: 유류유출 보고서 템플릿 개선 + 예측 API 확장 + 실시간 모니터링 패널 추가
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-24 16:56:03 +09:00
d0491c3f0f feat(design): Stitch MCP 기반 디자인 시스템 카탈로그 + SCAT 하드코딩 해안선 제거
- react-router-dom 도입, /design 경로에 디자인 토큰/컴포넌트 카탈로그 페이지 추가
- SCAT 지도에서 하드코딩된 제주 해안선 좌표 제거, 인접 구간 기반 동적 방향 계산으로 전환
- @/ path alias 추가, SVG 아이콘 에셋 추가
2026-03-24 16:36:50 +09:00
e06287ba5b feat: 기상 스냅샷 자동 저장 + 민감자원 DB 마이그레이션 + 분석 API 예측 서비스 통합 2026-03-23 19:08:27 +09:00
JHKANG9140
aefd38b3bc feat(레이어): 레이어 데이터 테이블 매핑 구현 및 어장 팝업 수정 2026-03-22 12:36:31 +09:00
c3bb23f919 Merge remote-tracking branch 'origin/develop' into feature/report 2026-03-20 17:13:39 +09:00
7a1eb80627 feat(reports): 보고서 기능 강화 및 관리자 권한 트리 확장 2026-03-20 17:12:29 +09:00
e4fa46db81 refactor(scat): prediction/scat 파이프라인 제거 + UI 수정
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-20 15:15:02 +09:00
2b48acf2ae chore: develop 머지 충돌 해결 2026-03-20 10:33:27 +09:00
9881b99ee7 feat(scat): Pre-SCAT 해안조사 UI 개선 + WeatherRightPanel 정리
SCAT 좌측패널 리팩토링, 해안조사 뷰 기능 보강, 기상 우측패널 중복 코드 제거

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-20 10:22:20 +09:00
e32c630da5 chore(weather): feature/cctv-hns-enhancements 머지 충돌 해결
WeatherRightPanel.tsx 충돌을 HEAD(feature/report) 기준으로 해결:
- WindCompass/ProgressBar/StatCard 재사용 컴포넌트 유지
- w-[380px] 너비 및 여유 패딩(px-5) 유지
- astronomy/alert props 기반 동적 데이터 유지

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-19 14:35:31 +09:00
9c44ab4ffa Merge branch 'origin/develop' into feature/report
충돌 해결:
- TopBar.tsx: mapTypes(feature/report) + measureMode/setMeasureMode(develop) 병합
- mapStore.ts: loadMapTypes API(feature/report) + 측정 기능(develop) 병합
2026-03-19 14:19:39 +09:00
f336f6b93a feat(admin): 지도 베이스 관리 패널, 레이어 패널 추가 및 보고서 기능 개선 2026-03-19 14:13:05 +09:00
5865734b15 Merge remote-tracking branch 'origin/feature/cctv-hns-enhancements' into feature/pre-scat-develop 2026-03-19 13:53:55 +09:00
94b162aa2a Merge pull request 'feat: 거리·면적 측정 + SCAT 관할서 필터링 + 해안조사 파이프라인' (#100) from feature/draw-util into develop 2026-03-19 13:19:00 +09:00
ef2ef8a542 refactor(scat): SCAT 사진을 로컬에서 서버 프록시로 전환
- scat-photos 로컬 이미지 1,127개 삭제
- ScatPopup 이미지 경로 원복 (segCode 기반)
- vite proxy 대상을 wing-demo.gc-si.dev로 변경

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 11:31:33 +09:00
d9fb4506bc feat(scat): Pre-SCAT 관할서 필터링 + 해안조사 데이터 파이프라인 구축
- 백엔드: 관할서 목록 API, zone 필터링 쿼리 추가
- 프론트: ScatLeftPanel 관할서 드롭다운, ScatMap/ScatPopup 개선
- 기상탭: WeatherRightPanel 리팩토링
- prediction/scat: PDF 파싱 → 지오코딩 → ESI 매핑 파이프라인
- vite.config: proxy 설정 추가

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 10:53:19 +09:00
Nan Kyung Lee
0cf3ff1ea0 style(weather): 기상 레이어 체크박스 및 패널 사이즈 축소
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 10:53:09 +09:00
Nan Kyung Lee
7949b96866 feat(incidents): UI 개선 + 오염물 배출규정 기능 추가
- prediction: 커스텀 다크 캘린더/시간 드롭다운, DMS 좌표 입력, 모델 버튼 3열 배치
- incidents: 밝은 지도 테마, 해양환경관리법 제22조 기반 오염물 배출규정 기능
  - 지도 클릭시 영해기선 거리별 배출 가능 여부 표시 (OSM 실측 좌표 기반)
  - 3해리/12해리/25해리 경계선 표시
- weather: 기상 범례 사이즈 축소 + 폰트 축소
- map: 풍속/파고/수온/해류 패널 축소·투명화, 확대/축소 버튼 축소, 좌표 중앙 배치
- map: 범례 기본 접힌 상태

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 10:43:21 +09:00
Nan Kyung Lee
6bea387ee2 Merge remote-tracking branch 'origin/develop' into feature/cctv-hns-enhancements 2026-03-19 08:42:49 +09:00
621d8e3516 feat: 예측 개선, 관리자 패널 추가, 보고서 기능 개선 2026-03-18 18:10:41 +09:00
c7c7537dbb feat(prediction): trajectory API에 모델별 windData/hydrData 분리 반환 2026-03-18 13:25:21 +09:00
734ebeeaab feat(prediction): 다중 모델 시뮬레이션 지원 (OpenDrift + POSEIDON) 2026-03-17 18:33:17 +09:00
Nan Kyung Lee
7110d76276 feat(aerial): WingAI (AI 탐지/분석) 서브탭 추가
- MMSI 선종 불일치 탐지: AIS 등록 선종 vs AI 영상 분석 선종 비교, 지도 위 위치 표시
- 변화 감지: AS-IS/현재 시점 복합 정보원(위성/CCTV/드론/AIS) 오버레이 비교
- 연안자동감지: 지도 폴리곤 드로잉으로 감시 구역 등록, 주기/모니터링 방법 설정
- 위성요청 라벨 '위성영상'으로 변경, 서브탭 순서 재배치
- aerial:spectral 권한 트리 마이그레이션 추가 (022)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-17 12:07:47 +09:00
Nan Kyung Lee
7fb98ebb08 feat(aerial): 완료 촬영 클릭 시 VWorld 위성 영상 오버레이 표시
- Mapbox placeholder → VWorld 위성 타일(WMTS) 실제 영상으로 교체
- 완료 항목 클릭 시 해당 지역에 위성 영상 레이어 오버레이
- 선택 지점에 📷 마커 표시
- VWorld API 키 환경변수(VITE_VWORLD_API_KEY) 연동

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-17 10:50:48 +09:00
Nan Kyung Lee
8c0ada08fd feat(aerial): 위성 요청 목록 더보기 → 페이징 처리로 변경
- 더보기/접기 토글 제거
- 페이지당 5건 표시 + ◀ 1 2 ▶ 페이지 네비게이션
- "총 N건 중 1–5" 현재 범위 표시
- 필터 변경 시 전체 목록 대상 페이징 적용

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-17 10:45:55 +09:00
Nan Kyung Lee
39277c1c02 style(aerial): 위성 요청 헤더/탭/새요청 높이 통일 + 상단 마진 축소
- 전체 요소 높이 h-7(28px)로 통일
- 상단 패딩 py-2→pt-1, 아이콘 w-8→w-7, 텍스트 13px→12px
- 탭 버튼 py-1.5→h-full, 새요청 py-2→h-7
- 헤더 하단 마진 mb-2 유지

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-17 10:44:05 +09:00
Nan Kyung Lee
0549fb879f style(aerial): 위성 촬영 요청 상단 간격 축소
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-17 10:42:41 +09:00
Nan Kyung Lee
f0fee9d92b style(aerial): 위성 요청 헤더+탭 한줄 배치 + 지도 높이 확대
- 헤더(🛰 위성 촬영 요청) + 탭(요청목록/히스토리지도) + 새요청 버튼을 한 줄로 통합
- 지도 뷰 높이 calc(100vh - 160px)로 확대하여 영상 중첩 표시 공간 확보
- 헤더/탭 사이즈 축소로 컴팩트 레이아웃

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-17 10:41:37 +09:00
Nan Kyung Lee
5191e606a1 feat(aerial): 위성 히스토리 지도에 캘린더 + 날짜별 촬영 리스트 + 영상 오버레이
- 좌상단: 캘린더(date picker) + 촬영 이력 있는 날짜 바로가기 버튼
- 날짜 선택 시 해당일 촬영 내역만 필터링하여 리스트 표시
- 완료 항목 클릭 시 지도에 위성 영상 오버레이 표시 (이미지 레이어)
- 선택된 구역 폴리곤 하이라이트 (두꺼운 테두리 + 진한 채움)
- 하단 상세 정보 바: 구역명, 위성, 해상도, 좌표, 영상 표출 상태
- 요청일자를 2026-03 기준으로 업데이트 + dateKey 필드 추가

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-17 10:30:00 +09:00
Nan Kyung Lee
19fdc489f3 fix(aerial): 촬영 히스토리 지도 리스트 위치 좌하단으로 이동
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-17 10:25:39 +09:00
Nan Kyung Lee
7564f42918 feat(aerial): 위성 요청 목록/히스토리 지도 탭 분리
- 📋 요청 목록 / 🗺 촬영 히스토리 지도 탭 토글
- 지도 뷰: MapLibre에 촬영 구역 사각형 폴리곤 표시
  상태별 색상 (촬영중=노랑, 대기=파랑, 완료=초록, 취소=빨강)
- 좌측 오버레이: 요청 리스트 (ID, 구역, 위성, 해상도, 상태)
- 우측 오버레이: 상태별 범례 + 총 건수
- parseCoord 헬퍼: "33.24°N 126.50°E" → {lat, lon} 파싱

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-17 10:20:10 +09:00
Nan Kyung Lee
00e7a3e70a feat(aerial): 위성 요청 취소 기능 추가
- SatRequest status에 '취소' 상태 추가
- 필터 탭에 '취소' 추가
- 대기/촬영중 상태 모두 취소 가능 (confirm 팝업)
- 취소된 요청은 빨간 ✕ 배지 + 투명도 60%
- satRequests를 상태(state)로 관리하여 실시간 상태 변경

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-17 10:16:31 +09:00
Nan Kyung Lee
0c4bfb2f24 fix(aerial): UP42 모달 지도 크기 탭별 동일하게 고정
- 모달 높이 85vh 고정 (max-h → height)
- 지도 영역 minHeight 350px 보장
- Optical/SAR/Elevation 탭 전환 시 지도 크기 일정 유지

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-17 10:13:10 +09:00
Nan Kyung Lee
044994bd57 feat(aerial): UP42 위성 패스 조회 + 궤도 지도 표시
- 백엔드: GET /api/aerial/satellite/passes — 한국 주변 위성 패스 시뮬레이션
  UP42 API 연동 준비 (Workspace ID: b9bc92ae, TODO 주석)
  6개 위성 궤도 데이터 (KOMPSAT-3A, Pléiades Neo, Sentinel-1/2, WV-3, SkySat)
- 프론트 API: fetchSatellitePasses() + SatellitePass 인터페이스
- UP42 모달: MapLibre 지도에 위성 궤도 라인 실시간 표시
  한국 영역 AOI 점선 박스 + 궤도별 색상 구분
  위성 클릭 시 해당 궤도 하이라이트 (나머지 투명)
- 패스 타임라인: 통과 시각, 해상도, 앙각, 상승/하강 방향, 긴급도 표시
- 궤도 범례 오버레이 추가

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-17 10:11:52 +09:00
Nan Kyung Lee
326237b91f style(weather): 섹션 내부 컨텐츠 값 사이즈 키움
- 바람현황 값: 13px, 컴파스 유지
- 파도 카드 값: 14px, 라벨: 10px
- 수온·공기 카드 값: 14px
- 시간별 예보 온도: 13px, 아이콘: lg
- 천문·조석 시각: 13px, 아이콘: base

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-17 08:46:14 +09:00
Nan Kyung Lee
bbdb654857 style(weather): 컨텐츠 글자 사이즈 추가 키움 (핵심 지표 제외)
- 라벨/본문: 10px→11px, 섹션제목/헤더: 12px→13px
- 핵심 지표(풍속/파고/수온) 숫자는 20px 유지

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-17 08:44:51 +09:00
Nan Kyung Lee
f5bcbde40e style(weather): 기상정보 패널 글자 크기 전체 1단계 키움
- 라벨 7px→10px, 본문 9px→10px, 섹션제목 9px→10px
- 핵심 지표 숫자 18px→22px
- 헤더 11px→12px

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-17 08:42:36 +09:00
Nan Kyung Lee
6b5d5f89dd feat(weather): 지역별 기상정보 패널 글자 사이즈 조정 + 시각화 개선
- 패널 폭 380px → 320px 축소
- 전체 폰트 사이즈 컴팩트화 (큰 숫자 4xl→18px, 본문 xs→9px)
- 핵심 지표 3칸 카드 (풍속/파고/수온) 상단 배치, 등급별 색상
- 풍향 컴파스 SVG (N/E/S/W + 화살표, 풍속 색상 연동)
- 풍속/파고 게이지 바 (진행률 + 등급 색상)
- 파도 4칸 그리드 (유의파고/최고파고/주기/파향)
- 수온·공기·염분 3칸 그리드
- 천문·조석 4칸 그리드 (일출/일몰/월출/월몰)
- 날씨 특보 배지 스타일 개선
- 전체 패딩 축소로 더 많은 정보 한눈에 표시

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-17 08:40:57 +09:00
595fac5adb Merge commit '130f563ab2e95122296d3b7d8805985c4d39fb4f' into feature/draw-util 2026-03-16 18:36:12 +09:00
c4f11423aa feat(reports): 보고서 확산예측 지도 캡처 기능 추가
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-16 18:23:42 +09:00
301df70376 feat(map): 거리·면적 측정 도구 구현
TopBar 퀵메뉴에서 거리/면적 측정 모드 토글, MapView에서 클릭으로
포인트 수집 후 deck.gl 레이어로 결과를 시각화한다.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16 17:52:27 +09:00
da077bf884 fix(prediction): geo.ts 중복 함수 제거 및 null 좌표 참조 오류 수정 2026-03-16 11:51:48 +09:00
a3b2787ba0 chore: feature/cctv-hns-enhancements 머지 충돌 해결
- aerialRouter/Service: stitch(이미지합성) + drone stream 기능 통합
- aerialService: IMAGE_API_URL(stitch) / OIL_INFERENCE_URL(inference) 분리
- aerialApi: stitchImages + DroneStream API 함수 공존
- MapView: analysis props(HEAD) + lightMode prop(INCOMING) 통합
- CctvView: 지도/리스트/그리드 3-way 뷰 채택 (INCOMING 확장)
- OilSpillView: analysis 상태 + 데모 자동 표시 useEffect 통합
- PredictionInputSection: POSEIDON/KOSPS 모델 추가 (ready 필드 포함)
- RightPanel: controlled props 방식 유지, 미사용 내부 상태 제거

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-16 10:58:00 +09:00
Nan Kyung Lee
fbef59341e feat(aerial): 드론 아이콘 쿼드콥터 + 함정 MarineTraffic 삼각형 스타일
- 함정: MarineTraffic 스타일 삼각형 (선수 방향 위, 상태색 채움)
- 드론: 쿼드콥터 아이콘 (X자 팔 + 프로펠러 회전 애니메이션 + 카메라 렌즈)
- 함정↔드론 점선 연결선 유지
- 송출중 REC LED 깜빡임, 드론 모델명 라벨

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 09:53:30 +09:00
Nan Kyung Lee
615f7f9277 feat(aerial): 드론 지도 아이콘 개선 — 함정 삼각형 + 연결선 + 드론 원형
- 함정: 삼각형 아이콘 + 함정명 라벨 (좌하단)
- 드론: 원형 아이콘 (십자 프로펠러 + 본체 + 카메라 렌즈) (우상단)
- 함정↔드론 점선 연결선으로 소속 관계 표시
- 상태별 색상: 송출중(초록), 연결중(시안), 오류(빨강), 대기(회색)
- 송출중 드론 빨간 LED 깜빡임 유지
- 드론 모델명 라벨 (M300/M30T/Mavic3E)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 09:51:30 +09:00
Nan Kyung Lee
c4728be7a1 feat(aerial): 실시간 드론 지도 뷰 — 드론 위치 아이콘 + 클릭 스트림 연결
- 드론 미선택 시 MapLibre 지도에 드론 위치 표시 (부산/인천/목포)
- 드론 SVG 아이콘 (본체+팔4개+프로펠러+카메라, 상태별 색상)
- 송출중 드론은 빨간 LED 깜빡임 애니메이션
- 드론 클릭 → 다크 팝업 (함정명, 드론모델, IP, 상태)
  대기중: "스트림 시작" 버튼 / 송출중: "영상 보기" 버튼
- 스트림 선택 시 자동으로 영상 그리드로 전환

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 09:28:08 +09:00
Nan Kyung Lee
9386c1e29a style(prediction): 확산 예측 요약 폰트/레이아웃을 오염 종합 상황과 통일
- PredictionCard를 StatBox와 동일한 가로 레이아웃(라벨-값)으로 변경
- 폰트 사이즈 text-xs → text-[9px]로 축소하여 오염 종합 상황과 일치

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 09:22:01 +09:00
Nan Kyung Lee
939bd0fc88 feat(prediction): KOSPS/앙상블 준비중 팝업 + 기본 모델 POSEIDON 변경
- KOSPS 모델 클릭 시 "준비중" alert 팝업
- 앙상블 모델 클릭 시 "준비중" alert 팝업
- 기본 선택 모델을 KOSPS → POSEIDON으로 변경

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 08:59:18 +09:00
Nan Kyung Lee
48b5e876ac feat(prediction): 범례 UI 개선 — HTML 참고 디자인 반영
- 모델별 색상 라인 (KOSPS/POSEIDON/OpenDrift/앙상블)
- 오일펜스 라인 아이콘 (점 3개)
- 도달시간별 선종 표시: 위험(<6h), 경고(6~12h), 주의(12~24h), 안전
- 범례 사이즈 축소 (폰트 10px, 패딩 축소)
- 접기/펼치기 토글 (▶/▼)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 08:58:06 +09:00
Nan Kyung Lee
97e9d58cc1 feat(prediction): 오염분석 UI 개선 — HTML 디자인 참고 반영
- 다각형/원 분석 탭 버튼 사이즈 축소 + 활성 탭 스타일 통일
- 다각형 분석: 설명 텍스트 + 그라데이션 "다각형 분석수행" 버튼
- 원 분석: 반경(NM) 프리셋 버튼(1,3,5,10,15,20,30,50) + 직접 입력
  사고지점 기준 원형 영역 면적 계산 (NM² + km²)
- 분석 결과: NM²/km² 면적, 원 둘레, 반경 표시

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 08:55:23 +09:00
Nan Kyung Lee
6944a9e342 feat(prediction): 원 분석 기능 — 중심점/반경 입력으로 원형 오염 면적 계산
- 원 분석 버튼 클릭 시 입력 폼 토글 (중심 위도, 경도, 반경 km)
- 사고 지점 좌표를 기본값으로 자동 설정
- πr² 면적, 2πr 둘레 계산 결과 표시
- 결과: 오염 면적(km²), 원 둘레(km), 반경(km), 중심 좌표

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 08:34:29 +09:00
Nan Kyung Lee
fb74df5c1f feat(prediction): 다각형/원 오염분석 + 범례 최소화 + Convex Hull 면적 계산
- 오염분석 버튼을 다각형 분석 / 원 분석으로 분리
- 다각형 분석: Convex Hull(Graham Scan) + Shoelace 알고리즘으로
  확산 입자 외곽 다각형 면적(km²), 둘레(km), 꼭짓점 수 계산
- 원 분석: 향후 오픈 예정 팝업
- geo.ts에 convexHull, polygonAreaKm2, analyzeSpillPolygon 함수 추가
- OilSpillView → RightPanel에 oilTrajectory prop 전달
- 지도 범례에 최소화/펼치기 토글 버튼 추가
- CheckboxLabel 중복 className 경고 수정

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 08:23:22 +09:00
Nan Kyung Lee
b25eccee37 feat(prediction): 오일펜스 배치 가이드 UI 개선
- AI 자동 추천: 클릭 시 "향후 오픈 예정" 팝업 표시
- 수동 배치 탭 제거
- 시뮬레이션: V자형 오일붐 자동 배치 + 차단 시뮬레이션 통합 실행
  알고리즘 설정(해류 직교 보정, 안전 마진, 최소 차단 효율, 파고 보정) 시뮬레이션 탭 내 통합
- 초기화: 확인 팝업 추가 (오일펜스만 초기화, 확산예측 결과 유지)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 08:15:23 +09:00
Nan Kyung Lee
bb3bd8358b feat(aerial): CCTV 지도/리스트 뷰 전환 + CCTV 아이콘 + 다크 팝업 UI
- 지도/리스트 뷰 토글 버튼 추가 (🗺 지도 / ☰ 리스트)
- 리스트 뷰: 출처별(KHOA/KBS) · 지역별 그룹핑 테이블 그리드
  카메라명, 위치, 상태, 최종갱신 컬럼 표시
- 지도 마커: 📹 이모지 → CCTV 카메라 SVG 아이콘 (LIVE 표시등 애니메이션)
- 좌측 목록: CCTV SVG 아이콘으로 교체
- 지도 팝업 다크 테마 적용 (배경, 테두리, 삼각형, 버튼 모두 어두운 톤)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 08:06:05 +09:00
Nan Kyung Lee
9c834c4e5e feat(prediction): 확산예측 지도 밝은 해도 스타일 적용 (육지 회색 + 바다 파랑)
고객요청사항 - 지도를 밝게 하거나, 선명하게 해서 확실히 구분해주세요.

- MapView에 lightMode prop 추가 및 해도 스타일(LIGHT_STYLE) 구현
- OpenFreeMap 벡터타일 기반: 육지(회색 #e8e8e8) + 바다(파랑 #a8cce0) 명확 구분
- 한글 지명 라벨 우선 표시 (name:ko → name 폴백)
- 도로/건물/경계선 회색 톤 통일, 해양 지명 이탤릭 표시
- 확산예측(OilSpillView)에 lightMode 적용

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 07:57:23 +09:00
Nan Kyung Lee
a470df5518 feat(aerial): KBS CCTV HLS 직접 재생 + CCTV 위치 지도 + 좌표 정확도 개선
- KBS 재난안전포탈 CCTV를 iframe에서 HLS 직접 재생으로 전환
- 백엔드 KBS HLS 리졸버 엔드포인트 추가 (/api/aerial/cctv/kbs-hls/:cctvId/stream.m3u8)
- KBS API 3단계 리졸브: 팝업API → loomex API → m3u8 (5분 캐시)
- CCTV 미선택 시 MapLibre 지도에 마커 표시 + 팝업 영상 선택
- 우측 미니맵을 실제 MapLibre 지도로 교체
- KBS API 정확 좌표로 19개 CCTV 업데이트 + 신규 2건 추가 (울산 달동, 제주 도남동)
- PredictionInputSection 중복 className 수정

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 07:40:52 +09:00
6864f6dab5 fix(useSubMenu): useEffect import 추가 2026-03-13 14:10:15 +09:00
421f5f8b52 Merge branch 'feature/prediction-pollution-analysis' of https://gitea.gc-si.dev/gc/wing-ops into feature/prediction-pollution-analysis
# Conflicts:
#	docs/RELEASE-NOTES.md
#	frontend/src/common/components/map/MapView.tsx
#	frontend/src/tabs/prediction/components/OilSpillView.tsx
#	frontend/src/tabs/prediction/components/RightPanel.tsx
2026-03-13 14:00:47 +09:00
Nan Kyung Lee
dc82574635 feat(prediction): 오염분석 다각형/원 분석 기능 구현
- 오염분석 섹션을 탭 UI로 개편 (다각형 분석 / 원 분석)
- 다각형 분석: 지도 클릭으로 꼭짓점 추가 후 분석 실행
- 원 분석: NM 프리셋 버튼(1·3·5·10·15·20·30·50) + 직접 입력, 사고지점 기준 자동 계산
- 분석 결과: 분석면적·오염비율·오염면적·해상잔존량·연안부착량·민감자원 개소 표시
- MapView: 다각형(PolygonLayer) / 원(ScatterplotLayer) 실시간 지도 시각화
- geo.ts: pointInPolygon, polygonAreaKm2, circleAreaKm2 유틸 함수 추가

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-13 09:19:30 +09:00
9ddae7a973 feat(prediction): 시뮬레이션 에러 모달 추가 및 보고서 해안부착 현황 개선 2026-03-12 19:08:25 +09:00
0c94c631c4 feat(weather): 해류 캔버스 파티클 레이어 추가
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 11:03:17 +09:00
Nan Kyung Lee
d9a51d2101 feat(manual): 사용자 매뉴얼 팝업 기능 추가
- 퀵 메뉴에 '사용자 매뉴얼' 버튼 추가 (위성영상 아래)
- UserManualPopup 컴포넌트 신규 생성 (77개 화면, 8개 챕터)
- 각 화면별 스크린샷 이미지 77장 포함 (/public/manual/)
- 라이트박스 이미지 확대, 전체 열기/닫기, 챕터 네비게이션
2026-03-12 10:30:14 +09:00
dfe0ac8efe chore: develop 브랜치 최신화 머지 (conflict 해결)
- aerialService.ts: IMAGE_API_URL + stitchImages() 유지 (현재 브랜치 기준)
- aerialRouter.ts: /stitch 라우트 유지 (현재 브랜치 기준)
- RELEASE-NOTES.md: [Unreleased] + [2026-03-11] 병합
2026-03-11 18:09:38 +09:00
54d3a281c6 feat(prediction): CPU 전용 Docker 환경 구축 + 이미지 분석/보고서/항공 UI 개선 2026-03-11 17:30:25 +09:00
3743027ce7 feat(weather): 기상 정보 기상 레이어 업데이트 (#78)
## Summary
- 기상 맵 컨트롤 컴포넌트 추가 및 KHOA API 연동 개선
- KHOA API 엔드포인트 교체 및 해양예측 오버레이 Canvas 렌더링 전환

## 변경 파일
- OceanForecastOverlay.tsx
- WeatherMapOverlay.tsx
- WeatherView.tsx
- useOceanForecast.ts
- khoaApi.ts
- vite.config.ts

## Test plan
- [ ] 기상정보 -> 기상 레이어 -> 해황 예보도 클릭 -> 이미지 렌더링 확인
- [ ] 기상정보 -> 기상 레이어 -> 백터 바람 클릭 -> 백터 이미지 렌더링 확인

Co-authored-by: Nan Kyung Lee <nankyunglee@Nanui-Macmini.local>
Reviewed-on: #78
Co-authored-by: leedano <dnlee@gcsc.co.kr>
Co-committed-by: leedano <dnlee@gcsc.co.kr>
2026-03-11 11:14:25 +09:00
3946ff6a25 feat(prediction): 이미지 분석 서버 Docker 패키징 + DB 코드 제거
- prediction/image/ FastAPI 서버 Docker 환경 구성
  - Dockerfile: PyTorch 2.1 + CUDA 12.1 기반 GPU 이미지
  - docker-compose.yml: GPU 할당 + 데이터 볼륨 마운트
  - requirements.txt: 서버 의존성 목록
  - .env.example: 환경변수 템플릿
  - DOCKER_USAGE.md: 빌드/실행/API 사용법 문서
  - Dockerfile에 .dockerignore 제외 폴더 mkdir -p 추가
- .gitignore: prediction/image 결과물 및 모델 가중치(.pth) 제외 추가
- dbInsert_csv.py, dbInsert_shp.py 삭제 (미사용 DB 로직)
- api.py: dbInsert import 및 주석 처리된 DB 호출 코드 제거
- aerialRouter.ts: req.params 타입 오류 수정
2026-03-10 18:37:36 +09:00
Nan Kyung Lee
ed3758645c chore: 프론트엔드 포트 변경(5174) + CORS 허용 + 드론 모델명 스타일 개선 2026-03-10 14:40:12 +09:00
b601edd741 feat(prediction): flyTo 완료 후 자동 재생 + OpenDrift Docker 설정 추가
- MapView: flyToIncident/onIncidentFlyEnd props 추가, moveend 이벤트 후 콜백 호출
- OilSpillView: 사고 지점 변경 시 flyTo 완료 후 재생(pendingPlayRef), 동일 지점은 즉시 재생
- opendrift/config.py: STORAGE_BASE 환경변수로 스토리지 경로 설정
- opendrift/dockerfile, .dockerignore 추가
- opendrift/createKmaImage.py 제거

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-09 18:46:15 +09:00
Nan Kyung Lee
df01fd1b1d feat(aerial): 실시간 드론 RTSP→HLS 스트림 연동 + 드론 모델명 표시 2026-03-09 15:52:45 +09:00
88eb6b121a feat(prediction): OpenDrift 유류 확산 시뮬레이션 통합 + CCTV/관리자 고도화
[예측]
- OpenDrift Python API 서버 및 스크립트 추가 (prediction/opendrift/)
- 시뮬레이션 상태 폴링 훅(useSimulationStatus), 로딩 오버레이 추가
- HydrParticleOverlay: deck.gl 기반 입자 궤적 시각화 레이어
- OilSpillView/LeftPanel/RightPanel: 시뮬레이션 실행·결과 표시 UI 개편
- predictionService/predictionRouter: 시뮬레이션 CRUD 및 상태 관리 API
- simulation.ts: OpenDrift 연동 엔드포인트 확장
- docs/PREDICTION-GUIDE.md: 예측 기능 개발 가이드 추가

[CCTV/항공방제]
- CCTV 오일 감지 GPU 추론 연동 (OilDetectionOverlay, useOilDetection)
- CCTV 안전관리 감지 기능 추가 (선박 출입, 침입 감지)
- oil_inference_server.py: Python GPU 추론 서버

[관리자]
- 관리자 화면 고도화 (사용자/권한/게시판/선박신호 패널)
- AdminSidebar, BoardMgmtPanel, VesselSignalPanel 신규 컴포넌트

[기타]
- DB: 시뮬레이션 결과, 선박보험 시드(1391건), 역할 정리 마이그레이션
- 팀 워크플로우 v1.6.1 동기화

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-09 14:55:46 +09:00
Nan Kyung Lee
5b734d3cf1 feat(aerial): CCTV 안전관리 감지 기능 추가 (선박 출입, 침입 감지) 2026-03-09 10:39:14 +09:00
Nan Kyung Lee
ce80e620c1 feat(admin): 관리자 화면 고도화 — 사용자/권한/게시판/선박신호 패널
- UsersPanel: 테이블+페이징+등록모달+상세모달(비밀번호초기화/잠금해제)
- PermissionsPanel: 사용자별 역할 할당 탭 추가
- BoardMgmtPanel: 공지사항/게시판/QNA 관리자 일괄 삭제
- VesselSignalPanel: VTS/VTS-AIS/V-PASS/E-NAVI/S&P AIS 타임라인 모니터링
- AdminSidebar/AdminPlaceholder/adminMenuConfig 신규
- 권한 미들웨어 부모 리소스 fallback 로직 추가
- 조직 목록 API, 관리자 삭제 API 추가

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 16:30:55 +09:00
Nan Kyung Lee
626fea4c75 feat(aerial): CCTV 오일 감지 GPU 추론 연동 및 HNS 초기 핀 제거
CCTV 오일 유출 감지:
- GPU 추론 서버 FastAPI 서비스 (oil_inference_server.py)
- Express 프록시 엔드포인트 (POST /api/aerial/oil-detect)
- 프론트엔드 API 연동 (oilDetection.ts, useOilDetection.ts)
- 4종 유류 클래스별 색상 오버레이 (OilDetectionOverlay.tsx)
- 캡처 기능 (비디오+오버레이 합성 PNG 다운로드)
- Rate limit HLS 스트리밍 skip + 한도 500 상향

HNS 대기확산:
- 초기 핀 포인트 제거 (지도 클릭으로 선택)
- 좌표 미선택 시 안내 메시지 표시

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 13:31:02 +09:00
Nan Kyung Lee
f974162e3a feat(assets): 선박보험 엑셀 다운로드 기능 추가
xlsx 패키지 도입, 필터 조건에 맞는 전체 데이터를 .xlsx로 내보내기

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-05 14:30:56 +09:00
Nan Kyung Lee
91d0832963 feat(assets): 유류오염보장계약 DB 임포트 + 선박보험 조회 연동
해양수산부 공공데이터(유류오염보장계약관리) 1,391건을 SHIP_INSURANCE 테이블에 임포트하고,
백엔드 API 및 프론트엔드 ShipInsurance 컴포넌트를 실제 DB 데이터 기반으로 전환.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-05 14:26:56 +09:00
Nan Kyung Lee
c3d3b82b60 feat(scat): 해안평가 서브메뉴 3개 추가 (해안오염 조사 평가, 해양오염분포도, Pre-SCAT)
- useSubMenu에 scat 서브메뉴 설정 추가 (survey, distribution, pre-scat)
- ScatView wrapper 컴포넌트로 서브탭 분기 처리
- SurveyView, DistributionView placeholder 컴포넌트 생성
- hasPermission에 부모 리소스 fallback 로직 추가 (scat:survey → scat)
- App.tsx에서 PreScatView → ScatView 교체

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-05 13:27:53 +09:00
Nan Kyung Lee
618d898a6c feat(assets): 장비 유형별 필터 + 합계 행 + 컬럼 하이라이트
- 방제선/유회수기/이송펌프/방제차량/살포장치 장비 필터 드롭다운 추가
- 페이지네이션 위 합계 행에 필터된 기관의 장비별 총합 표시
- 장비 필터 선택 시 해당 컬럼 헤더/셀/합계 항목 cyan 하이라이트

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-05 13:10:51 +09:00
Nan Kyung Lee
29686f9476 feat(assets): 방제자산 엑셀 데이터 임포트 + 연락처 탭 UI 개선
- 152개 기관 방제장비 현황 엑셀 데이터 DB 마이그레이션 (018)
- 연락처 탭에 기관 기본 정보(기관명, 유형, 관할청, 주소, 대표 연락처) 섹션 추가
- 담당자 목록에 직책/담당자명/연락처 표시 및 cyan 색상 강조

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-05 12:53:12 +09:00
Nan Kyung Lee
8f98f63aa5 feat(aerial): CCTV 실시간 HLS 스트림 + HNS 분석 고도화
CCTV 실시간 영상:
- CCTVPlayer 컴포넌트 (hls.js 기반 HLS/MJPEG/MP4 재생)
- 백엔드 HLS 프록시 엔드포인트 (CORS 우회, m3u8 URL 재작성)
- KHOA 15개 + KBS 6개 실제 해안 CCTV 연동
- Vite dev proxy, 스트림 타입 자동 감지 유틸리티

HNS 분석:
- HNS 시나리오 저장/불러오기/재계산 기능
- 물질 DB 검색 및 상세 정보 연동
- 좌표/파라미터 입력 UI 개선
- Python 확산 모델 스크립트 (hns_dispersion.py)

공통:
- 3D 지도 토글, 보고서 생성 개선
- useSubMenu 훅, mapUtils 확장
- ESLint set-state-in-effect 수정

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 17:21:41 +09:00
Nan Kyung Lee
ade0b5b509 feat(reports): HWPX 테이블 레이아웃 개선 (테두리 + 라벨 배경색)
borderFill id=3(값 셀: 실선 테두리), id=4(라벨 셀: 실선 테두리 + #f0f4f8 배경)
추가하여 HTML 보고서와 동일한 테이블 스타일 적용.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-02 10:47:29 +09:00
Nan Kyung Lee
18e93d17d7 Merge branch 'feature/hwpx-export' into feature/3d-map-toggle 2026-03-02 10:39:45 +09:00
Nan Kyung Lee
374a487878 feat(reports): HWP 저장을 실제 HWPX 포맷으로 변경
기존 HTML Blob → .doc 저장 방식을 OWPML 표준 HWPX(ZIP+XML) 포맷으로 교체.
JSZip으로 HWPX 파일을 순수 브라우저에서 생성하여 한글에서 직접 열 수 있도록 구현.

- hwpxExport.ts 신규: HWPX ZIP 패키징 (mimetype, header.xml, section0.xml 등)
- reportUtils.ts: exportAsHWP → dynamic import로 HWPX 위임
- ReportsView.tsx, TemplateFormEditor.tsx: 구조화 데이터 직접 전달

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-02 10:07:06 +09:00
Nan Kyung Lee
aba58b2227 feat(map): 3D 지도 토글 구현 (VWorld 위성 + OSM 건물 extrusion)
- mapStore.ts(신규): Zustand 기반 mapToggles 전역 상태 (s57/s101/threeD/satellite)
- TopBar.tsx: 로컬 상태 → mapStore 전환 (3D 토글 전역 공유)
- MapView.tsx:
  - SATELLITE_3D_STYLE 추가 (VWorld WMTS 위성 + OpenFreeMap 벡터타일)
  - MapLibre fill-extrusion으로 3D 건물 렌더링 (zoom 13+, render_height 사용)
  - MapPitchController: 3D ON → pitch 45°/bearing -17°, OFF → 0° 복귀
  - mapToggles.threeD 상태에 따라 지도 스타일 전환 (BASE_STYLE ↔ SATELLITE_3D_STYLE)
- deps: @deck.gl/mesh-layers, @deck.gl/extensions 추가 (관련 기능용)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-01 21:28:30 +09:00
34cf046787 fix(css): CSS 회귀 버그 3건 수정 + SCAT 우측 패널 구현
- className 중복 속성 31건 수정 (12파일)
- KOSPS codeBox spread TypeError 해결
- HNS 페놀(C₆H₅OH) 물질 데이터 추가
- ScatRightPanel 280px 우측 패널 신규 구현 (3탭+액션버튼)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 13:11:21 +09:00
b00bb56af3 refactor(css): Phase 3 인라인 스타일 → Tailwind 대규모 변환 (486건)
대형 파일 집중 변환:
- SatelliteRequest: 134→66 (hex 색상 일괄 변환)
- IncidentsView: 141→90, MediaModal: 97→38
- HNSScenarioView: 78→38, HNSView: 49→31
- LoginPage, MapView, PredictionInputSection 등 중소 파일 8개

변환 패턴: hex 색상→text-[#hex], CSS 변수→Tailwind 유틸리티,
flex/grid/padding/fontSize/fontWeight/overflow 등 정적 속성 className 이동

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 12:06:15 +09:00
628c07f4fb refactor(css): 인라인 style → Tailwind className 일괄 변환 (229건)
안전한 패턴 매칭으로 단독 color/background/fontWeight/fontSize/flex 스타일을
Tailwind 유틸리티 클래스로 변환. 혼합 style에서 개별 속성 추출은 제외하여
시각적 회귀 방지.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 11:38:59 +09:00
1dacb22487 refactor(css): 인라인 스타일 → Tailwind 추가 변환 (Phase 2 계속)
대형 파일 추가 변환:
- HNSSubstanceView: 275→209건 (66건 변환)
- OilSpillTheoryView: 435→417건 (18건 변환)
- IncidentsLeftPanel: 61→34건 (27건 변환)
- RescueView: 54→47건 (7건 변환)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 11:31:41 +09:00
3fc8f03238 refactor(css): 인라인 스타일 → Tailwind 유틸리티 클래스 변환 (Phase 2, ~990건)
Phase 2: 정적 인라인 스타일을 Tailwind className으로 변환
- common/: MapView, BacktrackReplayBar, LoginPage, LayerTree, ComboBox, SubMenuBar
- hns/: HNSSubstanceView, HNSScenarioView, HNSView, HNSLeftPanel 등 8파일
- prediction/: BoomDeploymentTheoryView, OilBoomSection, RecalcModal, RightPanel 등 8파일
- incidents/: IncidentsView, IncidentsLeftPanel, IncidentsRightPanel
- rescue/: RescueScenarioView
- aerial/: SatelliteRequest, AerialTheoryView
- assets/: ShipInsurance, AssetTheory, AssetManagement 등 5파일
- board/: BoardView
- reports/: ReportsView, OilSpillReportTemplate, ReportGenerator
- weather/: WeatherMapOverlay, WeatherView, WeatherRightPanel

변환 패턴: color/background/border/borderRadius/display/flex/gap/fontSize/fontWeight → Tailwind
동적 스타일(rgba, gradient, 삼항 조건부, 런타임 변수)은 style prop에 유지
JS 번들: 2,921KB → 2,897KB (-24KB)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 11:24:13 +09:00
dec066e8bb refactor(css): CSS 인프라 구축 + body default 인라인 스타일 1,055건 제거
Phase 0: CSS 인프라 구축
- Tailwind config 색상 불일치 수정 (t1/t2/t3 → CSS 변수 값으로 통일)
- index.css 1,302줄 → @import 엔트리포인트 7줄로 축소
- common/styles/base.css: @layer base 추출 (CSS 변수, 리셋, body 기본값)
- common/styles/components.css: @layer components + utilities 추출
- common/styles/wing.css: wing-* 디자인 시스템 클래스 신규 정의
- common/utils/cn.ts: className 조합 유틸리티
- App.css 삭제 (내용을 components.css로 통합)

Phase 1: body default 인라인 스타일 일괄 제거
- fontFamily: 'var(--fK)' 781건 제거 (body font-family 상속)
- color: 'var(--t1)' 274건 제거 (body color 상속)
- 빈 style={{}} 78건 정리
- 31개 파일, JS 번들 23KB 감소

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 10:45:01 +09:00
9384290bf3 feat(frontend): 확산 방향 SSW 수정 + 통합조회 호버 툴팁 + 선박 아이콘 개선
- 확산분석: 오일 확산 방향 NE→SSW(200°)로 수정, 민감자원 여수 실제 좌표 적용
- 해류 화살표: 아이콘 ➤, 크기 22px, 투명도 증가, SSW 방향 동기화
- 통합조회: 선박/사고 마커 hover 시 다크 테마 툴팁 표시 (이름, 유형, 속도, 좌표)
- 선박 아이콘: SVG 삼각형 16×20 확대 + 글로우 효과 + pickable 전환
- vesselLayer(ScatterplotLayer 원형) 제거, vesselIconLayer로 통합

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 10:01:55 +09:00
86b4a03c12 feat(frontend): TextLayer 한글 폰트 + 확산분석 자동 데모 + 3D 회전 애니메이션
- TextLayer: characterSet 'auto', NanumSquare 한글 폰트, outline 설정 (MapView, RealtimeDrone)
- 확산분석 탭: 진입 시 데모 궤적/방어선/민감자원 자동 로드 (useEffect + handleSelectAnalysis)
- SensorAnalysis: Vessel/Pollution 3DModel을 requestAnimationFrame 기반 360° 회전으로 전환
  - 3D geometry useMemo 생성, Y축 회전 + X축 틸트, depth 기반 크기/밝기

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 09:33:00 +09:00
6356b0a3bd feat(frontend): 항공탐색 탭 개선 + 확산분석 데모 데이터 시각화
항공탐색 탭:
- CctvView 크래시 수정 (cctvCameras → cameras 필드 매핑)
- AerialView 이중 서브메뉴 분기 → 플랫 switch 단순화
- SensorAnalysis SVG 300pt → Canvas 2D 5000/8000pt 고밀도 전환
- RealtimeDrone CSS 시뮬레이션 → MapLibre + deck.gl 실제 지도 전환

확산분석 탭:
- 시뮬레이션 백엔드 미구현 시 클라이언트 데모 궤적 fallback 생성
- AI 방어선 3개(직교차단/U형포위/연안보호) 자동 배치
- 민감자원 5개소(양식장/해수욕장/보호구역) deck.gl 레이어 표시
- 해류 화살표 11x11 그리드 TextLayer 추가

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 08:59:13 +09:00
195e69c86d fix(map): ScatMap scatDetailData import 제거 + Vite shimMissingExports 설정
- scatDetailData는 scatConstants에 없는 export — import 제거, seg.id 직접 사용
- deck.gl → @loaders.gl/worker-utils가 Node.js child_process.spawn 참조하나
  브라우저에서 미사용 코드 경로이므로 shimMissingExports: true로 해결

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 03:04:11 +09:00
353047dede chore(map): develop 병합 (Phase 6 충돌 해결)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 02:59:18 +09:00