Inspiration
Every rainy season, floods in East African communities catch people off guard not because the risk was unknowable, but because the data that could have predicted it lives in scattered places: satellite archives, weather stations, and sensors that never talk to each other. We kept coming back to the same question: what if a city planner or a disaster relief coordinator could see a flood coming days before it happened, on a live map, instead of finding out when the water's already at someone's door? That question became the starting point for this project a geospatial intelligence system that fuses IoT ground sensors with satellite data and machine learning to simulate environmental change before it becomes a crisis.
What it does
The system pulls together three layers of environmental data satellite imagery (vegetation health, rainfall, land surface temperature), soil and terrain data, and live readings from IoT ground sensors and fuses them into a single, continuous picture of a region. From there, it runs two kinds of simulation:
- Predictive models (Random Forest regression/classification) that turn historical patterns into forecasts soil moisture, flood risk, land condition for any point on the map.
- Spatial simulations (cellular automata) that model how water actually moves across terrain over time, cell by cell, based on elevation and rainfall.
The output isn't just a number it's exported as a terrain heightmap for visualization, and as GeoJSON risk zones that a city planner or relief team can drop straight into a map, showing exactly which areas are safe, at risk, or already flooding.
How we built it
The backend is Python, structured as a pipeline:
- Ingestion — Google Earth Engine pulls Sentinel-2 NDVI, CHIRPS rainfall, MODIS land surface temperature, and SoilGrids soil data for any area of interest; a sensors module ingests and validates live IoT ground readings (soil moisture, temperature) against that satellite baseline.
- Fusion — sparse sensor points are interpolated (IDW and kriging) into continuous grids that line up with the satellite data, so ten physical sensors can inform predictions across an entire region.
- Prediction & simulation —
scikit-learnmodels are trained on the fused feature stack, then applied pixel-by-pixel to produce prediction surfaces; a NumPy-based cellular automata engine simulates flood/runoff spread across the terrain over time. - Export & serving — results are written out as GeoTIFFs, 16-bit heightmap PNGs (for terrain visualization), and GeoJSON zones, with a FastAPI service so a frontend can query live predictions instead of relying only on pre-baked runs.
We designed it around EPSG:4326 for storage and a local UTM projection for any real distance/area math, since precision on scale matters when the output is "how far will the water reach."
Challenges we ran into
Getting the geospatial stack (GDAL, rasterio, fiona) to install reliably was harder than any of the modeling work version mismatches between Python, GDAL, and downstream libraries caused repeated breakage, especially when we tried deploying rather than just running locally; conda ended up being far more reliable than pip here. Fusing sparse point sensor data with dense satellite grids without introducing artifacts at the edges of coverage also took real tuning — a naive interpolation created obviously wrong "hot spots" around isolated sensors until we brought in proper kriging with an uncertainty surface. And translating a raster prediction into something a game engine or web map can actually render (correct scale, correct orientation, consistent value ranges across simulation frames) turned out to be its own small project.
Accomplishments that we're proud of
We built a system that goes from raw satellite/sensor data to a runnable flood simulation and exportable terrain — not just a model that outputs a probability, but a pipeline that a planner could genuinely act on. We're proud that it's grounded in real, free, accessible data sources (Earth Engine, CHIRPS, NASA POWER) rather than requiring expensive proprietary feeds, which matters a lot for deployability in the East African context this was designed for.
What we learned
We learned how much of "AI for disaster prediction" is actually data engineering — getting satellite, weather, and sensor data into a common grid and coordinate system was a bigger lift than training the models themselves. We also came to appreciate the value of an uncertainty surface, not just a prediction: knowing where a forecast is trustworthy and where it isn't is exactly the kind of information a relief coordinator needs to make a real decision under pressure.
What's next for GIS environment sim
Next after my graduation and final year project is closing the loop between simulation and action: live IoT sensor deployment in a real pilot region, a proper frontend (map-based dashboard for planners, procedural terrain visualization for the flood simulation itself), and extending the cellular automata model to account for drainage infrastructure and land-use change, not just elevation and rainfall. Longer term, we want to generalize the pipeline beyond floods — the same architecture applies directly to drought and crop-risk prediction for agriculture, which is where this work originally started.
Log in or sign up for Devpost to join the conversation.