Rooftop solar energy potential mapping via satellite imagery and geospatial intelligence.
Solar Sight is a research-grade geospatial pipeline that quantifies rooftop photovoltaic potential at the individual building level across any geographic region — without field surveys or ground-truth instrumentation. By fusing Sentinel-2 multispectral imagery and MODIS thermal data from Google Earth Engine with OpenStreetMap building footprints and computer vision detection, it delivers per-building suitability scores, energy yield forecasts, and installation-priority rankings that urban planners and energy researchers can act on directly.
The system operates at two spatial scales: a 10 m Sentinel-2 mode for high-precision per-building analysis, and a 1 km MODIS mode for regional solar resource surveys — both accessible through a multi-page Streamlit web interface with interactive Folium maps.
- Per-building suitability ranking — Five-factor composite score (irradiance, cloud frequency, rooftop area, accessibility, structural quality) with High / Medium / Low classification, exported as XLSX and GeoJSON.
- Dual-resolution satellite pipeline — Sentinel-2 at 10 m for building-scale precision; MODIS MOD11A1 at 1 km for regional climatology — all preprocessed serverside on Google Earth Engine.
- Energy yield estimation — Annual kWh forecast per building using the standard performance equation with configurable panel efficiency and system performance ratio.
- Interactive web dashboard — Nine-page Streamlit app with folium maps, building explorer, validation dashboard, and export manager; runs locally or deploys to Streamlit Cloud.
- Statistical validation — RMSE, R², MAE, bias with 95% confidence intervals and bootstrap resampling against reference data.
| Layer | Tech |
|---|---|
| Language | Python 3.8+ |
| Satellite access | Google Earth Engine API (earthengine-api) |
| Geospatial | geopandas · rasterio · shapely · pyproj · fiona |
| Scientific computing | numpy · scipy · pandas · scikit-learn |
| Computer vision | scikit-image · Pillow |
| Cartographic output | cartopy · matplotlib · seaborn (300 DPI) |
| Interactive maps | folium · streamlit-folium |
| Web interface | streamlit |
| Testing | pytest · hypothesis (property-based) |
| Configuration | PyYAML · python-dotenv |
Why Google Earth Engine over downloading raw imagery? GEE runs Sentinel-2 and MODIS preprocessing serverside on Google's infrastructure — no raw GeoTIFF downloads, no local storage requirements. This lets the system analyse arbitrarily large study areas on commodity hardware and removes the need to manage satellite data pipelines entirely.
Why two satellite sources (Sentinel-2 + MODIS) rather than one? Sentinel-2 gives 10 m spatial resolution for building-scale analysis but has no long-term thermal product. MODIS provides daily 1 km Land Surface Temperature and a multi-year archive for regional cloud climatology. Fusing both gives precision where it matters (buildings) and context where breadth matters (regional solar resource).
Why a weighted linear scoring model rather than ML for suitability? The five-factor weighted combination is fully auditable — every score traces directly to its input metrics. An ML approach would require labelled ground-truth data that is expensive and geographically limited. The deterministic model generalises to any location immediately and lets analysts adjust weights for local priorities (e.g., raising the cloud-frequency weight in monsoon regions).
What would you do differently in v2? Replace the accessibility and structural-quality heuristics (currently based on building type and height proxies) with actual roof-type detection from high-resolution aerial imagery, and add real-time GEE task status polling so the Streamlit UI updates without page reloads.
| Metric | Value |
|---|---|
| Buildings analysed | 51 |
| Total assessable rooftop area | 94,707 m² |
| Estimated annual energy yield | 4,769.8 MWh/yr |
| Aggregate installed capacity | 17.97 MW |
| Mean surface irradiance | 198.9 W/m² |
| Document | Description |
|---|---|
| PRD | Product requirements — goals, user stories, non-goals |
| Architecture | System design, data flow, component breakdown |
| Decisions | Every major technical decision and why |
| Setup | Local dev setup, env vars, deployment |
Tanish Poddar — tanisheesh.in · LinkedIn · GitHub