From bfbdb02091a69df9877494ec37919ba9e8732f2f Mon Sep 17 00:00:00 2001 From: Michael Salib Date: Wed, 31 Aug 2022 14:05:42 -0400 Subject: [PATCH 1/3] Add `set_scale` and `set_offset` to `Rasterband` --- src/raster/rasterband.rs | 18 ++++++++++++++++++ src/raster/tests.rs | 20 ++++++++++++++++++++ 2 files changed, 38 insertions(+) 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..7cbebece3 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 = 3.14159; + 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"); From 43cd31d728813bda932a2c3543bc5fc1d2d63e55 Mon Sep 17 00:00:00 2001 From: Michael Salib Date: Wed, 31 Aug 2022 14:07:58 -0400 Subject: [PATCH 2/3] update changelog --- CHANGES.md | 4 ++++ 1 file changed, 4 insertions(+) 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 From da74462a8a6515ca7bd9c3045e11424268398a80 Mon Sep 17 00:00:00 2001 From: Michael Salib Date: Wed, 31 Aug 2022 14:14:41 -0400 Subject: [PATCH 3/3] fix a clippy lint --- src/raster/tests.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/raster/tests.rs b/src/raster/tests.rs index 7cbebece3..e46913924 100644 --- a/src/raster/tests.rs +++ b/src/raster/tests.rs @@ -698,7 +698,7 @@ 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 = 3.14159; + let scale = 1234.5678; rasterband.set_scale(scale).unwrap(); assert_eq!(rasterband.scale().unwrap(), scale); }