fix(map): Globe 렌더링 안정화 및 툴팁 유지 개선 #29

병합
htlee feature/globe-rendering-optimization 에서 develop 로 3 commits 를 머지했습니다 2026-02-17 16:49:49 +09:00
소유자

Summary

  • Globe 3D 모드에서 AIS poll setData()isStyleLoaded()가 일시적으로 false를 반환하여 렌더링이 차단되던 문제를 해결합니다
  • Globe 툴팁이 AIS poll 주기마다 사라지던 문제를 buildTooltipRef 패턴으로 해결합니다
  • Globe 우클릭 컨텍스트 메뉴가 작동하지 않던 문제를 수정합니다
  • 항적 가상 선박을 화살표(IconLayer)에서 원형(ScatterplotLayer)으로 변경합니다
  • 선박 선택 시 fly-to 동작을 지도 클릭/패널 클릭으로 구분합니다

Changes

isStyleLoaded() 가드 → try/catch 패턴

  • useGlobeShipLayers, useGlobeShipHover, useGlobePairOverlay, useGlobeFcFleetOverlay, useZonesLayer, useNativeMapLayers 등 다수 hook에서 isStyleLoaded() 선행 가드를 제거
  • MapLibre API 호출을 try/catch로 감싸서, 실패 시 다음 AIS poll 사이클에서 자연 재시도

Globe 툴팁 안정화

  • buildGlobeFeatureTooltip을 useRef로 관리 (buildTooltipRef) → effect 의존성에서 제거
  • mousemove effect의 cleanup에서 clearGlobeTooltip() 제거 → unmount-only cleanup으로 분리

선박 선택 fly-to 개선

  • mapInitiatedSelectRef 도입: 지도 클릭 선택 vs 패널 선택 구분
  • 좌측 패널(선박 목록, 알람 목록) 클릭 시 해당 위치로 즉시 fly-to (duration 400ms)
  • 지도에서 직접 클릭/우클릭 시에는 fly-to 비활성화
  • shipData를 ref로 관리하여 AIS poll마다 effect 재실행 방지

기타

  • Map3D 우클릭 핸들러에서 isStyleLoaded() 가드 제거
  • 항적 가상 선박: IconLayer → ScatterplotLayer (원형 포인트)
  • onMapStyleReady에서 불필요한 idle 이벤트 구독 제거

Test Plan

  • Globe 모드: 선박 hover 시 tooltip 안정적으로 유지
  • Globe 모드: 우클릭 컨텍스트 메뉴 정상 동작
  • Globe 모드: 선박 아이콘/라벨/경고 배지 정상 렌더링
  • 패널 선박 목록/알람 목록 클릭 시 즉시 fly-to
  • 지도 직접 클릭 시 fly-to 없음
  • Globe↔Mercator 전환 시 오류 없음
  • Mercator 모드: 기존 기능 회귀 없음
  • 항적 재생 시 가상 선박 원형 표시

🤖 Generated with Claude Code

## Summary - Globe 3D 모드에서 AIS poll `setData()` 중 `isStyleLoaded()`가 일시적으로 false를 반환하여 렌더링이 차단되던 문제를 해결합니다 - Globe 툴팁이 AIS poll 주기마다 사라지던 문제를 `buildTooltipRef` 패턴으로 해결합니다 - Globe 우클릭 컨텍스트 메뉴가 작동하지 않던 문제를 수정합니다 - 항적 가상 선박을 화살표(IconLayer)에서 원형(ScatterplotLayer)으로 변경합니다 - 선박 선택 시 fly-to 동작을 지도 클릭/패널 클릭으로 구분합니다 ## Changes ### isStyleLoaded() 가드 → try/catch 패턴 - `useGlobeShipLayers`, `useGlobeShipHover`, `useGlobePairOverlay`, `useGlobeFcFleetOverlay`, `useZonesLayer`, `useNativeMapLayers` 등 다수 hook에서 `isStyleLoaded()` 선행 가드를 제거 - MapLibre API 호출을 try/catch로 감싸서, 실패 시 다음 AIS poll 사이클에서 자연 재시도 ### Globe 툴팁 안정화 - `buildGlobeFeatureTooltip`을 useRef로 관리 (`buildTooltipRef`) → effect 의존성에서 제거 - mousemove effect의 cleanup에서 `clearGlobeTooltip()` 제거 → unmount-only cleanup으로 분리 ### 선박 선택 fly-to 개선 - `mapInitiatedSelectRef` 도입: 지도 클릭 선택 vs 패널 선택 구분 - 좌측 패널(선박 목록, 알람 목록) 클릭 시 해당 위치로 즉시 fly-to (duration 400ms) - 지도에서 직접 클릭/우클릭 시에는 fly-to 비활성화 - `shipData`를 ref로 관리하여 AIS poll마다 effect 재실행 방지 ### 기타 - Map3D 우클릭 핸들러에서 `isStyleLoaded()` 가드 제거 - 항적 가상 선박: IconLayer → ScatterplotLayer (원형 포인트) - `onMapStyleReady`에서 불필요한 `idle` 이벤트 구독 제거 ## Test Plan - [x] Globe 모드: 선박 hover 시 tooltip 안정적으로 유지 - [x] Globe 모드: 우클릭 컨텍스트 메뉴 정상 동작 - [x] Globe 모드: 선박 아이콘/라벨/경고 배지 정상 렌더링 - [x] 패널 선박 목록/알람 목록 클릭 시 즉시 fly-to - [x] 지도 직접 클릭 시 fly-to 없음 - [ ] Globe↔Mercator 전환 시 오류 없음 - [ ] Mercator 모드: 기존 기능 회귀 없음 - [ ] 항적 재생 시 가상 선박 원형 표시 🤖 Generated with [Claude Code](https://claude.com/claude-code)
htlee added 1 commit 2026-02-17 16:39:25 +09:00
- isStyleLoaded() 가드를 try/catch 패턴으로 교체 (AIS poll setData 중 렌더링 차단 방지)
- Globe 툴팁 buildTooltipRef 패턴 도입 (AIS poll 주기 변경 시 사라짐 방지)
- Globe 우클릭 컨텍스트 메뉴 isStyleLoaded 가드 제거
- 항적 가상 선박을 IconLayer에서 ScatterplotLayer(원형)로 변경
- useNativeMapLayers isStyleLoaded 가드 제거 (항적 레이어 셋업 스킵 방지)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
htlee added 1 commit 2026-02-17 16:45:03 +09:00
- mapInitiatedSelectRef 도입: 지도 클릭 선택과 패널 선택을 구분
- 좌측 패널(선박 목록, 알람 목록) 선택 시 해당 위치로 fly-to
- 지도에서 직접 클릭/우클릭 선택 시에는 fly-to 비활성화
- onMapSelectMmsi 래퍼로 지도 내 선택 경로 통합 (Globe+Mercator)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
htlee added 1 commit 2026-02-17 16:47:45 +09:00
- 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>
htlee merged commit 7cdc8bef2f into develop 2026-02-17 16:49:49 +09:00
"로그인하여 이 대화에 참여"
No reviewers
레이블 없음
마일스톤 없음
담당자 없음
참여자 1명
알림
마감일
기한이 올바르지 않거나 범위를 벗어났습니다. 'yyyy-mm-dd'형식을 사용해주십시오.

마감일이 설정되지 않았습니다.

의존성

No dependencies set.

Reference: gc/gc-wing#29
No description provided.