Data: . Validated = a single (tilt, azimuth) explains ≥ 2 independent spike dates via the specular reflection condition, tolerance 3°. Point size ∝ √(installation area). 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.
Best estimate: 88,709 MWp, with a 90% range of 78,597–101,104 MWp. That range covers two specific, measured sources of uncertainty -- but not everything that could move this number. Below: what's inside the range, what isn't, and how it compares to unrelated data sources.
What's inside the range:
What's outside the range -- and can't be added back in with more arithmetic:
Treat this as an early-stage estimate from an active research pipeline, not a finished census. What's genuinely new here -- a reproducible way to estimate distributed solar from free satellite imagery and open-source AI, in places where official statistics are sparse or absent -- holds regardless of whether any single number on this page turns out exactly right. Expect these figures to keep moving as the evidence behind them grows.
There are no hand-mapped ground-truth areas behind this page, and for the small-panel half there do not need to be. Registration in Germany's Marktstammdatenregister is legally mandatory rather than voluntary, and it publishes totals per municipality -- which is exactly the quantity the small-panel estimator produces. The conversion from flagged roof area to kilowatts was therefore fitted against the register across 9,674 fully-covered municipalities, at 0.2793 kWp per m² of credited roof area, and applied countrywide as a genuine out-of-sample test. What a register cannot substitute for is a precision check on small installations: below 30 kWp it publishes no coordinates at all, so there is no way to ask whether a particular flagged roof really carries panels.
A complete national register puts the Best estimate above too high. The Marktstammdatenregister records roughly 74.8 GWp of PV in Germany, below the figure this page reports, so read these tiers as geography -- where capacity sits -- rather than as a national total. The hand-mapped OpenStreetMap component was reconciled against the register in September 2026 and both placements now sit within about 10% of it; what remains unreconciled is the model's own detections and the small-panel half. Every other country in this project would need a register of this kind to make the same statement, and does not have one.
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.
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.