earth-view-globe
Tooling for development and debugging of the Earth View globe components.
Install
mkdir -p .claude/skills/earth-view-globe && curl -L -o skill.zip "https://agentskills.codes/api/skills/download/12503" && unzip -o skill.zip -d .claude/skills/earth-view-globe && rm skill.zipInstalls to .claude/skills/earth-view-globe
Activation
This is the description your AI agent reads to decide when to run this skill — the better it matches your request, the more reliably it fires.
Work on Earth View's globe experience. Use when editing or debugging the Three.js globe, NASA GIBS globe textures, camera controls, max-zoom 2D overlay, globe layer hotkeys, GIBS overlay stack, city/boundary labels, event overlays, or globe-to-modal point selection flow.Key capabilities
- →Debug Three.js globe components
- →Adjust NASA GIBS globe textures
- →Tune camera controls and behavior
- →Manage max-zoom 2D overlay
- →Implement globe layer hotkeys
How it works
This skill provides direct access and guidance for modifying Earth View's globe architecture, including Three.js components, GIBS overlays, and camera controls.
Inputs & outputs
When to use earth-view-globe
- →Debug globe
- →Adjust overlays
- →Work on map labels
About this skill
Earth View Globe
Use this skill to move quickly through the globe-side architecture without rediscovering the whole app.
Start Here
Read these files first, in this order:
src/App.tsxfor composition ofGlobe,MaxZoomImagery,CameraHotkeys, andImageryModal.src/components/Globe/Globe.tsxfor the canvas, camera reporting, global GIBS texture selection, overlays, and selection handoff.src/components/Globe/MaxZoomImagery.tsxfor the 2D detailed overlay shown at max zoom.src/components/Globe/CameraHotkeys.tsxfor the floating imagery panel, number keys, overlay stack UI, overlay loading state, and activity toggles.src/store/useAppStore.tsfor shared state and globe-to-modal transitions.
Mental Model
Treat the globe view as the broad exploration surface. It renders a Three.js sphere with global NASA GIBS WMS textures, optional transparent GIBS overlays, boundary/city/event context, and camera-derived viewport state.
The globe does not render Sentinel as a true sphere texture. If the active provider has no layerId, Globe.tsx falls back to viirs-noaa20 for the global texture. Sentinel imagery belongs to max-zoom/regional/modal flows.
Core Files
src/components/Globe/Globe.tsx: canvas, lights, starfield, Earth texture URLs, overlay textures/load status, activity overlays,AdaptiveControls.src/components/Globe/Earth.tsx: texture loading/caching, sphere mesh, shift-click and right-click selection handlers.src/components/Globe/MaxZoomImagery.tsx: flat detailed imagery overlay, viewport bbox math, drag-to-pan, shift/right-click selection from image coordinates.src/components/Globe/CameraHotkeys.tsx: imagery panel, number-key layer switching, visibility toggle, overlay add/reorder/remove, overlay load icons, activity toggles.src/components/Globe/BoundaryLines.tsx: Natural Earth boundaries and graticule geometry.src/components/Globe/CityLabels.tsx: tiered globe labels hidden when modal or max-zoom overlay is active, with low HTML z-index so app panels stay above labels.src/components/Globe/EventOverlays/*: USGS/EONET fetches, marker details, hover popups, and markers/tracks.src/lib/geo.ts: lat/lon vector math, bbox math, zoom conversions, coordinate formatting.
State Flow
useAppStore is the contract between the globe and the rest of the app.
globeView: current center lat/lon, spans, camera distance, andatMaxZoom.layerId: active imagery provider.overlayLayerIds: ordered GIBS overlay stack.overlayLoadStatuses: per-overlay loading/loaded status keyed by provider id and texture URL.activityOverlays:earthquakes,volcanoes, andstorms.imageryVisible: base imagery visibility toggle.selectPoint(lat, lon, zoom?): opens the modal and sets selected point.focusGlobeAt(lat, lon, options?): recenters the camera, used by max-zoom panning and modal-related flows.
When changing globe behavior, preserve this state contract unless the user explicitly wants a larger state redesign.
Max-Zoom Overlay
AdaptiveControls marks atMaxZoom when camera distance is <= 1.085. MaxZoomImagery then:
- Builds a bbox from the reported globe center and viewport spans.
- Requests
provider.fetchImage({ bbox, date, width, height }). - Shows a full-screen 2D image over the canvas.
- Lets drag gestures update the globe center with
focusGlobeAt. - Converts image click coordinates back to lat/lon and passes an
imageryViewintoselectPoint, so the modal can open at a matching regional scale. - Suppresses itself on scroll-out and returns when max-zoom state is re-entered.
Do not treat max zoom as only visual decoration; it is part of the modal handoff.
Camera And Drag Tuning
AdaptiveControls dynamically adjusts OrbitControls speeds from camera distance:
zoomSpeedeases fromMIN_ZOOM_SPEEDnear the surface toMAX_ZOOM_SPEEDat wide globe distance.rotateSpeedandpanSpeeduse the same distance-aware idea so dragging close to max zoom feels less jumpy.- When changing these constants, test both almost-max zoom before the detailed overlay loads and full max-zoom overlay drag.
Overlays And Activity Markers
GIBS analytic overlays are registered with overlayOnly: true. CameraHotkeys.tsx should keep the overlay add menu filtered to provider.overlayOnly && provider.layerId, so base imagery options do not appear as overlays. Globe.tsx marks overlay textures as loading when their URL changes, and Earth.tsx reports loaded textures back through onOverlayReady.
Activity overlays are browser-fetched and intentionally resilient:
EarthquakeMarkers.tsxuses USGS all-day GeoJSON, filters to magnitude 2.5+, colors markers by magnitude, and keeps title/place/time/depth/status/link metadata for hover details.VolcanoMarkers.tsxuses NASA EONET open volcano events. EONET geometry dates are observation/report dates, not verified last-eruption dates. Volcano markers use thevolcanoX-shape variant so they are visually distinct from earthquake crosshairs.StormTracks.tsxuses NASA EONET open severe-storm events, renders point history as line segments, and keeps latest/peak intensity, dates, and source links when available.ActivityCrosshair.tsxrenders dark-stroked marker shapes plus invisible square hit targets. If several hit targets overlap, it chooses the marker whose center is closest to the pointer.ActivityHoverPopup.tsx,activityHoverStore.ts, andeventDetails.tsown the shared hover popup state and date/recency formatting.
Common Tasks
For a globe control or hotkey change, start in CameraHotkeys.tsx and confirm modal-open guards remain intact.
For camera or zoom behavior, start in AdaptiveControls inside Globe.tsx, then inspect MaxZoomImagery.tsx if the change affects the detailed overlay.
For selection behavior, check both Earth.tsx and MaxZoomImagery.tsx; the sphere and flat overlay have separate coordinate conversion paths.
For activity overlays, keep browser fetches resilient. Failed feeds should render no markers rather than breaking the globe.
For labels/boundaries, keep modalOpen and atMaxZoom visibility behavior in mind. City labels intentionally disappear when the modal or max-zoom overlay is active, and should stay behind app UI panels when visible.
Validation
Run at least:
npm run lint
For visual/camera changes, also run the dev server and inspect:
- regular globe at initial zoom
- max-zoom overlay
- shift-click/right-click modal opening from both sphere and overlay
- imagery panel while modal is closed
- overlay loading indicators and overlay candidate hover summaries
- activity marker hover details, especially overlapping marker selection
- absence of imagery panel/hotkeys while modal is open
When not to use it
- →When the task requires Sentinel imagery as a true sphere texture
- →When working on Sentinel imagery for max-zoom/regional/modal flows
- →When the change affects state contract without explicit redesign
Limitations
- →Does not render Sentinel as a true sphere texture
- →Assumes `useAppStore` contract unless redesign is explicit
- →Requires testing both almost-max zoom and full max-zoom overlay drag for camera changes
How it compares
This workflow offers a structured approach to modifying specific globe components, unlike navigating the entire application codebase without guidance.
Compared to similar skills
earth-view-globe side by side with the closest alternatives in the catalog.
| Skill | Installs | Updated | Safety | Difficulty |
|---|---|---|---|---|
| earth-view-globe (this skill) | 0 | 2mo | Review | Advanced |
| d3-visualization | 7 | 4mo | No flags | Advanced |
| antv-l7 | 2 | 1mo | No flags | Intermediate |
| infographic-structure-creator | 1 | 5mo | No flags | Intermediate |
Try saying
Example prompts that trigger this skill in your AI assistant.
You might also like
d3-visualization
lyndonkl
Use when creating custom, interactive data visualizations with D3.js—building bar/line/scatter charts from scratch, creating network diagrams or geographic maps, binding changing data to visual elements, adding zoom/pan/brush interactions, animating chart transitions, or when chart libraries (Highcharts, Chart.js) don't support your specific visualization design and you need low-level control over data-driven DOM manipulation, scales, shapes, and layouts.
antv-l7
antvis
Comprehensive guide for AntV L7 geospatial visualization library. Use when users need to: (1) Create interactive maps with WebGL rendering (2) Visualize geographic data (points, lines, polygons, heatmaps) (3) Build location-based data dashboards (4) Add map layers, interactions, or animations (5) Process and display GeoJSON, CSV, or other spatial data (6) Integrate maps with AMap (GaodeMap), Mapbox, Maplibre, or standalone L7 Map (7) Optimize performance for large-scale geographic datasets
infographic-structure-creator
antvis
Generate or update infographic Structure components for this repo (TypeScript/TSX in src/designs/structures). Use when asked to design, implement, or modify structure layouts (list/compare/sequence/hierarchy/relation/geo/chart), including layout logic, component composition, and registration.
infographic-item-creator
antvis
Generate or update infographic Item components for this repo (TypeScript/TSX in src/designs/items). Use when asked to design, implement, or modify data item visuals, layout logic, or registerItem composites.
nextjs-developer
zenobi-us
Expert Next.js developer mastering Next.js 14+ with App Router and full-stack features. Specializes in server components, server actions, performance optimization, and production deployment with focus on building fast, SEO-friendly applications.
zustand
lobehub
Zustand state management guide. Use when working with store code (src/store/**), implementing actions, managing state, or creating slices. Triggers on Zustand store development, state management questions, or action implementation.