Pakistan's PV Atlas

EarthPV CalibrationSilverCalibrated above and below 400 m².
Small half not yet checked by people.
Add local training data →
Pakistan 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
roofclf's building-by-building estimate (rooftops of every size, in cells inside its calibrated density range) supplies 92% of Best; installations mapped in OpenStreetMap (5%) and TerraMind segmentation of large arrays (3%) split the rest. Full breakdown with credible intervals: capacity composition.
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: 34,142 MWp, with a 90% range of 28,863–41,207 MWp. The range covers three measured sources of uncertainty, not everything that could move this number. Below: what is inside the range, what is not, what calibration areas it rests on, 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.
    • Which calibration areas roofclf was fitted on. The conversion from score to panel area, and the correction for panel area the scores miss, are refitted 200 times on random re-draws of the calibration areas (some left out, some counted twice), and how far the answer moves goes into the range.

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

    • The calibration areas were chosen by hand, not drawn at random, so the range is not a statistical margin of error for the country. Re-drawing them shows how much the areas disagree with each other, not how far the places the estimate is applied to differ from all of them. Only a random sample of areas can measure that.
    • "Every panel mapped" holds as of the mapping imagery, which is older than the satellite imagery. Panels installed in between are missing from the reference: the model's detections of them count as false alarms and its misses of them go uncounted, and roofclf's conversion to panel area comes out low. Each of these makes this figure more likely too low than too high.
    • Every roof counts in proportion to its score, and the score is not only about panels. In the calibration areas this came far closer to the mapped panel area than counting only the roofs above a cut-off, above all in sparse, rural ones, where the cut-off found about an eighth of the panels. But the score also responds to the kinds of roofs and neighbourhoods where panels are common, and summed over millions of village roofs even a small lean in it adds up. The calibration areas cannot yet rule that out.
    • The calibration areas had to be hand-picked, because aerial imagery in most of the country is too old. Checking for a small installation needs imagery recent enough to tell "no panels" from "panels installed after this photo", and random locations have so far mostly landed on imagery that is too old, so the areas were placed where recent imagery exists. Eight randomly drawn areas that pass this check were proposed on 2026-10-28 and are on the map as hollow diamonds; none is mapped yet.
    • The small-rooftop figure, most of Best, rests on few calibration areas where it is applied most. roofclf is trained on 30 areas, and its scores are converted to panel area with the 19 that pass a consistency check between flagged and mapped roofs. Below 1,717 buildings/km², which covers all but 20 of the 2,957 cells priced, that conversion rests on 9 of them, and 83% of their mapped small-rooftop panel area lies in the three Islamabad areas. About 13.5% of the buildings priced are in cells sparser than the sparsest of the 19 (124 buildings/km²). Predicted from the other areas, 18 of 29 areas come out within about a quarter of their mapped small-rooftop panel area, but six of the ten under 1,000 buildings/km² are more than 40% off, from 0.14 to 8 times it. The range above re-draws the 19 areas; it does not measure how far rural cells differ from them (measured 2026-10-28).
    • The building score partly measures what kind of roof it is, not only whether it has panels. On Sentinel-2 imagery from late 2021, before most of today's panels were installed, the score still picks out the roofs that carry panels today almost as well as on current imagery (a ranking score of 0.79–0.82 against 0.87, where 0.5 is chance), and its sum over all roofs is still 30–57% of today's. The segmentation model, by contrast, finds about 12% of today's large arrays on the same 2021 imagery, close to the share that registered capacity and panel imports suggest for the end of 2021 (about 14%). In the calibration areas, about half of the summed score sits on roofs without panels. The calibration turns this into panel area correctly on average for places like the calibration areas; where villages carry fewer or more panels than their roofs suggest, it cannot tell. Mapping the randomly drawn areas would measure that (measured 2026-10-28 on rural and peri-urban cells with 2021 imagery, 1.8 million buildings).
    • The smallest buildings are counted mostly from their surroundings. A footprint under 50 m² covers less than half of one 10 m pixel, and the score barely tells such roofs with panels from those without: roofs with mapped panels average a score of 0.07–0.10, against 0.37 on 200–400 m² roofs, and 83–88% of these buildings' summed score in the calibration areas sits on roofs without panels. They hold under 5% of the mapped small-rooftop panel area in the calibration areas, but about 12% of this page's small-rooftop figure, roughly 2.8 GWp, because rural Pakistan has many small footprints such as sheds and outbuildings. Leaving them out, a 50 m² floor that already applies in the 20 densest cells, would lower Best by about that much. A blind review of 400 roofs, 121 of them under 50 m², has been drawn to decide (2026-10-28).
    • The range covers measured errors, not choices of method. On 2026-10-25 roofs started counting in proportion to their score instead of by a yes/no cut-off, and Best as published moved from 24,438 MWp (90% range 20,894–33,666) to 34,589 MWp (29,308–41,736): each lies outside the other's range. Which segmentation model reads the imagery, which calibration table prices its detections, where the calibrated density range ends and whether the smallest buildings count are choices of the same kind, and none of them is part of the range above.

    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.

    The calibration areas: hand-picked to cover a mix of places, not a random sample. The 30 calibration areas this page's small-rooftop figures use are drawn on the map as diamonds, a few square kilometres each in which volunteers mapped every panel. A researcher chose them to span different kinds of places, from planned housing and dense urban blocks to industrial estates and bare land, rather than drawing them at random. All of them have been checked thoroughly enough to trust their "no panel here". Hand-picked areas, however many, cannot give a national margin of error; randomly drawn ones can, and where randomly drawn candidates exist the map shows them as hollow diamonds. More areas of either kind help: each one added so far has turned up a new way the method can go wrong.

    Other sources give context, not a check. Pakistan publishes no count of installed solar. What is registered, about 6.8 GW of net-metered rooftops by September 2025 plus about 0.8 GW of utility-scale parks, is a floor, since most systems are never registered. Solar panels imported from China since 2017 add up to about 51 GW by the end of 2025 (Ember customs data), a loose ceiling: some are still in stock or were re-exported, and earlier imports are missing. The only independent estimate of installed capacity, 27–33 GW in January 2026 (Renewables First, derived from the import figures), sits just below this page's Best estimate and overlaps its 90% range. Agreement in order of magnitude is all these show; none of them can confirm a number on this page. Sources: pv magazine, 20 January 2026; Ember.

    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"="PK"] ->.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.