Skip to content

daktu32/geoscope

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

67 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

GeoScope

GeoScope logo

Open. See. Explore. — GFD Data Visualization, Reimagined.

Status Language License


A next-generation desktop app for visualizing geophysical fluid dynamics (GFD) data. Drop a NetCDF file, get an instant 3D globe with smart variable inference — no config needed.

Built as a modern replacement for GrADS / Panoply / ncview.

Key Features

Views

View Description
Globe Interactive 3D sphere with wgpu rendering, camera rotation & zoom, atmospheric glow effect
Map Equirectangular, Mollweide, and Polar Stereographic (N/S) projections with pan & zoom
Hovmoller Time-longitude heatmap diagram
Cross-Section Vertical slice heatmap (Fix Lat / Fix Lon)
Profile 1D line graph — vertical profile or time series with hover crosshair
Spectrum E(n) total wavenumber, E(m) zonal wavenumber bar chart, E(ω) temporal frequency spectrum

Overlays

Overlay Description
Vector Arrows Wind field arrows on Globe/Map with auto u/v pair detection
Contour Lines Isolines via Marching Squares with value labels (Globe/Map)
Streamlines RK4-integrated streamlines with arrowheads
Trajectory Particle trajectory with full path history, start marker, and current position dot

Data Intelligence

  • 3-Stage Variable Inference — CF standard_name → name heuristics → data statistics
  • Visualization Suggestion — Auto-recommends view, colormap, and overlays based on variable analysis
  • Trajectory Pair Detection — Auto-finds 1D lon/lat variable pairs for trajectory overlay
  • Wind Pair Detection — Auto-detects u/v wind component pairs
  • Units-Aware — Auto-converts radians to degrees for trajectory data

Interaction

  • Time Animation — Play/pause with adjustable speed, frame-step buttons
  • Level Selection — Floating vertical level slider for 3D data
  • Colormap Range — Slice / Global / Manual scaling + symmetric (0-centered) mode
  • Point Info — Hover on Map to see lat/lon/value; click Globe/Map to select profile point
  • Interactive Profile — Click Globe/Map → split view with vertical/time/T-Lev profile
  • Multi-File — Open multiple NetCDF files, switch between them
  • Drag & Drop — Drop NetCDF files to open instantly
  • PNG/GIF Export — Publication-quality export with axes, colorbar, title; GIF animation export
  • Code Generation — Bidirectional Python (xarray + cartopy + matplotlib) code panel
  • Rhai Scripting — Programmable automation via Rhai script engine
  • Spectral Filter — Wavenumber truncation filter (ispack-rs integration)
  • Temporal Filter — Time-domain lowpass filter for smoothing time series (FFT-based)
  • Context Menu — Right-click Globe/Map for Profile here / Export PNG / Center here
  • Collapsible Panels[/] keys to toggle Data Browser / Inspector
  • Session Persistence — Auto-save/restore app state across sessions

AI & Automation

  • LLM Copilot — Chat sidebar with Claude API (Explain / Explore quick actions, markdown rendering)
  • Command PaletteCmd+K fuzzy search for views, colormaps, projections, overlays, exports
  • Recipe Save/Load — Save visualization settings as .py recipes, load & apply
  • MCP Server — Machine-readable control interface for external tool integration
  • i18n — English / Japanese UI switching

10 Colormaps

Sequential: Viridis, Plasma, Inferno, Cividis, YlGnBu, Turbo Diverging: RdBu_r, Coolwarm, BrBG, PiYG

Keyboard Shortcuts

Key Action
Space Play / Pause animation
Left / Right Step time backward / forward
Up / Down Step level up / down
16 Switch view (Globe / Map / Hovmoller / Spectrum / Profile / Section)
G Toggle Grid / Smooth interpolation
C Toggle contour overlay
V Toggle streamline overlay
T Toggle trajectory overlay
W Toggle spectral filter
[ / ] Toggle left / right panel
Cmd+K Open command palette

Quick Start

Prerequisites

  • Rust toolchain (stable)
  • HDF5 1.10
# macOS
brew install hdf5@1.10

# Set HDF5 path (already configured in .cargo/config.toml for Homebrew default)

Build & Run

git clone https://github.com/daktu32/geoscope.git
cd geoscope

# Download sample data (requires GitHub CLI)
./samples/download.sh

cargo run --release -- samples/rossby_haurwitz.nc

Or launch without arguments and use the + button in the Data Browser to open files.

Sample Data

Full-resolution sample NetCDF files are available from GitHub Releases:

