How thelemoh/digital-twin works
This is a Nuxt-based environmental digital-twin application centered on viewing monitoring sites and model data on a map over a selected date range. The main workflow loads and filters site observations, derives map features and averages, and presents them alongside indicator, timeline, and site-detail views. Separate map layers support raster and terrain visualization; profiler and weather-model dialogs form additional analysis branches. The README is only a Nuxt starter, and sampled source does not establish wiring for every listed subsystem, so uncertain links are omitted.
Main entry points: index.vue Map page · useSite.ts Site data workflow · useTwinTiles.js Twin raster · dataService.ts Observation data service
Components 28
Application shell
- Map page
app/pages/index.vue - App state
app/app.vue - Indicators
app/components/Indicator/components/Indicators.vue - Timeline
app/components/Timeline/components/Timeline.vue - Site list page
app/pages/list.vue
Site observations
- Site data workflow
app/composables/useSite.ts - Data service registration
app/core/data/register.ts - Observation data service
app/core/data/dataService.ts - Site features
app/core/features/createSiteFeature.ts - Site filters
app/core/filters/siteFilter.ts
Map visualization
- Map view
app/components/Map/components/Map.vue - Map setup
app/components/Map/composables/useMap.ts - Site layer
app/components/Map/composables/useSiteLayer.ts - Polygon layers
- Terrain layer
app/components/Map/composables/useTerrain.ts - DeckGL layer
app/components/Map/composables/useDeckGL.js - Twin raster
app/components/Map/composables/useTwinTiles.js - TIFF parser
app/core/tiff/parseTiff.js
Analysis tools
- Observation averages
app/core/avg/avg.ts - Site detail dialog
app/components/SiteDialog/composables/useSiteDialog.ts - Profiler analysis
app/components/ProfilerDialog/composables/useProfilerDialog.ts - Profiler data service
app/core/data/registerProfiler.ts - GFS dialog
app/components/Dialog/composables/useDialog.js - Wind calculation
app/core/wind/calculateWind.ts - Calculations UI
app/components/Сalculations/components/BodyCalculation.vue
Other components
- User
- Raster service
- Sensor API
Connections 28
- User → Map page: opens
- Map page → App state: uses shared state
- Map page → Site data workflow: loads site data
- Site data workflow → Data service registration: uses service
- Data service registration → Observation data service: provides
- Observation data service → Sensor API: fetches observations
- Sensor API → Observation data service: returns observations
- Site data workflow → Site filters: filters sites
- Site data workflow → Site features: builds features
- Site data workflow → Observation averages: computes averages
- Map page → Map view: renders
- Map page → Map setup: initializes map
- Map page → Site layer: sets up layer
- Map page → Polygon layers: sets up layers
- Map page → Terrain layer: sets up layer
- Map page → DeckGL layer: sets up layer
- Map page → Twin raster: sets up raster
- Twin raster → Raster service: fetches TIFF
- Twin raster → TIFF parser: parses TIFF
- Map page → Indicators: renders
- Map page → Timeline: renders
- Map page → Site detail dialog: renders when selected
- Map page → Profiler analysis: renders profiler
- Profiler analysis → Profiler data service: loads profiler data
- Map page → GFS dialog: hosts dialog
- GFS dialog → Wind calculation: calculates wind
- Map page → Calculations UI: renders
- Map page → Site list page: links to list view