{"id":346758,"name":"LAVA","description":"A tool to calculate the available area in a user defined study region for building renewable energy generators like utility-scale ground-mounted solar PV and wind onshore.","url":"https://github.com/dea-ge/lava","last_synced_at":"2026-05-14T13:08:05.113Z","repository":{"id":324198963,"uuid":"833998766","full_name":"DEA-GE/LAVA","owner":"DEA-GE","description":"LAVA - resource potential studies for any region on the globe","archived":false,"fork":false,"pushed_at":"2026-04-28T20:17:40.000Z","size":30455,"stargazers_count":9,"open_issues_count":15,"forks_count":2,"subscribers_count":2,"default_branch":"main","last_synced_at":"2026-04-28T22:16:33.313Z","etag":null,"topics":["energy-modelling","energy-potential","land-availability","power-potential","python","resource-potential"],"latest_commit_sha":null,"homepage":"https://lava-tool.readthedocs.io/","language":"Jupyter Notebook","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/DEA-GE.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"docs/contributing/contributing.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2024-07-26T07:57:59.000Z","updated_at":"2026-04-28T20:17:45.000Z","dependencies_parsed_at":"2026-04-03T17:02:18.493Z","dependency_job_id":null,"html_url":"https://github.com/DEA-GE/LAVA","commit_stats":null,"previous_names":["jome1/lava","dea-ge/lava"],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/DEA-GE/LAVA","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DEA-GE%2FLAVA","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DEA-GE%2FLAVA/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DEA-GE%2FLAVA/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DEA-GE%2FLAVA/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/DEA-GE","download_url":"https://codeload.github.com/DEA-GE/LAVA/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DEA-GE%2FLAVA/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32525898,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-02T01:12:54.858Z","status":"online","status_checked_at":"2026-05-02T02:00:05.923Z","response_time":132,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"owner":{"login":"DEA-GE","name":"Danish Energy Agency - Global Cooperation ","uuid":"137408007","kind":"organization","description":"We share best practice from the green transition in Denmark through government-to-government cooperation.","email":"ens@ens.dk","website":"https://ens.dk/en/global-cooperation/global-cooperation","location":"Denmark","twitter":null,"company":null,"icon_url":"https://avatars.githubusercontent.com/u/137408007?v=4","repositories_count":1,"last_synced_at":"2025-12-21T17:44:18.042Z","metadata":{"has_sponsors_listing":false},"html_url":"https://github.com/DEA-GE","funding_links":[],"total_stars":5,"followers":8,"following":0,"created_at":"2025-12-21T17:44:18.066Z","updated_at":"2025-12-21T17:44:18.066Z","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/DEA-GE","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/DEA-GE/repositories"},"packages":[],"commits":{"id":11688497,"full_name":"dea-ge/lava","default_branch":"master","total_commits":672,"total_committers":6,"total_bot_commits":1,"total_bot_committers":1,"mean_commits":112.0,"dds":0.26934523809523814,"past_year_total_commits":435,"past_year_total_committers":6,"past_year_total_bot_commits":1,"past_year_total_bot_committers":1,"past_year_mean_commits":72.5,"past_year_dds":0.39540229885057476,"last_synced_at":"2026-05-10T11:04:20.275Z","last_synced_commit":"ab77b35f63e2219b03c455dcc90b4d97885eadfa","created_at":"2026-03-18T09:01:14.066Z","updated_at":"2026-05-10T11:04:19.186Z","committers":[{"name":"jome1","email":"jonas_meier@gmx.de","login":"jome1","count":491},{"name":"Matteo D'Andrea","email":"teo.dandrea@me.com","login":"m-dandrea","count":122},{"name":"jckEa","email":"jck@eaea.dk","login":"jckEa","count":30},{"name":"julius","email":"julius.meier@gmx.de","login":"juliusmeier","count":25},{"name":"Jan Tautorus","email":"jan.tautorus@it-u.at","login":"JanTautorus","count":3},{"name":"pre-commit-ci[bot]","email":"66853113+pre-commit-ci[bot]","login":"pre-commit-ci[bot]","count":1}],"past_year_committers":[{"name":"jome1","email":"jonas_meier@gmx.de","login":"jome1","count":263},{"name":"Matteo D'Andrea","email":"teo.dandrea@me.com","login":"m-dandrea","count":114},{"name":"jckEa","email":"jck@eaea.dk","login":"jckEa","count":29},{"name":"julius","email":"julius.meier@gmx.de","login":"juliusmeier","count":25},{"name":"Jan Tautorus","email":"jan.tautorus@it-u.at","login":"JanTautorus","count":3},{"name":"pre-commit-ci[bot]","email":"66853113+pre-commit-ci[bot]","login":"pre-commit-ci[bot]","count":1}],"commits_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub/repositories/dea-ge%2Flava/commits","host":{"name":"GitHub","url":"https://github.com","kind":"github","last_synced_at":"2026-05-12T00:00:09.062Z","repositories_count":6233304,"commits_count":894841676,"contributors_count":34898849,"owners_count":1151822,"icon_url":"https://github.com/github.png","host_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub/repositories"}},"issues_stats":{"full_name":"DEA-GE/LAVA","html_url":"https://github.com/DEA-GE/LAVA","last_synced_at":"2026-05-07T20:40:30.830Z","status":"active","issues_count":6,"pull_requests_count":10,"avg_time_to_close_issue":1444955.4,"avg_time_to_close_pull_request":169119.77777777778,"issues_closed_count":5,"pull_requests_closed_count":9,"pull_request_authors_count":5,"issue_authors_count":2,"avg_comments_per_issue":0.3333333333333333,"avg_comments_per_pull_request":0.7,"merged_pull_requests_count":7,"bot_issues_count":0,"bot_pull_requests_count":1,"past_year_issues_count":6,"past_year_pull_requests_count":10,"past_year_avg_time_to_close_issue":1444955.4,"past_year_avg_time_to_close_pull_request":169119.77777777778,"past_year_issues_closed_count":5,"past_year_pull_requests_closed_count":9,"past_year_pull_request_authors_count":5,"past_year_issue_authors_count":2,"past_year_avg_comments_per_issue":0.3333333333333333,"past_year_avg_comments_per_pull_request":0.7,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":1,"past_year_merged_pull_requests_count":7,"created_at":"2026-02-10T16:38:48.848Z","updated_at":"2026-05-07T20:40:30.830Z","repository_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/DEA-GE%2FLAVA","issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/DEA-GE%2FLAVA/issues","issue_labels_count":{},"pull_request_labels_count":{},"issue_author_associations_count":{"MEMBER":3,"COLLABORATOR":3},"pull_request_author_associations_count":{"COLLABORATOR":5,"MEMBER":4,"CONTRIBUTOR":1},"issue_authors":{"jome1":5,"JanTautorus":1},"pull_request_authors":{"jome1":4,"juliusmeier":2,"JanTautorus":2,"m-dandrea":1,"pre-commit-ci[bot]":1},"host":{"name":"GitHub","url":"https://github.com","kind":"github","last_synced_at":"2026-05-08T00:00:21.527Z","repositories_count":14534758,"issues_count":34215751,"pull_requests_count":112152289,"authors_count":11257471,"icon_url":"https://github.com/github.png","host_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories","owners_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/owners","authors_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors"},"past_year_issue_labels_count":{},"past_year_pull_request_labels_count":{},"past_year_issue_author_associations_count":{"COLLABORATOR":3,"MEMBER":3},"past_year_pull_request_author_associations_count":{"COLLABORATOR":5,"MEMBER":4,"CONTRIBUTOR":1},"past_year_issue_authors":{"jome1":5,"JanTautorus":1},"past_year_pull_request_authors":{"jome1":4,"JanTautorus":2,"juliusmeier":2,"m-dandrea":1,"pre-commit-ci[bot]":1},"maintainers":[{"login":"jome1","count":9,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/jome1"},{"login":"JanTautorus","count":3,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/JanTautorus"},{"login":"juliusmeier","count":2,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/juliusmeier"},{"login":"m-dandrea","count":1,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/m-dandrea"}],"active_maintainers":[{"login":"jome1","count":9,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/jome1"},{"login":"JanTautorus","count":3,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/JanTautorus"},{"login":"juliusmeier","count":2,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/juliusmeier"},{"login":"m-dandrea","count":1,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/m-dandrea"}]},"events":{"total":{"DeleteEvent":3,"PullRequestEvent":4,"IssuesEvent":1,"WatchEvent":2,"PushEvent":37,"CreateEvent":5},"last_year":{"DeleteEvent":3,"PullRequestEvent":4,"IssuesEvent":1,"WatchEvent":2,"PushEvent":37,"CreateEvent":5}},"keywords":["energy-modelling","energy-potential","land-availability","power-potential","python","resource-potential"],"dependencies":[{"ecosystem":"pypi","filepath":"docs/requirements-docs.txt","sha":null,"kind":"manifest","created_at":"2026-04-03T17:02:18.401Z","updated_at":"2026-04-03T17:02:18.401Z","repository_link":"https://github.com/DEA-GE/LAVA/blob/main/docs/requirements-docs.txt","dependencies":[{"id":25853491588,"package_name":"mkdocs-material","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":25853491589,"package_name":"mkdocs","ecosystem":"pypi","requirements":"\u003c2.0","direct":true,"kind":"runtime","optional":false}]}],"score":4.969813299576001,"created_at":"2026-02-28T00:05:07.336Z","updated_at":"2026-05-14T13:08:05.116Z","avatar_url":"https://github.com/DEA-GE.png","language":"Jupyter Notebook","category":"Energy Systems","sub_category":"Renewable Energy Integration","monthly_downloads":0,"total_dependent_repos":0,"total_dependent_packages":0,"readme":"# LAVA - *L*and *AV*ailability *A*nalysis \n\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)\n[![pre-commit.ci status](https://results.pre-commit.ci/badge/github/DEA-GE/LAVA/main.svg)](https://results.pre-commit.ci/latest/github/DEA-GE/LAVA/main)\n\nLAVA is a tool to calculate the available area in a user defined study region for building renewable energy generators like utility-scale ground-mounted solar PV and wind onshore.\nFirst, all needed data is downloaded and preprocessed to bring it into the right format. Then the land eligibility analysis is done with the help of [`atlite`](https://github.com/PyPSA/atlite). Additionally, a suitable analysis can be performed and timeseries data for the available area derived.\nThe LAVA tool is flexible research software with a limited user-interface. For user-friendly online GIS tools to identify available land have a look at [Energy Access Explorer](https://www.energyaccessexplorer.org/tool/s/) and [REZoning](https://rezoning.energydata.info/). \n\n## Documentation\nFind the tool documentation [here](https://lava-tool.readthedocs.io/en/latest/).\n\n\n## Installation\nClone the repository:\n```sh\ngit clone https://github.com/DEA-GE/LAVA.git\ncd LAVA\n```\n\n### Recommended: Pixi\nInstall dependencies in a new environment based on the `pixi.toml` file:\n```sh\npixi install\n```\n\nActivate the environment:\n```sh\npixi shell\n```\n\nFor more details, see https://pixi.prefix.dev/latest/ (or your local PIXI docs).\nYou are now ready to run the scripts in this repository.\n\n### Alternative: Conda\nThe Python package requirements to use the LAVA tool are in the `requirements.yaml` file. You can install these requirements in a new environment using `conda`:\n\n```sh\nconda env create -f envs/requirements.yaml\n```\n\nActivate the environment:\n```sh\nconda activate lava\n```\n\n## Input data setup\n\nIn order to run the tool with the default data setup do the following:\n* Download the Digital Elevation Model (DEM) for you study region from [GEBCO Gridded Bathymetry Data](https://download.gebco.net/). Use the download tool. Select a larger area around your study region. Set a tick for a GeoTIFF file under \"Grid\" and download the file from the basket. Put the file into the folder __\"DEM\"__ (digital elevation model) and name it __*gebco_cutout.tif*__. This data provides the elevation in each pixel.\n* Create a Copernicus account. In the LAVA-tool, the openEO-connection to ESAworldcover data is implemented. In order to use it, one needs to be registered with the Copernicus Data Space Ecosystem. Follow [these instructions](https://documentation.dataspace.copernicus.eu/Registration.html) to register. When running the LAVA-tool for the first time, you will be asked to authenticate using your Copernicus account. Click on the link printed by the script and login to authenticate. When runnning the tool again, a locally stored refresh token is used for authentication, so you don't have to login again.\n\n\n## Quick start - Basic workflow\nThe basic workflow identifies suitable areas for solar PV and onshore wind based on user-defined parameters. \n1. Adjust configuration files (or use default values for test case).\n2. Data download and pre-processing: run the script `spatial_data_prep.py`. You can run from the terminal via\u003cbr\u003e\n   `python spatial_data_prep.py`\n4. Exclusion of non-suitable land: run the script `exclusion.py`. Run from the terminal to select technology and name the scenario via\u003cbr\u003e\n   `python exclusion.py --technology solar --scenario test`\n\nWith the advanced workflow it is also possible to perform a suitability analysis and derive timeseries data for the available area.\n\n\n\n## Default input data\n| Data name            | Data source |\n|----------------------|-------------|\n| DEM (Elevation)      | [GEBCO Gridded Bathymetry Data](https://download.gebco.net/) |\n| Landcover            | [ESA WorldCover](https://esa-worldcover.org/en) via openEO API (Copernicus Data Space)|\n| Population raster    | [worldpop](https://hub.worldpop.org/project/categories?id=3) |\n| Spatial features \u003cbr\u003e(road, railways, airports, waterbodies,\u003cbr\u003emilitary, substations, power lines, generators)     | OpenStreetMap via overpass or [Geofabrik](https://download.geofabrik.de/) |\n| Coastlines           | Global Oceans and Seas ([Marine Regions](https://marineregions.org/downloads.php)) |\n| Protected Areas      | [World Database of Protected Areas (WDPA) – Protected Planet](https://www.protectedplanet.net/) |\n| Mean Wind Speeds     | [Global Wind Atlas](https://globalwindatlas.info/en/download/gis-files) |\n| Solar Radiation      | [Global Solar Atlas](https://globalsolaratlas.info/download) |\n\n\n\n\n\n## More info / notes\n* Terrascope API: not implemented because of limited functionalities (e.g. only downloads tiles, data cannot be clipped to area of interest). [API documentation](https://vitobelgium.github.io/terracatalogueclient/api.html), [ESAworldvcover Product](https://docs.terrascope.be/#/DataProducts/WorldCover/WorldCover),\n\n* [adding basemaps to QGIS](https://gis.stackexchange.com/questions/20191/adding-basemaps-in-qgis)\n* [Download DEMs in QGIS for a Specified Extent with the OpenTopography DEM Downloader Plugin](https://www.youtube.com/watch?v=EMwPT7tABCg)\n* [Quick Review FABDEM with QGIS](https://www.youtube.com/watch?v=E3zKe81UOl8\u0026t=3s)\n* [Meadows et al.](https://doi.org/10.1080/17538947.2024.2308734) conclude: \"In conclusion, we found FABDEM to be the most accurate DEM overall (especially for forests and low-slope terrain), suggesting that its error correction methodology is effective at reducing large positive errors in particular and that it generalises well to new application sites. Where FABDEM is not an option (given licensing costs for commercial applications), GLO-30 DGED is the clear runner-up under most conditions, with the exception of forests, where NASADEM (re-processed SRTM data) is more accurate.\"\nFor a more nuanced assessment read the articel (for some applications FABDEM might not be the most accurate one).\n\n\n\n## Interesting additional datasets\n* [GEDTM30](https://github.com/openlandmap/GEDTM30): GEDTM30 is a global 1-arc-second (~30m) Digital Terrain Model (DTM) built using a machine-learning-based data fusion approach. It can be used as an alternative to the GEBCO DEM. GEDTM30 will hopefully integrated with openeo soon.\n* [Global Lakes and Wetlands Database](https://essd.copernicus.org/articles/17/2277/2025/#section6): comprehensive global map of 33 different types of wetlands around the world.\n* [LCM-10](https://land.copernicus.eu/en/products/global-dynamic-land-cover/land-cover-2020-raster-10-m-global-annual#general_info): Land Cover 2020 (raster 10 m), global, annual - version 1. See this [LinkedIn post](https://www.linkedin.com/posts/activity-7427245076168323072-RDP4?utm_source=share\u0026utm_medium=member_desktop\u0026rcm=ACoAACUh41YBBCZkBQ_CcPYGaBOBZTkcbQ70IbA). Soon to be available on CDSE via openEO.\n\n__useful to identify residential areas__:\n* [World Settlement Footprint (WSF®) 2019](https://geoservice.dlr.de/web/datasets/wsf_2019): 10m resolution binary mask outlining the extent of human settlements globally derived by means of 2019 multitemporal Sentinel-1 (S1) and Sentinel-2 (S2) imagery.\n* [GHS-BUILT-C - R2023A](https://human-settlement.emergency.copernicus.eu/ghs_buC2023.php): The spatial raster dataset delineates the boundaries of the human settlements at 10m resolution, and describe their inner characteristics in terms of the morphology of the built environment and the functional use. Derived from Sentinel2 composite and Landsat, multitemporal (1975-2030). (Might have higher accuracy than WSF accrording to [this paper](https://doi.org/10.1080/17538947.2024.2390454))\n* [EMC-BUILT - R2025A](https://human-settlement.emergency.copernicus.eu/emc_built_s.php): Exposure Mapping Component built-up surface grid, derived from Sentinel-2 year 2022. EMC-BUILT-R2025A is more accurate than GHS-BUILT-C-R2023A: \"*Compared to its predecessor, the GHSL R2023 built-up product (epoch 2018), the new product [EMC-BUILT-R2025A] shows less issues with overestimation while buildings are delineated more precisely. When comparing quality metrics (both total built-up surface and non-residential built-up surface) the new products show improved results.*\" (see products [documentation](https://human-settlement.emergency.copernicus.eu/documents/EMC-BUILT_R2025.pdf?t=1764778621) page 6)\n","funding_links":[],"readme_doi_urls":["https://doi.org/10.1080/17538947.2024.2308734","https://doi.org/10.1080/17538947.2024.2390454"],"works":{},"citation_counts":{},"total_citations":0,"keywords_from_contributors":["energy-system-model"],"project_url":"https://ost.ecosyste.ms/api/v1/projects/346758","html_url":"https://ost.ecosyste.ms/projects/346758"}