India's PV Atlas

EarthPV CalibrationBronzeAbove 400 m² only.
No local calibration.
Add local training data →
India PV capacity, by 0.1° cell
11 km × 11 km cells · log scale
MWp / cell
none detected
0MWp
Best estimate, the highest defensible figure
0
Training data hand-mapped in OpenStreetMap, ≥400 m²
0
Training data hand-mapped in OpenStreetMap, <400 m²
0
of 0.1° cells within the calibrated building-density range
Capacity
The same Sentinel-2-detectable total, by installation size
Capacity per size bin, rooftop and ground-mount stacked
linear scale · MWp · hover a bar for detail
rooftop
ground-mount (hatched)
rooftop, extrapolated beyond calibration
Capacity
The same total, by method
Total Capacity
TerraMind segmentation of large arrays supplies 60% of Best; installations mapped in OpenStreetMap the remaining 40%.
Uncertainty
How sure each part of the Best estimate is
Point estimate and 90% credible interval, per component
log scale · MWp · hover a row for detail
Each row is one addend of the Best estimate; the top row is their sum. The intervals do not add up to the total's: components that share an error source were drawn together (one area-to-capacity constant for every rooftop figure, one for every ground-mount figure, one re-draw of the calibration areas for every roofclf figure), so the total's interval is narrower than the sum of the parts' intervals would suggest. A row without a whisker is a deterministic correction rather than a modelled quantity. The intervals cover measured errors only; "How confident should you be in this?" below lists what they leave out.
All component intervals
ComponentMWp90% low90% high
Context
Against official and published figures
National total
this atlas in MWp · other figures in MW as published

