Two tools in one package:
- Collect and parse OpenStreetMap power-plant data into a clean, modelling-ready table (Fueltype, Technology, Capacity, coordinates…).
- Triage the OSM dataset itself — every element that couldn't be resolved is emitted as a rejection report (CSV + GeoJSON), with a reason code and an OSM URL so contributors can fix the underlying tags.
pip install osm-powerplantsosm-powerplants process Germany France -o europe.csvfrom osm_powerplants import process_units, get_config, get_cache_dir
config = get_config()
df = process_units(
countries=["Chile", "Greece"],
config=config,
cache_dir=str(get_cache_dir(config)),
output_path="plants.csv",
)process_units can also emit a rejection report that pinpoints what OSM needs in order to cover a country more completely:
df = process_units(
countries=["Kenya"],
config={**config, "force_refresh": True}, # rejection data is only populated on API fetches
cache_dir=str(get_cache_dir(config)),
output_path="kenya.csv",
rejected_output_path="kenya_rejected.csv", # writes CSV + sibling .geojson
)Every dropped element is recorded with its OSM URL, coordinates, and a reason code. The sibling .geojson loads straight into JOSM or QGIS as a triage layer. Dominant reasons:
| Reason | What it means |
|---|---|
Missing output tag |
Plant has power=plant but no plant:output:electricity. Very common on solar/geothermal farms. |
Capacity placeholder value |
Tag is a stub like yes instead of a number. |
Capacity regex no match / Capacity non-numeric |
Tag exists but cannot be parsed (unusual units, free-form text). |
Missing source tag / Missing technology tag |
Cannot classify the plant — can be relaxed with missing_technology_allowed: True. |
Element within existing plant geometry |
Generator polygon lies inside an already-processed plant (deduplication). |
| Column | Description |
|---|---|
projectID |
OSM-based identifier |
Name |
Plant name |
Country |
Country name |
lat, lon |
WGS84 coordinates |
Fueltype |
Solar, Wind, Hydro, Nuclear, Natural Gas, etc. |
Technology |
PV, Onshore, Run-Of-River, Steam Turbine, etc. |
Set |
PP (power plant), Store (storage), CHP |
Capacity |
MW |
DateIn |
Commissioning year |
Full documentation: https://open-energy-transition.github.io/osm-powerplants
git clone https://github.com/open-energy-transition/osm-powerplants.git
cd osm-powerplants
pip install -e ".[dev]"
pre-commit install
pytestDeveloped and maintained by Open Energy Transition.
MIT License — see LICENSE for details.
Data sourced from OpenStreetMap © OpenStreetMap contributors.