dataset · Zenodo (CERN European Organization for Nuclear Research)
# Global PV Inventory — India (2019-2022 backbone, 2022 snapshot) ## Summary This dataset is a deduplicated, attribute-enriched vector inventory of 3,616 ground-mounted, utility-scale photovoltaic (PV) installations in India, produced by fusing three openly-licensed source datasets — the WRI Global Power Plant Database (`wri_gppd`), Kruitwagen et al. (2021)'s global PV inventory (`kruitwagen_2021`), and a global raster-derived PV footprint time series, 2019-2022 (`global_pv_maps_2019_2022`) — through a cross-source spatial conflation and attribute reconciliation pipeline. Each installation record carries a reconciled capacity estimate (57,881.8 MW national total, -7.8% against the IRENA (2023) *Renewable Capacity Statistics 2023* 2022 reference figure of 62,804 MW), a representative footprint or point geometry, per-attribute source provenance, and enrichment fields (land cover class, administrative region, solar irradiance and temperature climatology). 38.9% of installations were confirmed by two or more independent sources; the remainder rely on a single source. This is a **Data Descriptor companion dataset** — see the associated code release and manuscript for the full fusion methodology, validation approach, and known limitations. ## Temporal scope The three backbone sources span different vintages: `global_pv_maps_2019_2022`'s raster detection runs 2019-2022 (per-installation `first_seen_year`, where available, falls in this range); `kruitwagen_2021` and `wri_gppd` are each a single snapshot from their own publication/last-update dates. The reconciled dataset as a whole should be treated as a **2022 snapshot** — the latest extent any backbone source reaches — not a time series. Installations added to the real-world PV fleet after each source's own cutoff are not represented; see `validation_report.json` and the companion manuscript for a discussion of this as a driver of regional under-counts (e.g. Gujarat). ## Spatial reference All geometries are in **EPSG:4326 (WGS 84)**, matching `config.yaml`'s `working_crs` in the companion code release. Installations are ground-mounted, utility-scale PV only (no rooftop/ distributed solar) within India's ADM0 boundary (geoBoundaries), confirmed by a hard polygon clip during enrichment — installations outside India are dropped, not retained with a null region. ## Files | File | Description | |---|---| | `global-pv-inventory.gpkg` | The full inventory as a GeoPackage (single layer), all 25 fields below, EPSG:4326. Recommended format for GIS software (QGIS, ArcGIS). | | `global-pv-inventory.parquet` | The same inventory as GeoParquet. Recommended format for programmatic/columnar analysis (geopandas, DuckDB, etc.). | | `global-pv-inventory.csv` | The same inventory as CSV, with geometry encoded as WKT. Provided for tools without native GeoPackage/GeoParquet support. | | `data_dictionary.json` | Machine-readable field-by-field schema (type, units, definition) for all files above — source for the Fields table below. | | `validation_report.json` | Aggregate-only validation statistics: cross-source agreement rates, national/state capacity totals vs. the IRENA reference, and aggregate OpenStreetMap and TZ-SAM cross-check statistics (counts and sums only — no per-record geometry or attribute data from either source; both are non-redistributable validation-only comparisons, see **Note on validation_report.json** below). | | `figures/agreement_matrix.png` | Cross-source pairwise agreement (Jaccard index) heatmap. | | `figures/capacity_by_region.png` | Choropleth map of reconciled capacity by Indian state/UT. | | `figures/national_total_comparison.png` | Bar chart: this dataset's national total vs. the IRENA 2022 reference. | | `figures/fig_conflation_gallery.png` | 4-panel gallery of real conflation examples (multi-source match, fragment reassembly, point-to-footprint match, panel-vs-site area contrast). | | `figures/fig_match_rule.png` | Schematic diagram of the conflation match rule (candidate generation, IoU/containment confirmation, grouping, fragment merge). | | `figures/fig_provenance.png` | Source-composition (UpSet plot) and capacity-provenance breakdown of the inventory. | **Note on `validation_report.json`**: this file's `osm_crosscheck` and `tzsam_crosscheck` sections report only aggregate counts/sums (e.g. "3,005 of 3,616 installations matched a TZ-SAM asset") — by design, no geometry, attribute, or per-record data from either non-redistributable source is included anywhere in this file or dataset. TZ-SAM (TransitionZero's Solar Asset Mapper) is CC BY-NC 4.0 (non-commercial); OpenStreetMap is ODbL. **A per-state chart derived from TZ-SAM (`tzsam_capacity_comparison.png` in the source project) was deliberately excluded from this release** even though it contains no raw TZ-SAM data, out of caution about attaching any CC BY-NC-derived content to a CC BY 4.0 release — see the code release's `sources_manifest.yaml` for the full source-by-source licensing record. If a fully OSM/TZ-SAM-aggregate-free variant of `validation_report.json` is preferred, one can be produced on request. ## Fields Derived directly from `data_dictionary.json` (25 fields, `global-pv-inventory.gpkg`/`.parquet`/`.csv` share the identical schema). | Field | Type | Units | Definition | |---|---|---|---| | `installation_id` | string | | Unique identifier assigned to each conflated/reconciled PV installation (format PV-NNNNNNN). | | `contributing_sources` | string | comma-separated list | Which backbone source(s) matched into this installation during conflation: wri_gppd, kruitwagen_2021, and/or global_pv_maps_2019_2022. | | `n_contributing_sources` | integer | count | Number of distinct sources contributing to this installation (1-3). | | `agreement_flag` | string | single_source \| multi_source | Whether this installation was found by only one source or matched across multiple sources during conflation. | | `source_record_ids` | string | semicolon-separated list | Raw source_record_id (source:original_id) of every contributing input record, for traceability back to the original ingested data. | | `source_licences` | string | comma-separated list | Licence(s) of the contributing source(s), confirmed fresh from sources_manifest.yaml at export time (not cached from an earlier stage). | | `name` | string | | Installation name, when reported by a contributing source (currently only wri_gppd supplies this). Null otherwise. | | `country_raw` | string | | Raw country code/name as reported by a contributing source (currently only wri_gppd supplies this). Null otherwise. See admin_region for the derived, India-specific alternative. | | `capacity_mw` | float | MW | Reconciled installed capacity, chosen per config.yaml's capacity_priority_sources order (direct-reported capacity > model-estimated capacity > area-derived fallback). See capacity_mw_provenance. | | `capacity_mw_provenance` | string | | Which source (or "area_derived", meaning footprint area x config.yaml's power_density constant) supplied the capacity_mw value. | | `capacity_conflict_flag` | boolean | | True if 2+ contributing sources reported capacity values differing by more than config.yaml's conflict_tolerance_pct. The priority-order value in capacity_mw is still used; this only flags that sources disagreed — see capacity_mw_by_source for the individual values. | | `capacity_mw_by_source` | string | semicolon-separated key=value list | Audit trail of each source's own (within-source-summed) capacity value in MW, e.g. "wri_gppd=12.3000;kruitwagen_2021=15.0000". | | `geometry_type` | string | polygon \| point | Type of the geometry column for this installation. | | `area_km2` | float | km² | True area of the representative geometry, computed in an equal-area projection (config.yaml crs.equal_area_crs). Null for point-only installations. | | `area_km2_provenance` | string | | Which contributing source's polygon was used as the representative geometry/area (the largest single contributing polygon). [†] Null for point-only installations. | | `area_conflict_flag` | boolean | | True if 2+ polygon-contributing sources' own (within-source-summed) footprint areas differ by more than config.yaml's conflict_tolerance_pct. | | `area_km2_by_source` | string | semicolon-separated key=value list | Audit trail of each polygon-contributing source's own summed footprint area in km². | | `first_seen_year` | integer | calendar year | Earliest year any contributing source observed PV at this location (currently only global_pv_maps_2019_2022 supplies this). Null otherwise. | | `first_seen_year_provenance` | string | comma-separated list | Which source(s) supplied the earliest first_seen_year value. | | `land_cover_code` | integer | ESA WorldCover class code | ESA WorldCover class code at the installation's centroid. See land_cover_class for the human-readable label. | | `land_cover_class` | string | | Human-readable ESA WorldCover land-cover class at the installation's centroid (e.g. Built-up, Cropland, Grassland). | | `admin_region` | string | | Indian state/union territory (geoBoundaries ADM1) containing the installation's centroid. [†] Null typically means a rare boundary-precision miss. | | `ALLSKY_SFC_SW_DWN_ann` | float | kWh/m²/day | NASA POWER all-sky surface shortwave downward irradiance, annual climatological mean, nearest available grid point (~1 degree resolution). | | `T2M_ann` | float | degrees Celsius | NASA POWER 2-metre air temperature, annual climatological mean, nearest available grid point (~1 degree resolution). | | `geometry` | geometry (WKT in the CSV export) | EPSG:4326 | Representative footprint (the largest contributing polygon) or point location. | **[†] Known documentation lag**: `data_dictionary.json` (source: a hardcoded dictionary in `pv_fusion/export.py` in the code release) was written before two later pipeline fixes and was not updated to match: - `area_km2_provenance` — the actual current rule (`config.yaml`'s `
This page summarises published work. The authoritative version sits with the publisher.
DOI: 10.5281/zenodo.21867918
Is something wrong with this record? Report it or request removal.
Discussion
Have you built on this work, tried to replicate it, or seen it applied in practice? Share what you know. Verified researchers and MARATTO™ domain experts can open a discussion, and any member can reply. Contributions are reviewed before they appear.
No discussion yet. Open the first thread.
New to MARATTO™? Create a free account.