File Size Description Try
rossby_haurwitz.nc 62 MB Rossby-Haurwitz wave, 1001 steps Globe + contour (C) + streamlines (V)
beta_gyre.nc 158 MB Beta-plane gyre + trajectory Trajectory (T) + animation (Space)
held_suarez.nc 26 MB 3D atmosphere, 10 levels Cross-section (6) + level slider

See samples/README.md for download instructions.

Tech Stack

Layer Technology Version
GUI Framework eframe + egui_dock 0.33 / 0.18
GPU Rendering wgpu (via eframe) 27
Data I/O netcdf-rs 0.12
Image/GIF Export image + gif 0.25 / 0.13
Spectral Transforms ispack-rs path dep
Scripting rhai 1
LLM API ureq (Claude API) 2
File Dialog rfd 0.15
HDF5 Backend hdf5 (Homebrew) 1.10

Architecture

src/
├── main.rs                 # Entry point (D&D, 1280x800)
├── app.rs                  # App state, eframe integration, SidePanel layout
├── data/
│   ├── mod.rs              # DataStore, NetCDF I/O, field/profile/trajectory loading
│   ├── inference.rs        # 3-stage variable inference + visualization suggestion
│   ├── spectral_filter.rs  # Wavenumber filter (ispack-rs, spectral truncation)
│   ├── temporal_filter.rs  # Temporal FFT spectrum + lowpass filter (ispack-rs RealFftPlan)
│   └── trajectory_loader.rs # External trajectory loading (JSON/CSV)
├── renderer/
│   ├── common.rs           # Shared types, view_proj matrix, colormap LUT
│   ├── globe.rs            # 3D globe (wgpu, UV sphere, WGSL shader)
│   ├── map.rs              # 2D map (wgpu, Equirect/Mollweide/Polar)
│   ├── hovmoller.rs        # Hovmoller diagram (egui)
│   ├── cross_section.rs    # Vertical cross-section (egui)
│   ├── spectrum.rs         # E(n)/E(m)/E(ω) energy spectrum (egui)
│   ├── profile.rs          # 1D profile / time series (egui)
│   ├── contour.rs          # Contour lines — Marching Squares (egui)
│   ├── streamline.rs       # Streamlines — RK4 integration (egui)
│   ├── trajectory.rs       # Trajectory overlay (egui)
│   ├── vector_overlay.rs   # Wind arrows (egui)
│   ├── bitmap_font.rs      # 5x7 bitmap font (publication export)
│   └── export.rs           # PNG/GIF export (image + gif crate)
├── copilot/
│   ├── mod.rs              # LLM Copilot hub
│   ├── llm_client.rs       # Claude API client (ureq, background thread)
│   └── context.rs          # GFD domain knowledge + view context generation
├── codegen/
│   ├── mod.rs              # Code generation hub
│   ├── python.rs           # Python (xarray+cartopy+matplotlib) generator
│   ├── parser.rs           # Python → GUI reverse parser (bidirectional sync)
│   ├── rhai_engine.rs      # Rhai script engine (GeoScope API)
│   └── cmd_palette.rs      # Command palette (fuzzy match + action execution)
├── mcp/
│   └── mod.rs              # MCP server (JSON-RPC, tool control interface)
├── i18n.rs                 # Internationalization (EN/JA, t("key") lookup)
└── ui/mod.rs               # UI panels (DataBrowser, Viewport, Inspector, CodePanel, Copilot)

Roadmap

Version Goal Status
v0.1 Globe + Map + Hovmoller + Spectrum + Export Done
v0.2 Mollweide + Cross-Section + Vector Overlay + Level/Range control Done
v0.3 Point Info + Profile + Contour + Streamline + Polar Stereo + GIF Export + Spectral Filter Done
v0.4 Visualization Suggestion + Trajectory + Code Panel + Rhai Scripting + Recipe Save/Load Done
v0.5 LLM Copilot + Command Palette Done
v0.6 i18n + MCP + E(m) bar chart + E(ω) temporal spectrum + temporal filter + Copilot markdown Done (current)
Future WebAssembly + WebGPU browser version Planned

Relationship to dcmodel

GeoScope is part of the dcmodel ecosystem — numerical models and libraries for GFD developed by the GFD Dennou Club.

ispack-rs  →  spmodel-rs  →  GeoScope
(spectral      (spectral      (visualization)
 transforms)    models)        ← you are here

Primary use case: visualizing output from ispack-rs / spmodel-rs shallow water and atmospheric models. Any CF-compliant NetCDF file is supported.

Documentation

License

MIT License. See LICENSE for details.

Acknowledgments

  • GFD Dennou Club — the research community behind dcmodel
  • ISPACK by K. Ishioka — the spectral transform library that started it all

About

GFD data visualization desktop app — 3D globe, maps, overlays, smart inference. Drop a NetCDF, explore instantly.

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages