Skip to content

Add DGGS proposal / implementation guide#562

Draft
m-mohr wants to merge 1 commit intodraftfrom
dggs
Draft

Add DGGS proposal / implementation guide#562
m-mohr wants to merge 1 commit intodraftfrom
dggs

Conversation

@m-mohr
Copy link
Member

@m-mohr m-mohr commented Dec 19, 2025

Description how DGGS could be implemented in openEO.
Feedback would be very welcome, especially from developers that have a good understanding of DGGS. (I'm pretty new to it.)

Comment on lines +16 to +20
2. **Geometry dimension**: Expose DGGS as a geometry dimension to the user.
- Each grid cell could be represented as a geometry (e.g. polygon or multi-polygon) with an associated DGGS cell ID. The datacube would be a **vector data cube**.
- Backends would need to keep track that the geometry dimension is based on a DGGS to efficiently apply operations that required knowledge of DGGS relationships such as adjacency and parent–child relation. Otherwise, this would need to be retrieved from the geometries itself, which is likely to be less efficient.
- Processes don't distinguish between "normal" geometry dimensions and DGGS-based geometry dimensions, which means that special DGGS processes that would require knowledge of DGGS can't be defined unambiguously. Users may pass in any geometry dimension accidentally.
- Raster-based such as `apply_kernel`, `aggregate_spatial`, or `resample_spatial` processes can't be applied. Operations based on DGGS cells can be applied, e.g. `apply_dimension` and `reduce_dimension` along the geometry dimension.
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just a note - using a geometry dimension would effectively mean you treat the DGGS as an unstructured grid (although with arbitrary cell shapes).

Conventions and client implementations for ugrids are

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Indeed, that's the weakness of this option.

- It would allow the definition of new processes that directly operate on DGGS concepts, such as parent/child aggregation, k-ring neighborhood operations, or resolution changes without reprojection. It also allows that processes directly require the DGGS dimension type in process parameters and return values, which otherwise is impossible.
- Requires a new version of the openEO API and STAC datacube extension that adds the new dimension type.
- A set of new and adapted processes that explicitly support DGGS semantics must be specified.

Copy link

@j08lue j08lue Jan 6, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
## Key usage patterns to support
1. ...

I think the evaluation of options could be guided by the key usage patterns - if we can identify them. Like:

  1. What are the most common tasks people perform with openEO? (Or GEE, for larger user base)?
  2. Do these tasks require to operate on the original data at maximum precision (e.g. for conservation of original properties such as relationship between spectral bands - thinking atmospheric correction etc.)?
  3. Do these tasks involve combining datasets (of different source projection)?
  4. What are common DGGS-specific operations? Would people miss these if the topology is hidden (mapping to raster grids)?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Indeed, that's where I need input from the service providers. I only have a rough feeling as I don't have insight into the operational services.

@j08lue
Copy link

j08lue commented Jan 6, 2026

DGGS are not unstructured, but I wonder whether unstructured grid conventions and client implementations can still be helpful to look at? 💭


- An alternative process could be defined that allows to load the dataset with different dimension types.

Note that both `load_collection` and `load_dggs` would have to define cell inclusion rules, e.g. which cells to include and how to handle partial cells.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't see load_dggs mentioned anywhere else, did I miss it?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think I meant to write more about it, but forgot it. Pretty much meant to be a DGGS specific version of load_collection.

@m-mohr
Copy link
Member Author

m-mohr commented Jan 7, 2026

Discussed today in the openEO community and PSC meetings. There' generally support to specify version 3 - a new dimension type. More feedback to this topic is highly appreciated as none of us is really a DGGS expert.

@clausmichele
Copy link
Member

DGGS are not unstructured, but I wonder whether unstructured grid conventions and client implementations can still be helpful to look at? 💭

* https://github.com/ugrid-conventions/ugrid-conventions/

* https://github.com/uxarray/uxarray

* https://github.com/Deltares/xugrid

Good hint, I've checked and the uxarray package seems to support HEALPix: https://uxarray.readthedocs.io/en/latest/user-guide/grid-formats.html#healpix

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants