diff --git a/CHANGES.md b/CHANGES.md index 3ede7919d..d64aa209f 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -75,6 +75,10 @@ - +- Add `Rasterband::set_scale` and `Rasterband::set_offset` methods + + - + ## 0.12 - Bump Rust edition to 2021 diff --git a/src/raster/rasterband.rs b/src/raster/rasterband.rs index 0c8002202..dbe8d3521 100644 --- a/src/raster/rasterband.rs +++ b/src/raster/rasterband.rs @@ -472,6 +472,15 @@ impl<'a> RasterBand<'a> { None } + /// Set the scale for this band. + pub fn set_scale(&mut self, scale: f64) -> Result<()> { + let rv = unsafe { gdal_sys::GDALSetRasterScale(self.c_rasterband, scale) }; + if rv != CPLErr::CE_None { + return Err(_last_cpl_err(rv)); + } + Ok(()) + } + /// Returns the offset of this band if set. pub fn offset(&self) -> Option { let mut pb_success = 1; @@ -482,6 +491,15 @@ impl<'a> RasterBand<'a> { None } + /// Set the offset for this band. + pub fn set_offset(&mut self, offset: f64) -> Result<()> { + let rv = unsafe { gdal_sys::GDALSetRasterOffset(self.c_rasterband, offset) }; + if rv != CPLErr::CE_None { + return Err(_last_cpl_err(rv)); + } + Ok(()) + } + /// Get actual block size (at the edges) when block size /// does not divide band size. #[cfg(any(all(major_is_2, minor_ge_2), major_ge_3))] // GDAL 2.2 .. 2.x or >= 3 diff --git a/src/raster/tests.rs b/src/raster/tests.rs index 9d7be8fde..e46913924 100644 --- a/src/raster/tests.rs +++ b/src/raster/tests.rs @@ -693,6 +693,26 @@ fn test_set_rasterband_color_interp() { assert_eq!(band_interp, ColorInterpretation::AlphaBand); } +#[test] +fn test_set_rasterband_scale() { + let driver = Driver::get_by_name("MEM").unwrap(); + let dataset = driver.create("", 1, 1, 1).unwrap(); + let mut rasterband = dataset.rasterband(1).unwrap(); + let scale = 1234.5678; + rasterband.set_scale(scale).unwrap(); + assert_eq!(rasterband.scale().unwrap(), scale); +} + +#[test] +fn test_set_rasterband_offset() { + let driver = Driver::get_by_name("MEM").unwrap(); + let dataset = driver.create("", 1, 1, 1).unwrap(); + let mut rasterband = dataset.rasterband(1).unwrap(); + let offset = -123.456; + rasterband.set_offset(offset).unwrap(); + assert_eq!(rasterband.offset().unwrap(), offset); +} + #[test] fn test_color_interp_names() { assert_eq!(ColorInterpretation::AlphaBand.name(), "Alpha");