eco_ppp models economic PV potential for buildings from vector geometries: roof outlines, roof segments (with azimuth), and superstructures. It places PV modules, simulates generation (PVGIS), building electricity use (standard load profiles), battery operation, and computes self-consumption, self-sufficiency, LCOE, and payback.
This repository contains the core pipeline (eco_ppp/) and an example script that runs the full workflow on sample GeoJSON data.
- Python 3.9 (recommended via Conda / Miniconda or Mambaforge)
- Internet access on the first run per building/location, so the pipeline can call the PVGIS API and cache results (see below)
git clone https://github.com/TUMFTM/ECOPPP.git eco_ppp
cd eco_pppFrom the repository root (the folder that contains environment.yml):
conda env create -f environment.yml
conda activate eco_pppIf the environment already exists and you want to recreate it:
conda env remove -n eco_ppp -y # optional
conda env create -f environment.yml
conda activate eco_pppRun commands from the repository root (the directory that contains environment.yml and the eco_ppp package folder). The example script adds this directory to sys.path automatically.
For other entry points (e.g. python -c "import eco_ppp"), set:
export PYTHONPATH="$(pwd)"The example expects these paths (relative to the repo root):
| File | Purpose |
|---|---|
data/inputs/geodata_example/gdf_outlines_example.json |
Building footprints / roof outlines (EPSG:28992) |
data/inputs/geodata_example/gdf_segments_example.json |
Roof segments with azimuth |
data/inputs/geodata_example/gdf_superstructures_example.json |
Superstructures (dormers, etc.) |
data/inputs/standard_load_profiles_VDEW.xls |
VDEW-style standard load profiles (Excel; used for electricity demand) |
The example GeoJSON files under data/inputs/geodata_example/ and data/inputs/standard_load_profiles_VDEW.xls (VDEW standard load profiles) are included in this repository.
The three GeoJSON files can use building_id or image_id as the common key; the example copies image_id → building_id when needed.
Note: To use a different load-profile workbook, place it under
data/inputs/and update the path ineco_ppp/paths.py(PATHS.FP_STANDARD_LOAD_PROFILES).
Always run from the repository root (so path resolution in eco_ppp/paths.py matches your data layout):
cd /path/to/eco_ppp
conda activate eco_ppp
python examples/run_example.pyThe script:
- Loads the example GeoJSONs and prints a short summary (outlines, segments, superstructures, number of buildings).
- Runs the pipeline for every building that has both an outline and at least one roof segment.
- Prints per-building metrics and aggregated portfolio statistics at the end.
First run: Each building triggers PVGIS (Joint Research Centre) for solar radiation data. Responses are cached under:
data/inputs/PVGIS_cache/
So the first run can take noticeably longer; later runs reuse the cache and are faster. Keep network access enabled until caches exist.
eco_ppp/ # Python package: main pipeline, energy & economic models
examples/run_example.py # End-to-end example
environment.yml # Conda environment
data/inputs/ # Inputs (GeoJSON, load profiles, PVGIS cache)
This project is licensed under the Apache License, Version 2.0. See the LICENSE file in the repository root for the full text.
If you use this software in research, please cite the dissertation it relates to and this repository.
Krapf, S. M. (2026). Aerial Image-Based Photovoltaic Potential Analysis (Doctoral dissertation, TUM School of Engineering and Design, Technische Universität München). Chair of Automotive Technology (Prof. Lienkamp).
- Record: mediaTUM
- Persistent identifier (URN): https://nbn-resolving.org/urn:nbn:de:bvb:91-diss-20260205-1781907-0-4
Repository: https://github.com/TUMFTM/ECOPPP
License: Apache License 2.0 (see LICENSE).
@phdthesis{Krapf2026AerialPV,
author = {Krapf, Sebastian Michael},
title = {Aerial Image-Based Photovoltaic Potential Analysis},
school = {Technische Universit{\"a}t M{\"u}nchen},
year = {2026},
type = {Dissertation},
url = {https://nbn-resolving.org/urn:nbn:de:bvb:91-diss-20260205-1781907-0-4}
}
@software{ECOPPP2026,
author = {Krapf, Sebastian Michael},
title = {ECOPPP: Economic photovoltaic potential (Python)},
year = {2026},
url = {https://github.com/TUMFTM/ECOPPP},
license = {Apache-2.0}
}