I have the following piece of
rasterio Python code, to read in a tiffs with discrete integer classes, which I mask immediately upon loading. I need finegrained control over the nodata value, which needs to be the same regardless of the input data type.
import rasterio from rasterio.mask import mask #[...] with rasterio.open(Geotiff_path) as src: cropped_image, _ = mask(src, POL, nodata=128, crop=True, all_touched=True ) return cropped_image.squeeze()
The problem is that if
nodata=128 overflows back to
-128. Of course, one fix is to simply use
nodata=127. However, I would prefer it if it were possible to return the
cropped_image with a different dtype such as
int16, wherein the
nodata didn't overflow.
Note that doing
cropped_image.squeeze().astype(np.uint16) does the transformation too late, i.e., the overflow of the
nodata value to -128 already happened. So the question is: how can I read in the rasterio grid (or the masked version) with a different dtype than the original grid reports?