Zoom through ultra-large NASA Earth imagery, scrub time, and label what you discover — one Flutter codebase for Web & Mobile.
GeoMatrix is a clean, modern viewer for massive NASA Earth imagery. It lets anyone:
- Deep zoom & pan across billions of pixels (tiled layers)
- Time-travel with a date slider (before/after comparison)
- Annotate discoveries with simple pins and labels
- Export annotations (JSON/GeoJSON) for sharing or analysis
Built for the NASA International Space Apps challenge — with a focus on performance, clarity, and accessibility.
We use NASA EOSDIS GIBS (Global Imagery Browse Services) WMTS tiles in Web Mercator:
-
Base layer (default):
MODIS_Terra_CorrectedReflectance_TrueColor(daily global true color) -
URL pattern (example):
https://gibs.earthdata.nasa.gov/wmts/epsg3857/best/ MODIS_Terra_CorrectedReflectance_TrueColor/default/{time}/ GoogleMapsCompatible_Level9/{z}/{y}/{x}.jpg -
{time}=YYYY-MM-DD -
Add overlays later (fires, floods, dust) with the same pattern.
Attribution: Imagery © NASA EOSDIS GIBS. Please include this credit in any derivative work.
Earth data is huge — but insights are hidden until we zoom, compare time, and label what we see. GeoMatrix turns that into a fast, intuitive workflow usable by students, citizen scientists, and researchers.
- Fluid map experience (60fps pan/zoom where possible)
- Time slider to explore daily imagery
- Annotations: tap/long-press to drop pins, add labels + confidence
- Export: download your findings as JSON/GeoJSON (local-only MVP)
- Single codebase: Flutter powers Web + Android + iOS
lib/
main.dart # App entry & routing
theme/ # Brand theme (dark + green accents)
map/ # MapView, tile layers, date slider
annotations/ # Model, state, export utils
data/ # Layer catalog + date utilities
assets/
config/layers.json # Layer IDs, tile matrix, formats, date range
docs/
assets/ # Screenshots/GIFs for README & demo
Config example (assets/config/layers.json):
{
"dateRange": { "start": "2025-08-15", "end": "2025-09-14" },
"defaultLayer": "trueColor",
"layers": {
"trueColor": {
"id": "MODIS_Terra_CorrectedReflectance_TrueColor",
"projection": "epsg3857",
"matrix": "GoogleMapsCompatible_Level9",
"format": "jpg",
"attribution": "Imagery © NASA EOSDIS GIBS"
}
}
}- Flutter SDK (stable), Chrome for web, Android/iOS toolchains as needed
flutter doctor
flutter config --enable-web# Install deps
flutter pub get
# Web
flutter run -d chrome
# Android (example)
flutter emulators --launch <id>
flutter run -d <deviceId>
# iOS (on macOS)
open ios/Runner.xcworkspace # first build
flutter run -d iphone- Pick a date with the slider
- Zoom to your region of interest
- Long-press / tap to drop a pin
- Label it (e.g., “burn scar”, “smoke plume”)
- Export your annotations as JSON/GeoJSON
Annotation schema (MVP):
{
"id": "uuid",
"lat": 41.7151,
"lng": 44.8271,
"label": "dust plume",
"confidence": 0.8,
"date": "2025-09-01",
"layer": "trueColor"
}- Open GeoMatrix → set date D1
- Zoom to a prepared showcase (docs list)
- Slide to D2 → observe change
- Drop 2 pins (“active fire”, “smoke trail”)
- Export JSON → show contents
- Dark UI with green accents (GeoMatrix vibe)
- Minimal chrome; controls float on the map
- Clear attribution + tiny legend (“Pick date → Zoom → Label → Export”)
- Layer picker (fires, floods, snow/ice)
- Polygon annotations + distance/area tools
- Timelapse (GIF) for a date range
- Firebase auth + cloud sync + share links
- Basic moderation/collaboration
PRs and issues welcome! Please:
- Keep layers & dates in
assets/config/layers.json - Add screenshots/GIFs for UI changes
- Use concise, descriptive commit messages
- Code: MIT (see
LICENSE) - Data: Imagery © NASA EOSDIS GIBS — follow NASA usage & attribution guidance.
- NASA Space Apps for the challenge & community
- EOSDIS GIBS team for open, high-quality global imagery
A Project By: Roham Hamidi | Liza Akishbaia | Ana Enukishvili |


