A modular geospatial intelligence pipeline for high-precision assessment of rooftop solar energy viability — powered by Sentinel-2 multispectral imagery, MODIS thermal data, and building-level suitability scoring.
Solar Sight is a research-grade remote sensing system that quantifies rooftop photovoltaic potential at the building level across any geographic region. By fusing multi-resolution satellite observations from Google Earth Engine with OpenStreetMap building footprints and computer vision–based detection, the system produces ranked, actionable outputs that characterise solar installation viability for individual structures — without relying on field surveys or ground-truth instrumentation.
The pipeline operates at two levels of spatial granularity:
| Mode | Satellite Source | Resolution | Output |
|---|---|---|---|
| High-Precision | Sentinel-2 MSI | 10 m | Per-building ranked suitability + energy forecast |
| Regional Survey | MODIS MOD11A1 | 1 km | Area-wide irradiance and cloud climatology maps |
Rapid rooftop solar deployment is constrained by the prohibitive cost of site-by-site physical assessments. Existing regional solar atlases operate at coarse resolution (≥1 km) and provide no actionable building-scale intelligence. Solar Sight bridges this gap by leveraging freely available multi-spectral satellite archives to deliver sub-10 m suitability intelligence at zero marginal survey cost, enabling urban planners, energy researchers, and municipal authorities to prioritise solar investments with quantitative rigour.
┌─────────────────────────────────────────────────────────────────┐
│ Solar Sight Pipeline │
│ │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────────┐ │
│ │ Data │ │ Data │ │ Suitability │ │
│ │ Extraction │───▶│ Processing │───▶│ Analysis │ │
│ │ │ │ │ │ │ │
│ │ GEE / S2 │ │ Irradiance │ │ Weighted │ │
│ │ GEE / MODIS │ │ Cloud Cover │ │ Scoring Engine │ │
│ └──────────────┘ │ Solar Calc │ └────────┬─────────┘ │
│ └──────────────┘ │ │
│ ┌──────────────┐ ┌──────────────┐ ┌────────▼─────────┐ │
│ │ Output & │ │ Validation │ │ Building │ │
│ │ Export │◀───│ & Metrics │◀───│ Detection │ │
│ │ │ │ │ │ (OSM + CV) │ │
│ │ XLSX/GeoJSON │ │ RMSE/R²/Bias │ │ │ │
│ └──────────────┘ └──────────────┘ └──────────────────┘ │
└─────────────────────────────────────────────────────────────────┘
│
┌────────────────▼──────────────────┐
│ Streamlit Web Interface │
│ Interactive Maps · Ranked Tables │
│ Export · Validation · Comparison │
└────────────────────────────────────┘
Solar Sight interfaces directly with the Google Earth Engine cloud computation platform, pulling from two complementary archives:
- Sentinel-2 Level-2A — 13-band multispectral imagery at 10–60 m resolution, processed to surface reflectance. Used for high-precision building footprint analysis and irradiance proxy computation via Band 8 (NIR) and Band 4 (Red).
- MODIS MOD11A1 — Terra Land Surface Temperature & Emissivity product at 1 km/day temporal cadence. Provides long-term thermal climatology for regional solar resource characterisation.
Building footprints are extracted through a two-stage ensemble:
- OSM Integration — Queries the OpenStreetMap Overpass API for vector building polygons within the study area extent.
- Computer Vision Fallback — Where OSM coverage is sparse, a spectral index–based detector using NDVI differencing and morphological operations identifies rooftop candidates directly from Sentinel-2 imagery.
Each detected building receives a composite Suitability Score ∈ [0, 1] computed as a weighted linear combination of five independently normalised factors:
| Factor | Weight | Proxy Metric |
|---|---|---|
| Solar Irradiance | 35% | Mean annual surface irradiance (W/m²) |
| Cloud Frequency | 20% | Annual cloud occlusion frequency |
| Rooftop Area | 15% | Usable panel installation area (m²) |
| Accessibility | 15% | Structural accessibility index |
| Structural Quality | 15% | Roof morphology confidence score |
Classification thresholds:
- 🟢 High — Score ≥ 0.70
- 🟡 Medium — 0.40 ≤ Score < 0.70
- 🔴 Low — Score < 0.40
Annual photovoltaic yield is estimated per building using the standard performance equation:
E_annual = A_usable × η_panel × H_peak × PR
Where A_usable is the effective rooftop area, η_panel is panel efficiency (assumed 20.6%), H_peak is peak sun hours derived from satellite irradiance, and PR is the system performance ratio (0.75).
The system was validated over the Kattankulathur urban cluster (SRM University campus and surroundings), Tamil Nadu, India — a high-insolation tropical urban environment representative of peninsular India's solar resource regime.
Study Parameters:
- Spatial extent:
12.820°N – 12.826°N,80.040°E – 80.050°E - Temporal window: 2025-01-01 to 2025-12-31
- Scoring weights: Irradiance 0.70 · Cloud Cover 0.30
Results:
| 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 |
| Total panel count | 51,331 |
| Mean surface irradiance | 198.9 W/m² |
| Medium suitability buildings | 43 (84%) |
| Low suitability buildings | 8 (16%) |
The predominance of medium-class ratings reflects the sub-tropical cloud climatology of the Tamil Nadu coast during the northeast monsoon season — consistent with independent ground-based radiometric records from the region.
- Multi-source data fusion — Harmonises Sentinel-2 and MODIS observations with vector building data into a unified analytical framework
- GEE cloud computation — All satellite preprocessing executes serverside on Google Earth Engine; no raw imagery download required
- Memory-efficient raster processing — Chunked tile-based operations via
rasterioandnumpyenable analysis of arbitrarily large study areas on commodity hardware - Property-based statistical testing — Test suite employs the
Hypothesisframework for invariant verification across stochastic inputs (20+ test modules) - Reproducible pipeline — Full parameter audit trail, intermediate artefact logging, and structured output manifests
- Interactive web interface — Multi-page Streamlit application with folium-based interactive maps, building explorer, export manager, and validation dashboard
| Layer | Libraries |
|---|---|
| Satellite Access | earthengine-api, Google Earth Engine |
| Geospatial | rasterio, geopandas, shapely, fiona, pyproj |
| Scientific Computing | numpy, scipy, pandas, scikit-learn |
| Computer Vision | scikit-image, Pillow |
| Cartographic Visualisation | cartopy, matplotlib, seaborn, folium |
| Web Interface | streamlit, streamlit-folium |
| Testing | pytest, hypothesis |
| Configuration | PyYAML, python-dotenv |
├── building_detection/ # OSM + CV building footprint extraction
├── config/ # SystemConfiguration management
├── data_extraction/ # GEE authentication & satellite ingestion
│ ├── gee_auth.py # Service account + Streamlit Secrets auth
│ ├── sentinel2_extractor.py # 10 m Sentinel-2 MSI pipeline
│ └── modis_extractor.py # 1 km MODIS thermal pipeline
├── data_processing/ # Irradiance, cloud cover & solar calculations
├── pipeline/ # Orchestration, memory management, progress tracking
├── precision_analysis/ # Building-level scoring & ranking engine
├── rooftop_analysis/ # Panel optimisation & shading loss modelling
├── suitability_analysis/ # Spatial classification & scoring
├── temporal_analysis/ # Time-series change detection
├── validation/ # Statistical metrics: RMSE, R², bias, CI
├── visualisation/ # Cartopy map generation (300 DPI)
├── utils/ # Output management, logging, chunked processing
├── streamlit_app/ # Interactive web application
│ ├── app.py
│ └── _pages/ # 13 functional pages
├── tests/ # Property-based & integration test suite
├── run_kattankulathur.py # Pilot study reproducibility script
└── requirements.txt
Analysis parameters are specified via the SystemConfiguration dataclass. Key fields:
SystemConfiguration(
study_area_bounds = (min_lat, max_lat, min_lon, max_lon),
temporal_range = ("2025-01-01", "2025-12-31"),
processing_parameters = {
"spatial_resolution": 10, # metres (Sentinel-2)
"cloud_threshold": 0.3, # fractional cloud cover limit
"temporal_aggregation": "annual"
},
scoring_weights = {
"solar_irradiance": 0.70,
"cloud_frequency": 0.30
}
)Each analysis run produces a structured output artefact bundle:
outputs/<location>_<timestamp>/
├── building_rankings.xlsx # Ranked building table with all metrics
├── buildings.geojson # Vector building footprints (EPSG:4326)
└── maps/
├── suitability_map.png # Classified suitability choropleth (300 DPI)
├── energy_potential_map.png
├── rooftop_area_map.png
└── top_10_buildings_map.png
Distributed under the GNU General Public License v3.0. See LICENSE for details.
Built for academic research in renewable energy geoinformatics.