Description
This is a big question that may generate lots of discussion: should we allow here only one CRS defined per xarray.Dataset
/ xarray.DataArray
or should we support multiple CRS?
Why supporting multiple CRSs?
Xproj relies on scalar Xarray coordinates with a CRSIndex
. This is inspired by the CF-conventions, and such kind of coordinate is used already in tools like rioxarray and odc-geo. AFAIK there doesn't seem to be any restriction in the CF-conventions about the number of grid mapping coordinate variables? (see CF-conventions 1.10, section 5.6, although I might have overlooked it? (EDIT: example 5.13 has both lat-lon geographic and x-y projected coordinate systems in the same dataset). There's no real technical barrier either in supporting multi-CRS with the current Xarray data model (coordinates + custom indexes).
Other Xarray extensions like xvec technically support multiple CRS (xvec
currently encapsulates the CRS into the geometry coordinate / index). Although I’m not sure if multi-CRS vector data cubes exist and/or make sense, in theory there will be some friction in adopting xproj
if the latter only works with single-CRS (breaking changes).
Single-CRS is easy to enforce in 3rd-party extensions. #1 provides a convenient API to work with single-CRS datasets or dataarrays, while still supporting the multi-CRS case.
Why this may be a bad idea?
Supporting multi-CRS datasets possibly opens a can of worms?
This is potentially confusing. I cannot imagine a DataArray representing a single raster (or a mosaic / stack of rasters) have multiple CRSs defined. I haven't checked but I guess that rioxarray
and odc-geo
won't work with multi-CRS (EDIT: I checked that and both libraries do not support multiple grid mapping attribute values). Although here again, single-CRS may be enforced in those libraries and no big deal if xproj
provides a user-friendly, single-CRS API (#1)?
Any thoughts on this?