Disaster response & resource logistics on a 3D globe.
GeoSentinel identifies active disaster regions, locates nearby hospitals, and computes terrain-aware optimal routes between a disaster region and the best-matching hospitals. It scores every candidate path on distance, elevation gain, and terrain difficulty, not just geographic length.
- Disaster identification — live UN GDACS event feed (earthquakes, cyclones, floods, volcanoes, wildfires, droughts) with a bundled offline snapshot when the feed is unreachable. Each region shows its type, coordinates, alert level, severity, and relevant briefing info.
- Hospital identification — curated global trauma-center database plus live OpenStreetMap (Overpass) facilities around the selected disaster. Hospitals appear as clear map icons.
- Terrain-aware optimal routing — candidate road routes (OSRM, keyless)
are sampled and scored with an objective that combines path distance,
total elevation gain, and slope-derived terrain difficulty
(
cost = km × (1 + difficulty × 0.35) + gain/100 × 0.8). Elevation comes from the keyless Open-Meteo elevation API. - Route information — the user chooses how many routes to compute (1–5); each route is drawn on the globe with total length, elevation range/gain, max slope, terrain rating, and its destination hospital.
- Hospital capacity — clicking a hospital icon shows name, bed capacity, rating, phone number, coordinates, and current capacity status.
- Clean map interaction — Google Maps-style navigation controls (pan pad, compass, tilt, zoom, reset), keyless place search (Nominatim) that flies the globe to the selection, a disable-able vignette, and a clean-view mode that hides all panels.
The app starts directly on the main view, centered on Mumbai, India — no startup dialogs.
npm install
npm run dev # http://localhost:4173Optional: copy .env.example to .env and add a GOOGLE_MAPS_API_KEY and/or
CESIUM_ION_TOKEN for photorealistic 3D tiles. Without keys the app runs on
the keyless satellite globe (Esri World Imagery / OSM).
npm test # unit tests: routing math, hospital data, normalization
npm run build # production build
npm run smoke # headless-browser acceptance run (needs `npm run dev` up)Only keyless public services plus two optional client-side map keys:
| Concern | Service | Key |
|---|---|---|
| Globe / 3D tiles | Cesium ion, Google Photorealistic 3D Tiles | optional |
| Basemap fallback | Esri World Imagery / OpenStreetMap | none |
| Disaster data | UN GDACS (+ bundled snapshot) | none |
| Hospital data | OpenStreetMap Overpass (+ curated DB) | none |
| Elevation / terrain | Open-Meteo elevation API | none |
| Routing | OSRM demo router | none |
| Place search | OpenStreetMap Nominatim | none |
Attribution for imagery providers is shown in the bottom-left credit line.
- CesiumJS — 3D globe rendering
- Vite + vite-plugin-cesium — build and dev server
- Vanilla ES modules — no framework
MIT — see LICENSE.