{"id":21683749,"url":"https://github.com/open-eo/openeo_odc_driver","last_synced_at":"2025-07-21T10:32:43.395Z","repository":{"id":44549843,"uuid":"276676727","full_name":"Open-EO/openeo_odc_driver","owner":"Open-EO","description":"OpenEO processing engine written in Python based on OpenDataCube, Xarray and Dask.","archived":false,"fork":false,"pushed_at":"2024-10-08T12:21:24.000Z","size":54000,"stargazers_count":8,"open_issues_count":7,"forks_count":5,"subscribers_count":5,"default_branch":"master","last_synced_at":"2025-04-12T07:51:50.337Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Open-EO.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","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}},"created_at":"2020-07-02T15:05:37.000Z","updated_at":"2025-02-20T01:55:57.000Z","dependencies_parsed_at":"2023-10-23T08:24:38.135Z","dependency_job_id":"ac17760f-4593-4b39-96cd-2380c4d4248e","html_url":"https://github.com/Open-EO/openeo_odc_driver","commit_stats":null,"previous_names":["open-eo/openeo_odc_driver","sarscripts/openeo_odc_driver"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/Open-EO/openeo_odc_driver","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Open-EO%2Fopeneo_odc_driver","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Open-EO%2Fopeneo_odc_driver/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Open-EO%2Fopeneo_odc_driver/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Open-EO%2Fopeneo_odc_driver/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Open-EO","download_url":"https://codeload.github.com/Open-EO/openeo_odc_driver/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Open-EO%2Fopeneo_odc_driver/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":266285459,"owners_count":23905354,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":[],"created_at":"2024-11-25T16:13:21.573Z","updated_at":"2025-07-21T10:32:43.378Z","avatar_url":"https://github.com/Open-EO.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# OpenEO ODC Driver\nOpenEO processing engine written in Python based on OpenDataCube, Xarray and Dask.\n\n**Please note: this project is still under development and many changes will occur in the next months.**\n\nCurrently it is based on openEO processes implemented in this repository together with the openEO process graph parser from https://github.com/Open-EO/openeo-pg-parser-python\n\nThe next phase of the project will use the process implementations available at [openeo-processes-dask](https://github.com/Open-EO/openeo-processes-dask/) and the parser [openeo-pg-parser-networkx](https://github.com/Open-EO/openeo-pg-parser-networkx).\n\n\u003cp float=\"center\"\u003e\n  \u003cimg src=\"https://avatars.githubusercontent.com/u/23743223?s=200\u0026v=4\" width=\"200\" hspace=\"20\"/\u003e\n  \u003cimg src=\"https://avatars.githubusercontent.com/u/26125288?s=200\u0026v=4\" width=\"200\" hspace=\"20\"/\u003e\n  \u003cimg src=\"https://avatars.githubusercontent.com/u/63704085?s=200\u0026v=4\" width=\"200\" hspace=\"20\"/\u003e  \n\u003c/p\u003e\n\n# Docker deployment:\n\nBased on the [cube-in-a-box](https://github.com/opendatacube/cube-in-a-box) project and on the Docker image from [andriyreznik](https://github.com/andriyreznik): https://github.com/andriyreznik/docker-python-gdal\n\nIt requires Docker and Compose plugin installed. Please check the official documentation if you don't know how to install them: https://docs.docker.com/compose/install/\n\nIt also requires `make` to use the Makefile. If you don't have it and/or you can't install it, you can just manually type in the command contained in the Makefile.\n\n## Step 1: Clone the repository\n```sh\ngit clone https://github.com/SARScripts/openeo_odc_driver.git -b dev\ncd openeo_odc_driver\n```\n\n## Step 2: Create and run the dockers\n\nTo create and run the docker containers, run:\n\n```sh\nmake setup\n```\n\nThis step will run in a sequence the Makefile steps `build up init product index explorer`. The result will be 3 dockers running.\n\nIt will automatically index publicly available Sentinel-2 data. To change the area of interest, modify the BBOX in the Makefile: `lon_min,lat_min,lon_max,lat_max`\n\nOne will serve the postgres database containing the OpenDataCube index data.\n\nAnother will serve the `datacube-explorer` web application, exposing the OpenDataCube metadata.\n\nThe last one will serve the `openeo_odc_driver`, getting as input openEO proces graphs and processing them.\n\nIf everything went well, you should see them running using:\n\n```sh\nsudo docker ps -a\nCONTAINER ID        IMAGE                               COMMAND                  CREATED             STATUS                    PORTS                    NAMES\n220ebc8a1dfe        openeoodcdriver_openeo_odc_driver   \"/tini -- gunicorn -…\"   18 hours ago        Up 18 hours               0.0.0.0:5001-\u003e5000/tcp   openeoodcdriver_openeo_odc_driver_1\nc6a419dfb99d        openeoodcdriver_explorer            \"/tini -- gunicorn '…\"   18 hours ago        Up 18 hours               0.0.0.0:9001-\u003e9000/tcp   openeoodcdriver_explorer_1\nfa1b162c8d44        postgis/postgis:12-2.5              \"docker-entrypoint.s…\"   36 hours ago        Up 36 hours               0.0.0.0:5433-\u003e5432/tcp   openeoodcdriver_postgres_1\n```\n\nYou can verify that the deployment was successfull visiting:\n\n`http://localhost:9001` for the datacube explorer web app\n\n`http://localhost:5001/collections/` for the openEO collections exposed via the openeo_odc_driver.\n\n\u003cdetails\u003e\u003csummary\u003e\n  \n### Troubleshooting\n\n\u003c/summary\u003e\n  \n#### make setup : `docker.errors.DockerException: Error while fetching server API version`\n\nAfter checking that the docker service is actually running, this might be then a permissions issue with the socket:\n\n```sh\nsudo chmod 666 /var/run/docker.sock\n```\n\n(credits: [Mafei@SO](https://stackoverflow.com/a/68179139/1329340))\n\u003c/details\u003e\n\n## Step 3: Test your environment with an openEO process graph:\n\n```sh\npython tests/test_process_graph.py ./tests/process_graphs/NDVI_Bolzano_median.json\n```\n\n![image](https://user-images.githubusercontent.com/31700619/220927309-cd4be598-4f93-43cf-ac17-d6dbaa1a2bc3.png)\n\n![image](https://user-images.githubusercontent.com/31700619/220927197-5fccca3a-fff4-4311-9c99-af7c6c4d08f4.png)\n\n# Local installation instructions:\n\n## Step 1: Clone the repository\n```sh\ngit clone https://github.com/SARScripts/openeo_odc_driver.git -b dev\ncd openeo_odc_driver\n```\n\n## Step 2: Prepare the python environment\n\nNew ad-hoc conda environment:\n```sh\nconda env create -f environment.yml\nconda activate openeo_odc_driver\n```\n\n## Step 3:\nModify the `config.py` file with your system's details:\n1. Set the datacube-explorer address. For local deployment it should be `http://0.0.0.0:9000` and for the Docker deployment `http://explorer:9000`.\n```python\nDATACUBE_EXPLORER_ENDPOINT = \"http://0.0.0.0:9000\"\n```\n\n2. Set the OpenDatCube config file `.datacube.conf` path or leave it to None if ENV variables are set (like in the Docker deployment).\n```python\nOPENDATACUBE_CONFIG_FILE = ~/.datacube.conf # or None\n```\n\n3. Set the result folder path to write output files. If this application is used together with the [openeo-sping-driver](https://github.com/Open-EO/openeo-spring-driver), used for serving the full openEO API, this folder should be the same as the one set in `application.properties` for `org.openeo.tmp.dir`, so that the `openeo-spring-driver` can read the result directly from there.\n```python\nRESULT_FOLDER_PATH = ''\n```\n\n4. The `OPENEO_PROCESSES` variable is used to retrieve the list of available openEO processes. It can be the path to a json file, a dictionaty or an http address. See [here](https://github.com/Open-EO/openeo-pg-parser-python/blob/798668e461ec2a0d3153873413afb0a76a72b61a/src/openeo_pg_parser/translate.py#L263) for detailed info. The dault value is the /processes endpoint of the Eurac openEO back-end.\n```python\nOPENEO_PROCESSES = \"https://openeo.eurac.edu/processes\"\n```\n\nThe other config parameters could be looked at later on and are not affecting the `openeo_odc_driver` functionality. In the config.py file there are comments explaining their usage.\n\n## Step 4: Start the web server:\n```sh\ngunicorn -c gunicorn.conf.py odc_backend:app\n```\n\n# Implemented OpenEO processes (to be updated)\n## aggregate \u0026 resample\n- resample_cube_temporal\n- resample_cube_spatial\n- aggregate_spatial\n- aggregate_spatial_window\n- aggregate_temporal_period\n## arrays\n- array_element\n- array_interpolate_linear\n## comparison\n- if\n- lt\n- lte\n- gt\n- gte\n- eq\n- neq\n## cubes\n- load_collection\n- save_result (PNG,GTIFF,NETCDF,JSON)\n- reduce_dimension\n- add_dimension\n- apply_dimension\n- filter_bands\n- filter_temporal\n- filter_spatial\n- filter_bbox\n- rename_labels\n- merge_cubes\n- apply\n- fit_curve\n- predict_curve\n- resample_cube_spatial\n- resample_cube_temporal \n## logic\n- and\n- or\n## masks\n- mask\n## math\n- multiply\n- divide\n- subtract\n- add\n- sum\n- product\n- sqrt\n- normalized_difference\n- min\n- max\n- mean\n- median\n- power\n- absolute\n- linear_scale_range\n- log\n- ln\n- quantiles\n- clip\n## experimental processes (SAR2Cube)\n- coherence\n- geocoding\n- radar_mask\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fopen-eo%2Fopeneo_odc_driver","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fopen-eo%2Fopeneo_odc_driver","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fopen-eo%2Fopeneo_odc_driver/lists"}