Sources and what each figure counts
    By province

    All province figures
    ProvinceThis atlas, BestReference Ratio
    Panel orientation
    Fitted tilt & azimuth, from Sentinel-2 glint
    Tilt (radius) × Azimuth (angle) 0 measured
    rooftop generator ground plant unreachable by this sensor's fixed overpass time
    0%
    of ≥ 1,000 m² installations get a pose in this plot at all -- the rest never produce two self-consistent spikes, so there's nothing to fit
    ≥1 spike, no fittable pose; 0%
    no glint signal at all 0%
    azimuth range observed –
    tilt IQR observed –

    What is PV glint and how is it detected?

    PV Glint is a brief, brighter-than-diffuse flash where a panel's specular reflection lines up with the sun and Sentinel-2's fixed overpass geometry on one date -- see the method page for the full derivation and an annotated image gallery. A single spike can't be checked for self-consistency -- 0% of installations glint once (or on dates that disagree on a panel geometry) and so are correctly detected as "PV is probably here" but carry no orientation information.

    Why the plot only fills part of the circle

    Sentinel-2 crosses this latitude at a fixed ~10:30 local time, so in every image of the survey window the sun's azimuth at the moment of overpass never once swings west of due south -- a panel facing southwest, west, or north cannot glint into this sensor no matter how long you wait. That's a sensor limit, not a property of rooftops here: the shaded wedge (0° wide) marks orientations this survey cannot observe at all, not orientations known to be empty. Nothing is plotted there, because nothing was measured there.

    Data: . Validated = a single (tilt, azimuth) explains ≥ 2 independent spike dates via the specular reflection condition, tolerance 3°. Point size ∝ √(installation area). Hover a point to see which installation it is; click it to open that installation in OpenStreetMap. The CSV download lists every point with its OSM id and coordinates. Full derivation of the glint signal this pose fit is built on: the method page. Annotated Sentinel-2 / high-res examples of what a validated spike actually looks like in the source imagery: the image gallery.

    Background
    How to read these numbers
    How the estimate is built the methods in plain language, what each can see, how they add up+
    How confident should you be in this? preliminary results, sampling caveats, independent corroboration+

    Best estimate: 103,037 MWp, with a 90% range of 83,676–132,969 MWp. The range covers two measured sources of uncertainty, not everything that could move this number. Below: what is inside the range, what is not, and how it compares with other sources.

    Inside the range:

    • The two area-to-power constants. Panel area on a roof converts at about 0.18 kWp per m², the rating of a typical module; the outline of a ground-mounted park converts at about 0.05 kWp per m², measured on parks whose capacity is known. Each is varied over its own range (90%: 0.15–0.21 and 0.035–0.075 kWp per m²).
    • How reliable the segmentation model's detections are. How often its detections turn out to be real, and how many mapped arrays it misses, were measured size class by size class against mapped installations. Those measurements have their own sampling error, which is drawn into the range.

    Outside the range, and not something more arithmetic can add back:

    • The hand-mapped areas here do not check these numbers yet. Two areas of this country have been mapped panel by panel and declared complete, but no figure on this page uses them yet. The detectors' measured accuracy is still carried over from the countries where it was measured, and how well it transfers here has not itself been measured.
    • The small-installation half of this page does not exist yet. One area of India, in Gurgaon, has been mapped panel by panel, and one area is not enough to calibrate the per-building classifier that supplies most of Pakistan's estimate. Everything on the map is either hand-mapped in OpenStreetMap or an array the segmentation model outlined directly, which in practice means installations of roughly 400 m² and up. The household rooftop systems that dominate India's recent rooftop programme are mostly below that size.
    • Imagery covers where people live, every mapped solar site, and the land around them. Map cells were imaged if they hold at least 1,000 buildings or any hand-mapped solar installation, or lie within three cells (about 33 km) of one. A park built on empty land farther out than that is not on this page; hatched cells were never imaged.
    • Solar parks the model found that nobody has mapped count once a person has judged them. A model outline larger than 10 hectares is as often bright bare ground or rock merged into one shape as a solar park OpenStreetMap does not hold yet, so it counts only once it is mapped or someone has judged it solar on the imagery the model saw. In India 1,640 of 1,789 such outlines have been judged, and the 1,427 found to be parks count in full, about 28,900 MWp of the best figure. The other 149 were left out of the review by the filters on the lead files (steep slopes, open ground at low confidence, outlines beyond the border) and count only if someone maps them. None of these parks is in the hand-mapped figure.
    • A mapped outline drawn around a whole planned zone counts only where panels are seen. Seven ground outlines larger than 5 km², among them two at Khavda in Gujarat, are mostly still empty land or were not fully imaged. Each counts at the share of it the model detects as panels, plus any plant mapped inside it, in both the hand-mapped and the best figure. Rewa Ultra Mega Solar is missing: its cells were never imaged properly.

    Treat this as an early estimate from an active research pipeline, not a census. What it offers is a reproducible way to estimate distributed solar from free satellite imagery and open-source models where official statistics are thin or missing. Expect the figures to move as the evidence behind them grows.

    Nothing on this page rests on hand-mapped ground truth from this country yet. Two areas have been mapped panel by panel (Gurgaon, Haryana, Purba Champaran, Bihar (farm, no PV)): every panel in it drawn by hand, the ground truth that turns a detection into a capacity estimate by measuring how much of a flagged roof is actually covered in panels and how many real installations the detectors miss. Once a classifier is fitted to them, these figures will rest on them. More such areas are the most useful thing anyone can contribute.

    Against India's register, ground-mounted solar sits in the right states and falls about a fifth short. MNRE's state-wise register, republished by MoSPI's eSankhyiki, records 110.6 GW of utility-scale solar on the ground (ground-mounted plants plus the solar part of hybrid plants) at the centre of the imagery window, January 2026. This page's best estimate of ground-mounted solar is about nine tenths of that, and across the 19 states with at least 100 MW registered it ranks them almost exactly as the register does (rank correlation 0.97). The register mostly quotes AC capacity and this page DC, so the real shortfall is nearer a fifth, mostly parks this page does not see: cells never imaged, such as Rewa's, and parks built during the window. Rooftop is the large gap: the register holds 24.3 GW, most of it household systems of a few kW, and this page sees less than a tenth of it.

    Using the map and exporting figures layers, your own data, downloads, licences+

    Layers. "Show" picks the quantity the cells are coloured by: the Best estimate, the OSM-mapped capacity alone, the satellite detections above 400 m², rooftop PV below it, farm ground PV below it (arrays beside fields, where the farm detector has run), or the gap between the Best estimate and what is already mapped, which is where mapping effort pays off most. Each cell shows its total in MWp. The colour scale is logarithmic and is refitted to whichever quantity is shown; the legend always states its range.

    Your own data. "Layers" → "Add a layer" overlays a GeoJSON file, a CSV with latitude/longitude columns, a GeoJSON URL, an XYZ raster tile URL or a WMS (use {bbox-epsg-3857} in its GetMap URL). Files are read in your browser and are not uploaded anywhere. The live OpenStreetMap overlay queries the public Overpass API for the area in view when you zoom in, so it shows mapping done after this page was built.

    Exports. Every figure downloads as PNG (for slides), SVG (vector, for papers) and CSV (the numbers behind it); the map as PNG with its legend and attribution, and the grid as GeoJSON or CSV. Basemap imagery and tiles keep their own providers' terms: OpenStreetMap data is © OpenStreetMap contributors (ODbL), the grey canvas and the satellite imagery © Esri and its partners.

    Data
    Download the data behind this atlas
    Download the underlying data capacity parquets, calibration boundaries, pose survey, raw detections, model checkpoint+
    Live OSM PV, not this snapshot -- Overpass query
    [out:json][timeout:180]; area ["boundary"="administrative"] ["admin_level"="2"] ["ISO3166-1"="IN"] ->.searchArea; ( nwr["power"="generator"]["generator:source"="solar"](area.searchArea); nwr["power"="plant"]["plant:source"="solar"](area.searchArea); ); out geom;
    Paste into overpass-turbo.eu for an interactive map and GeoJSON export, or POST it as the data parameter to https://overpass-api.de/api/interpreter from a script. The raw-detections download above predates this page and will go stale as mappers keep editing; this query always reflects live OSM state.
    Capacity data

    The capacity per grid cell shown on the map, as CSV. One row per 0.1° cell, generated in your browser from the data this page is drawing, so it is exactly the numbers above. lon0/lat0 are the south-west corner of the cell. The GeoParquet carries the cell polygon in EPSG:4326, so it opens directly in QGIS or GeoPandas.

    Download GeoParquet
    Add a data layer

    Overlay your own data on the capacity map. A file is read in your browser and never leaves it; a URL is fetched by your browser, so the server must allow cross-origin requests.