From aea23ad39ddd6b5d97d47460f0a60aae49a81c02 Mon Sep 17 00:00:00 2001 From: Christopher Polster Date: Wed, 22 Jan 2025 13:34:49 +0100 Subject: [PATCH] Fixes and improvements for geotiff encoder --- src/earthkit/data/encoders/geotiff.py | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/src/earthkit/data/encoders/geotiff.py b/src/earthkit/data/encoders/geotiff.py index c8b7636a..0fc292fd 100644 --- a/src/earthkit/data/encoders/geotiff.py +++ b/src/earthkit/data/encoders/geotiff.py @@ -22,15 +22,20 @@ class GeoTIFFEncodedData(EncodedData): def __init__(self, ds): self.ds = ds - def to_bytes(self): + def to_bytes(self, **kwargs): import rasterio.io - m = rasterio.io.MemoryFile - self.ds.rio.to_raster(m, driver=self._GDAL_DRIVER) + m = rasterio.io.MemoryFile() + self._to_raster(m, **kwargs) return m.getbuffer() - def to_file(self, f): - self.ds.rio.to_raster(f, driver=self._GDAL_DRIVER) + def to_file(self, f, **kwargs): + self._to_raster(f, **kwargs) + + def _to_raster(self, dst, **kwargs): + options = {"driver": self._GDAL_DRIVER} + options.update(kwargs) + self.ds.rio.to_raster(dst, **options) def metadata(self, key): raise NotImplementedError @@ -51,7 +56,11 @@ def encode(self, data, **kwargs): return data._encode(self, **kwargs) def _encode(self, data, **kwargs): - return GeoTIFFEncodedData(data.to_xarray()) + ds = data.to_xarray() + if ds.rio.crs is None: + crs = data.projection().to_cartopy_crs() + ds.rio.write_crs(crs, inplace=True) + return GeoTIFFEncodedData(ds) def _encode_field(self, field, **kwargs): return self._encode(field, **kwargs)