{"id":46100804,"url":"https://github.com/jwagemann/era5_in_gee","last_synced_at":"2026-03-01T19:37:18.863Z","repository":{"id":49363480,"uuid":"175845549","full_name":"jwagemann/era5_in_gee","owner":"jwagemann","description":"Functions and Python scripts to ingest ERA5 data into Google Earth Engine","archived":false,"fork":false,"pushed_at":"2021-07-26T10:32:06.000Z","size":354,"stargazers_count":79,"open_issues_count":1,"forks_count":22,"subscribers_count":4,"default_branch":"master","last_synced_at":"2024-06-11T19:39:46.982Z","etag":null,"topics":["climate-data","copernicus","era5","gdal","google-cloud-platform","googleearthengine","netcdf","reanalysis"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jwagemann.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2019-03-15T15:26:27.000Z","updated_at":"2024-05-30T17:14:24.000Z","dependencies_parsed_at":"2022-09-07T16:04:21.663Z","dependency_job_id":null,"html_url":"https://github.com/jwagemann/era5_in_gee","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/jwagemann/era5_in_gee","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jwagemann%2Fera5_in_gee","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jwagemann%2Fera5_in_gee/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jwagemann%2Fera5_in_gee/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jwagemann%2Fera5_in_gee/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jwagemann","download_url":"https://codeload.github.com/jwagemann/era5_in_gee/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jwagemann%2Fera5_in_gee/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29981644,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-01T16:35:47.903Z","status":"ssl_error","status_checked_at":"2026-03-01T16:35:44.899Z","response_time":124,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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"}},"keywords":["climate-data","copernicus","era5","gdal","google-cloud-platform","googleearthengine","netcdf","reanalysis"],"created_at":"2026-03-01T19:37:18.376Z","updated_at":"2026-03-01T19:37:18.840Z","avatar_url":"https://github.com/jwagemann.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ERA5 reanalysis data in Google Earth Engine\n\n\nThis repository contains a set of functions and example scripts to ingest Copernicus ERA5 reanalysis data into Google Earth Engine based on [manifest uploads](https://developers.google.com/earth-engine/image_manifest).\n\nThe functions were developed during the process of making a subset of the ERA5 reanalysis data available in Google Earth Engine. \n\n\u003cbr\u003e\n\n## Workflow overview\nThe workflow consists of six major steps:\n  1.  Downloading hourly data as daily files or monthly aggregates in `NetCDF` format from the [Climate Data Store](https://cds.climate.copernicus.eu/#!/home) with [`cdsapi`](https://pypi.org/project/cdsapi/)\n  2.  Aggregating hourly files to daily means or sums (total precipitation) with [`xarray`](http://xarray.pydata.org/en/stable/)\n  3.  Converting `NetCDF` data files to `GeoTiff` with [`gdal`](https://pypi.org/project/GDAL/)\n  4.  Uploading hourly, daily and monthly `GeoTiff` files to [Google Cloud Platform (GCP)](https://cloud.google.com/) with [`google-cloud-storage Python API`](https://cloud.google.com/storage/docs/reference/libraries)\n  5.  Creating image manifests (JSON-based files) describing the metadata and band names of the resulting Earth Engine asset\n  6.  Ingesting data files uploaded to GCP as assets into [Earth Engine](https://earthengine.google.com/) with [`earthengine-api`](https://developers.google.com/earth-engine/python_install-conda.html) and [manifest uploads](https://developers.google.com/earth-engine/image_manifest)\n\n\u003cbr\u003e\n\n![](/img/workflow.png)\n\n\u003cbr\u003e\n\n\n## Repository content\n* ERA5 in GEE functions\n  * [Python script](./era5_in_gee_functions.ipynb) \n  * [Jupyter notebook](./era5_in_gee_functions.ipynb)\n* Example workflows\n  * [Hourly assets](./hourly_files_script.py)\n  * [Daily assets](./daily_files_script.py)\n  * [Daily single asset](./daily_files_script_single_parameter.py)\n  * [Monthly assets](./monthly_files_script.py)\n* Example manifest files\n  * [Hourly multiple assets](./manifest_structure_hourly.json)\n  * [Daily multiple assets](./manifest_structure_daily.json)\n  * [Daily single asset](./manifest_structure_daily_single_parameter.json) \n  * [Monthly multiple assets](./manifest_structure_monthly.json)\n * Example scripts for\n   * [Retrieve ERA5 reanalysis from the CDS with `cdsapi`](./cds_data_retrieve.py)\n   * [Delete blobs from GCP buckets](./delete_from_gcp.py)\n\n\u003cbr\u003e\n\n## Python packages required\n- [cdsapi](https://pypi.org/project/cdsapi/)\n- [EarthEngine Python API](https://developers.google.com/earth-engine/python_install-conda.html)\n- [google-cloud-storage Python API](https://cloud.google.com/storage/docs/reference/libraries)\n- [gdal](https://pypi.org/project/GDAL/)\n- [xarray](http://xarray.pydata.org/en/stable/)\n\n\u003cbr\u003e\n\n## Naming convention and folder structure\nThe scripts base on the following `naming convention` and `folder_structure`:\n### Naming Convention\nData is downloaded from the Climate Data Store with the following syntax: \n* `era5_` + `name_of_variable_` + `year_` + `month_` + `day` + `.nc`\n  * Example for a  file of 2m dewpoint temperature from 1 January 1980: `era5_2m_dewpoint_temperature_1980_01_01.nc`\n\n### Folder Structure: \n(*example for 2m air temperature*)\n- `era5_t2m`\n  - `nc`\n    - `hourly`\n      - `year` (e.g. 1979)\n    - `daily`\n      - `year` (e.g. 1979)\n    - `monthly`\n      - `year` (e.g. 1979)\n  - `tiff`\n    - `hourly`\n      - `year` (e.g. 1979)\n    - `daily`\n      - `year` (e.g. 1979)\n    - `monthly`\n      - `year` (e.g. 1979)\n- `manifests`\n  - `era5_hourly`\n      - `year` (e.g. 1979)\n  - `era5_daily`\n      - `year` (e.g. 1979)\n  - `era5_monthly`\n      - `year` (e.g. 1979)\n  - `manifest_template.json`\n\n\n## References\n- [ERA5 reanalysis data in the Climate Data Store](https://cds.climate.copernicus.eu/cdsapp#!/dataset/reanalysis-era5-single-levels?tab=overview)\n- [Google Earth Engine](https://earthengine.google.com/)\n- [ERA5 DAILY | GEE Public Data Catalog](https://developers.google.com/earth-engine/datasets/catalog/ECMWF_ERA5_DAILY)\n- [ERA5 MONTHLY | GEE Public Data Catalog](https://developers.google.com/earth-engine/datasets/catalog/ECMWF_ERA5_MONTHLY)\n- [ERA5 in GEE | Slides from the EarthEngineVirtualMeetup in Dec 2019](https://speakerdeck.com/jwagemann/era5-climate-reanalysis-in-earth-engine)\n- [ERA5 reanalysis data available in Earth Engine - ECMWF Newsletter Number 162 Winter 2020](https://www.ecmwf.int/en/newsletter/162/news/era5-reanalysis-data-available-earth-engine)\n\n\u003cbr\u003e\n\n## License\n\u003ca rel=\"license\" href=\"http://creativecommons.org/licenses/by-nc/4.0/\"\u003e\u003cimg alt=\"Creative Commons License\" style=\"border-width:0\" src=\"https://i.creativecommons.org/l/by-nc/4.0/88x31.png\" /\u003e\u003c/a\u003e\u003cbr /\u003eThis work is licensed under a \u003ca rel=\"license\" href=\"http://creativecommons.org/licenses/by-nc/4.0/\"\u003eCreative Commons Attribution-NonCommercial 4.0 International License\u003c/a\u003e.\n\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjwagemann%2Fera5_in_gee","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjwagemann%2Fera5_in_gee","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjwagemann%2Fera5_in_gee/lists"}