Skip to main content

PyPVRoof

A Python package for extracting characteristics of rooftop PV installations.

Installation

Basic Installation

You can install the package using pip:

pip install pypvroof

Installation with GDAL Support

For full functionality including DEM processing, install with GDAL support:

pip install pypvroof[gdal]

Note: GDAL installation might require additional system dependencies. On macOS, you can install them using:

brew install gdal

Development Installation

For development purposes, install with additional development tools:

pip install pypvroof[dev]

Installation from Source

git clone https://github.com/gabrielkasmi/pypvroof.git
cd pypvroof
pip install -e .

For development from source with all extras:

pip install -e ".[dev,gdal]"

System Requirements

  • Python >= 3.8
  • Core dependencies are automatically installed
  • GDAL >= 3.6.2 (optional, for DEM processing)
  • System-level GDAL installation might be required for full functionality

Documentation

Quick Start

The supplementary data is accessible on our Zenodo repository: DOI

import geojson
from pypvroof import MetadataExtraction


# load the data 
index =1356
arrays=geojson.load(open("path/to/geojson/with/arrays"))
case=arrays['features'][index]


# Example parameters dictionary
# choose your own methods
params = {
    "azimuth-method": "bounding-box", # choose between bounding-box and theil-sen
    "tilt-method": "lut", # choose between constant, lut and theil-sen
#    "raster-folder":"input" # specify the location of the raster as a .tif file if using theil-sen
    "regression-type": "linear", # choose between constant, linear or clustered
#    "constant-tilt": 30, # default parameters if no lookup table of DEM
#    "default-coefficient": 1/(6.5) # default parameter if no data to calibrate the linear regression coefficients
}

# initialize the object for extracting the metadata
extractor = MetadataExtraction(p=params)

# extract all characteristics at once for a single polygon
characteristics = extractor.extract_all_characteristics(case)


# or if you want a dataframe with all the characteristics for multiple polygons

dataframe = extractor.extract_all_characteristics(arrays)

Repository Structure

pypvroof/
├── src/                    # Package source code
├── examples/              # Example scripts
│   ├── basic_usage.py
│   └── advanced_usage.py
├── notebooks/            # Jupyter notebooks
│   ├── hands-on.ipynb
│   └── advanced_features.ipynb
├── docs/                # Additional documentation
│   ├── api.md
│   └── tutorials/
├── tests/              # Test suite
├── setup.py
├── README.md
└── LICENSE

Features

  • Extract PV roof characteristics from GeoJSON polygons
  • Support for multiple computation methods
  • Custom lookup table support
  • Flexible parameter configuration

The package is shipped with the lookup table for France used in [3] and array metadata from BDPV database and with a dataset of PV systems characteristics coming from BDPV if you want to use the linear regression for deriving the installed capacity of the system.

License

This project is licensed under the MIT License - see the LICENSE file for details.

Overview and motivation

PyPVRoof is an all-in-one approach for extracting metadata of rooftop PV installations. The approach is modular, depending on the data available, we use different methods to extract these characteristics. The user only has to set his preferred parameters depending on the data available and the module will automatically proceed a single polygon or a complete .geojson file. We extract the following characteristics:

  • Localization (latitude, longitude)
  • Tilt angle
  • Azimuth angle
  • Surface
  • Installed capacity

These characteristics can be deduced from overhead imagery and some additional data (a PV registry or surface models). Besides, these characteristics are sufficient for a broad range of application, e.g. surveying 1 or regional PV estimation 2

This software offers practitionners a fast and efficient way to extract installations metadata to generate consistent registries. This work expands and completes the characteristics extraction module of 3.

The flowchart of the package is summarized below:

Citation

If you wish to use this work, please cite us as:

@article{tremenbert2023pypvroof,
  title={PyPVRoof: a Python package for extracting the characteristics of rooftop PV installations using remote sensing data},
  author={Tr{\'e}menbert, Yann and Kasmi, Gabriel and Dubus, Laurent and Saint-Drenan, Yves-Marie and Blanc, Philippe},
  journal={arXiv preprint arXiv:2309.07143},
  year={2023}
}

Like this work ? Do not hesitate to star us !

References

[1] De Jong, T., Bromuri, S., Chang, X., Debusschere, M., Rosenski, N., Schartner, C., ... & Curier, L. (2020). Monitoring spatial sustainable development: semi-automated analysis of satellite and aerial images for energy transition and sustainability indicators. arXiv preprint arXiv:2009.05738.

[2] Killinger, S., Lingfors, D., Saint-Drenan, Y. M., Moraitis, P., van Sark, W., Taylor, J., ... & Bright, J. M. (2018). On the search for representative characteristics of PV systems: Data collection and analysis of PV system azimuth, tilt, capacity, yield and shading. Solar Energy, 173, 1087-1106.

[3] Kasmi, G., Dubus, L., Blanc, P., & Saint-Drenan, Y. M. (2022, September). Towards unsupervised assessment with open-source data of the accuracy of deep learning-based distributed PV mapping. In Workshop on Machine Learning for Earth Observation (MACLEAN), in Conjunction with the ECML/PKDD 2022.

Metadata

Release files for pypvroof 0.1.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for pypvroof 0.1.1
File Size Uploaded
pypvroof-0.1.1.tar.gz 55.0 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for pypvroof 0.1.1
File Interpreter ABI Platform
pypvroof-0.1.1-py3-none-any.whl Python 3 none any Details

Total release size: 107.1 kB

Release files / pypvroof-0.1.1.tar.gz

Download URL pypvroof-0.1.1.tar.gz
Size 55.0 kB
Tags Source
SHA-256 checksum
How to use checksums
e141f80855bb9636847ad2a4674c7d2bdc4cbfa8f77958f37967812f63a11c3f
BLAKE2b-256 checksum
How to use checksums
50c2ceb0cb891c838537015a7c96188adddbafe418c2844e8eef42b4b06d9003
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.12.9

Release files / pypvroof-0.1.1-py3-none-any.whl

Download URL pypvroof-0.1.1-py3-none-any.whl
Size 52.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
07ee7e35ed0acb9ce8f06dcb3615c9badde1b0b1f434c9188c779290dd4f4c2e
BLAKE2b-256 checksum
How to use checksums
6f60901cacc1cf5e15d4a1fcbbe3f614c5bad7d450c1eab055439b7307a6f40c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.12.9

Release history Release notifications | RSS feed

This release

0.1.1 This release

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page