diff --git a/src/raster/mdarray.rs b/src/raster/mdarray.rs index 5cb453d6c..3d47874f9 100644 --- a/src/raster/mdarray.rs +++ b/src/raster/mdarray.rs @@ -162,6 +162,16 @@ impl<'a> MDArray<'a> { let rv = unsafe { let data_type = GDALMDArrayGetDataType(self.c_mdarray); + // HACK: this is too strict, but see https://github.com/georust/gdal/issues/290 + if !self.datatype().class().is_numeric() + || self.datatype().numeric_datatype() != T::gdal_type() + { + return Err(GdalError::UnsupportedMdDataType { + data_type: self.datatype().class(), + method_name: "GDALMDArrayRead", + }); + } + let rv = gdal_sys::GDALMDArrayRead( self.c_mdarray, array_start_index.as_ptr(), @@ -920,6 +930,8 @@ mod tests { let values = md_array.read_as::(vec![0, 0], vec![20, 20]).unwrap(); assert_eq!(&values[..4], &[181, 181, 156, 148]); + + assert!(md_array.read_as::(vec![0, 0], vec![20, 20]).is_err()); } #[test]