diff --git a/rio_tiler/io/xarray.py b/rio_tiler/io/xarray.py index 5cfb0e49..dfaf90d4 100644 --- a/rio_tiler/io/xarray.py +++ b/rio_tiler/io/xarray.py @@ -223,6 +223,10 @@ def tile( arr = ds.to_masked_array() arr.mask |= arr.data == ds.rio.nodata + output_bounds = ds.rio._unordered_bounds() + if output_bounds[1] > output_bounds[3] and ds.rio.transform().e > 0: + arr = arr[..., ::-1, :] + return ImageData( arr, bounds=tile_bounds, @@ -305,6 +309,10 @@ def part( arr = ds.to_masked_array() arr.mask |= arr.data == ds.rio.nodata + output_bounds = ds.rio._unordered_bounds() + if output_bounds[1] > output_bounds[3] and ds.rio.transform().e > 0: + arr = arr[..., ::-1, :] + img = ImageData( arr, bounds=ds.rio.bounds(), @@ -387,6 +395,10 @@ def preview( arr = ds.to_masked_array() arr.mask |= arr.data == ds.rio.nodata + output_bounds = ds.rio._unordered_bounds() + if output_bounds[1] > output_bounds[3] and ds.rio.transform().e > 0: + arr = arr[..., ::-1, :] + img = ImageData( arr, bounds=ds.rio.bounds(), @@ -523,6 +535,10 @@ def feature( arr = ds.to_masked_array() arr.mask |= arr.data == ds.rio.nodata + output_bounds = ds.rio._unordered_bounds() + if output_bounds[1] > output_bounds[3] and ds.rio.transform().e > 0: + arr = arr[..., ::-1, :] + img = ImageData( arr, bounds=ds.rio.bounds(),