Skip to content

Commit

Permalink
Merge georust#440
Browse files Browse the repository at this point in the history
440: Use tinymarble.tif instead of the PNG r=metasim a=lnicola

- [x] I agree to follow the project's [code of conduct](https://github.com/georust/gdal/blob/master/CODE_OF_CONDUCT.md).
- [x] I added an entry to `CHANGES.md` if knowledge of this change could be valuable to users.
---

We already have the TIFF in the repo, and this fixes the [block size](https://github.com/metasim/gdal/blob/0a50ba27b21ebe6dbe05d1ba1342dfa3c9af0fe1/src/raster/tests.rs#L507-L510) tests, where the official Docker images use `ENABLE_WHOLE_IMAGE_OPTIMIZATION`, which [causes](https://github.com/OSGeo/gdal/blob/bb931fe41aa2c348c6d40f4d3b0e3612246ba21e/frmts/png/pngdataset.cpp#L110-L119) the block size to be equal to the image size, while most distributions of GDAL don't.

I regenerated the existing TIFF, which has reversed (?), using:

```sh
gdal_translate tinymarble.png tinymarble.tif
gdal_edit.py -a_srs EPSG:4326 tinymarble.tif
gdaladdo -ro -r bilinear tinymarble.tif 2 4
```

Co-authored-by: Laurențiu Nicola <lnicola@dend.ro>
  • Loading branch information
bors[bot] and lnicola committed Oct 1, 2023
2 parents 95e8ecf + f13f761 commit 84a33d7
Show file tree
Hide file tree
Showing 10 changed files with 56 additions and 101 deletions.
1 change: 0 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
/.vscode
/gdal-sys/target
/.idea
/fixtures/tinymarble.tif.aux.xml
/3rd

# gtags
Expand Down
2 changes: 1 addition & 1 deletion examples/metadata.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ fn main() {
let driver = gdal::DriverManager::get_driver_by_name("mem").unwrap();
println!("driver description: {:?}", driver.description());

let path = Path::new("./fixtures/tinymarble.png");
let path = Path::new("./fixtures/tinymarble.tif");
let dataset = Dataset::open(path).unwrap();
println!("dataset description: {:?}", dataset.description());

Expand Down
2 changes: 1 addition & 1 deletion examples/rasterband.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ use gdal::{Dataset, Metadata};
use std::path::Path;

fn main() {
let path = Path::new("./fixtures/tinymarble.png");
let path = Path::new("./fixtures/tinymarble.tif");
let dataset = Dataset::open(path).unwrap();
println!("dataset description: {:?}", dataset.description());

Expand Down
Binary file removed fixtures/tinymarble.png
Binary file not shown.
22 changes: 0 additions & 22 deletions fixtures/tinymarble.png.aux.xml

This file was deleted.

Binary file modified fixtures/tinymarble.tif
Binary file not shown.
3 changes: 3 additions & 0 deletions fixtures/tinymarble.tif.aux.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
<PAMDataset>
<SRS dataAxisToSRSAxisMapping="2,1">GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AXIS["Latitude",NORTH],AXIS["Longitude",EAST],AUTHORITY["EPSG","4326"]]</SRS>
</PAMDataset>
Binary file modified fixtures/tinymarble.tif.ovr
Binary file not shown.
26 changes: 13 additions & 13 deletions src/metadata.rs
Original file line number Diff line number Diff line change
Expand Up @@ -306,10 +306,10 @@ mod tests {

#[test]
fn test_get_dataset_driver() {
let dataset = Dataset::open(fixture("tinymarble.png")).unwrap();
let dataset = Dataset::open(fixture("tinymarble.tif")).unwrap();
let driver = dataset.driver();
assert_eq!(driver.short_name(), "PNG");
assert_eq!(driver.long_name(), "Portable Network Graphics");
assert_eq!(driver.short_name(), "GTiff");
assert_eq!(driver.long_name(), "GeoTIFF");
}

#[test]
Expand All @@ -320,26 +320,26 @@ mod tests {

#[test]
fn test_get_metadata_domains() {
let dataset = Dataset::open(fixture("tinymarble.png")).unwrap();
let dataset = Dataset::open(fixture("tinymarble.tif")).unwrap();
let mut domains = dataset.metadata_domains();
if domains[0].is_empty() {
domains.remove(0);
}
domains.retain(|d| !d.is_empty());
domains.sort();
domains.dedup();

assert_eq!(
domains,
vec!(
vec![
"COLOR_PROFILE",
"DERIVED_SUBDATASETS",
"IMAGE_STRUCTURE",
"xml:XMP",
"DERIVED_SUBDATASETS",
"COLOR_PROFILE"
)
]
);
}

#[test]
fn test_get_metadata_domain() {
let dataset = Dataset::open(fixture("tinymarble.png")).unwrap();
let dataset = Dataset::open(fixture("tinymarble.tif")).unwrap();
let domain = "None";
let meta = dataset.metadata_domain(domain);
assert_eq!(meta, None);
Expand All @@ -351,7 +351,7 @@ mod tests {

#[test]
fn test_get_metadata_item() {
let dataset = Dataset::open(fixture("tinymarble.png")).unwrap();
let dataset = Dataset::open(fixture("tinymarble.tif")).unwrap();
let key = "None";
let domain = "None";
let meta = dataset.metadata_item(key, domain);
Expand Down
101 changes: 38 additions & 63 deletions src/raster/tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ use ndarray::arr2;

#[test]
fn test_open() {
let dataset = Dataset::open(fixture("tinymarble.png"));
let dataset = Dataset::open(fixture("tinymarble.tif"));
assert!(dataset.is_ok());

let missing_dataset = Dataset::open(fixture("no_such_file.png"));
Expand All @@ -24,23 +24,22 @@ fn test_open() {

#[test]
fn test_get_raster_size() {
let dataset = Dataset::open(fixture("tinymarble.png")).unwrap();
let dataset = Dataset::open(fixture("tinymarble.tif")).unwrap();
let (size_x, size_y) = dataset.raster_size();
assert_eq!(size_x, 100);
assert_eq!(size_y, 50);
}

#[test]
fn test_get_raster_count() {
let dataset = Dataset::open(fixture("tinymarble.png")).unwrap();
let dataset = Dataset::open(fixture("tinymarble.tif")).unwrap();
let count = dataset.raster_count();
assert_eq!(count, 3);
}

#[test]
fn test_get_projection() {
let dataset = Dataset::open(fixture("tinymarble.png")).unwrap();
//dataset.set_projection("WGS84");
let dataset = Dataset::open(fixture("tinymarble.tif")).unwrap();
let projection = dataset.projection();
assert_eq!(
projection.chars().take(16).collect::<String>(),
Expand All @@ -50,7 +49,7 @@ fn test_get_projection() {

#[test]
fn test_read_raster() {
let dataset = Dataset::open(fixture("tinymarble.png")).unwrap();
let dataset = Dataset::open(fixture("tinymarble.tif")).unwrap();
let rb = dataset.rasterband(1).unwrap();
let rv = rb.read_as::<u8>((20, 30), (2, 3), (2, 3), None).unwrap();
assert_eq!(rv.size.0, 2);
Expand All @@ -65,35 +64,35 @@ fn test_read_raster() {

#[test]
fn test_read_raster_with_default_resample() {
let dataset = Dataset::open(fixture("tinymarble.png")).unwrap();
let dataset = Dataset::open(fixture("tinymarble.tif")).unwrap();
let rb = dataset.rasterband(1).unwrap();
let rv = rb.read_as::<u8>((20, 30), (4, 4), (2, 2), None).unwrap();
assert_eq!(rv.size.0, 2);
assert_eq!(rv.size.1, 2);
assert_eq!(rv.data, vec!(10, 4, 6, 11));
assert_eq!(rv.data, vec!(8, 7, 8, 11));

let mut buf = rv;
rb.read_into_slice((20, 30), (4, 4), (2, 2), &mut buf.data, None)
.unwrap();
assert_eq!(buf.data, vec!(10, 4, 6, 11));
assert_eq!(buf.data, vec!(8, 7, 8, 11));
}

#[test]
fn test_read_raster_with_average_resample() {
let dataset = Dataset::open(fixture("tinymarble.png")).unwrap();
let dataset = Dataset::open(fixture("tinymarble.tif")).unwrap();
let rb = dataset.rasterband(1).unwrap();
let resample_alg = ResampleAlg::Average;
let rv = rb
.read_as::<u8>((20, 30), (4, 4), (2, 2), Some(resample_alg))
.unwrap();
assert_eq!(rv.size.0, 2);
assert_eq!(rv.size.1, 2);
assert_eq!(rv.data, vec!(8, 6, 8, 12));
assert_eq!(rv.data, vec!(8, 7, 8, 11));

let mut buf = rv;
rb.read_into_slice((20, 30), (4, 4), (2, 2), &mut buf.data, Some(resample_alg))
.unwrap();
assert_eq!(buf.data, vec!(8, 6, 8, 12));
assert_eq!(buf.data, vec!(8, 7, 8, 11));
}

#[test]
Expand Down Expand Up @@ -218,7 +217,7 @@ fn test_create_with_band_type_with_options() {
#[test]
fn test_create_copy() {
let driver = DriverManager::get_driver_by_name("MEM").unwrap();
let dataset = Dataset::open(fixture("tinymarble.png")).unwrap();
let dataset = Dataset::open(fixture("tinymarble.tif")).unwrap();
let copy = dataset.create_copy(&driver, "", &[]).unwrap();
assert_eq!(copy.raster_size(), (100, 50));
assert_eq!(copy.raster_count(), 3);
Expand Down Expand Up @@ -287,7 +286,7 @@ fn test_get_driver_by_name() {

#[test]
fn test_read_raster_as() {
let dataset = Dataset::open(fixture("tinymarble.png")).unwrap();
let dataset = Dataset::open(fixture("tinymarble.tif")).unwrap();
let rb = dataset.rasterband(1).unwrap();
let rv = rb.read_as::<u8>((20, 30), (2, 3), (2, 3), None).unwrap();
assert_eq!(rv.data, vec!(7, 7, 7, 10, 8, 12));
Expand All @@ -298,7 +297,7 @@ fn test_read_raster_as() {

#[test]
fn mask_flags() {
let dataset = Dataset::open(fixture("tinymarble.png")).unwrap();
let dataset = Dataset::open(fixture("tinymarble.tif")).unwrap();
let rb = dataset.rasterband(1).unwrap();
let mask_flags = rb.mask_flags().unwrap();
assert!(!mask_flags.is_nodata());
Expand All @@ -309,7 +308,7 @@ fn mask_flags() {

#[test]
fn open_mask_band() {
let dataset = Dataset::open(fixture("tinymarble.png")).unwrap();
let dataset = Dataset::open(fixture("tinymarble.tif")).unwrap();
let rb = dataset.rasterband(1).unwrap();
let mb = rb.open_mask_band().unwrap();
let mask_values = mb.read_as::<u8>((20, 30), (2, 3), (2, 3), None).unwrap();
Expand All @@ -335,7 +334,7 @@ fn test_read_raster_as_array() {
let (left, top) = (19, 5);
let (window_size_x, window_size_y) = (3, 4);
let (array_size_x, array_size_y) = (3, 4);
let dataset = Dataset::open(fixture("tinymarble.png")).unwrap();
let dataset = Dataset::open(fixture("tinymarble.tif")).unwrap();
let rb = dataset.rasterband(band_index).unwrap();
let values = rb
.read_as_array::<u8>(
Expand All @@ -362,7 +361,7 @@ fn test_read_raster_as_array() {
fn test_read_block_as_array() {
let band_index = 1;
let block_index = (0, 0);
let dataset = Dataset::open(fixture("tinymarble.png")).unwrap();
let dataset = Dataset::open(fixture("tinymarble.tif")).unwrap();
let rasterband = dataset.rasterband(band_index).unwrap();
let result = rasterband.read_block::<u8>(block_index);
assert!(result.is_ok());
Expand All @@ -373,21 +372,18 @@ fn test_read_block_as_array() {
fn test_read_block_dimension() {
let band_index = 1;
let block = (0, 0);
let dataset = Dataset::open(fixture("tinymarble.png")).unwrap();
let dataset = Dataset::open(fixture("tinymarble.tif")).unwrap();
let rasterband = dataset.rasterband(band_index).unwrap();
let array = rasterband.read_block::<u8>(block).unwrap();
#[cfg(any(all(major_is_3, minor_ge_7), major_ge_4))]
assert_eq!(array.dim(), (50, 100));
#[cfg(not(any(all(major_is_3, minor_ge_7), major_ge_4)))]
assert_eq!(array.dim(), (1, 100));
assert_eq!(array.dim(), (27, 100));
}

#[test]
#[cfg(feature = "ndarray")]
fn test_read_block_data() {
let band_index = 1;
let block = (0, 0);
let dataset = Dataset::open(fixture("tinymarble.png")).unwrap();
let dataset = Dataset::open(fixture("tinymarble.tif")).unwrap();
let rasterband = dataset.rasterband(band_index).unwrap();
let array = rasterband.read_block::<u8>(block).unwrap();
assert_eq!(array[[0, 0]], 0);
Expand Down Expand Up @@ -416,7 +412,7 @@ fn test_get_rasterband() {

#[test]
fn test_get_no_data_value() {
let dataset = Dataset::open(fixture("tinymarble.png")).unwrap();
let dataset = Dataset::open(fixture("tinymarble.tif")).unwrap();
let rasterband = dataset.rasterband(1).unwrap();
let no_data_value = rasterband.no_data_value();
assert!(no_data_value.is_none());
Expand Down Expand Up @@ -458,68 +454,47 @@ fn test_get_offset() {

#[test]
fn test_get_default_scale() {
let dataset = Dataset::open(fixture("tinymarble.png")).unwrap();
let dataset = Dataset::open(fixture("tinymarble.tif")).unwrap();
let rasterband = dataset.rasterband(1).unwrap();
let scale = rasterband.scale();

if cfg!(all(major_ge_3, minor_ge_1)) {
// This behavior changed in 3.1.0
// Since the default value is indistinguishable from "not set", None is returned. Unclear
// if this is a bug or intended behavior, but tracked at:
// https://github.com/OSGeo/gdal/issues/2579
assert_eq!(scale, None);
} else {
// on gdal 2.x and gdal 3.0
assert_eq!(scale, Some(1.0));
}
// This is either `None` or `Some(1.0)`, see https://github.com/OSGeo/gdal/issues/2579
assert_eq!(scale.unwrap_or(1.0), 1.0);
}

#[test]
fn test_get_default_offset() {
let dataset = Dataset::open(fixture("tinymarble.png")).unwrap();
let dataset = Dataset::open(fixture("tinymarble.tif")).unwrap();
let rasterband = dataset.rasterband(1).unwrap();
let offset = rasterband.offset();
if cfg!(all(major_ge_3, minor_ge_1)) {
// This behavior changed in 3.1.0
// Since the default value is indistinguishable from "not set", None is returned. Unclear
// if this is a bug or intended behavior, but tracked at:
// https://github.com/OSGeo/gdal/issues/2579
assert_eq!(offset, None);
} else {
// on gdal 2.x and gdal 3.0
assert_eq!(offset, Some(0.0));
}

// This is either `None` or `Some(0.0)`, see https://github.com/OSGeo/gdal/issues/2579
assert_eq!(offset.unwrap_or(0.0), 0.0);
}

#[test]
fn test_get_rasterband_size() {
let dataset = Dataset::open(fixture("tinymarble.png")).unwrap();
let dataset = Dataset::open(fixture("tinymarble.tif")).unwrap();
let rasterband = dataset.rasterband(1).unwrap();
let size = rasterband.size();
assert_eq!(size, (100, 50));
}

#[test]
fn test_get_rasterband_block_size() {
let dataset = Dataset::open(fixture("tinymarble.png")).unwrap();
let dataset = Dataset::open(fixture("tinymarble.tif")).unwrap();
let rasterband = dataset.rasterband(1).unwrap();
let size = rasterband.block_size();
#[cfg(any(all(major_ge_3, minor_ge_7), major_ge_4))]
assert_eq!(size, (100, 50));
#[cfg(not(any(all(major_is_3, minor_ge_7), major_ge_4)))]
assert_eq!(size, (100, 1));
assert_eq!(size, (100, 27));
}

#[test]
#[cfg(any(all(major_ge_2, minor_ge_2), major_ge_3))] // GDAL 2.2 .. 2.x or >= 3
fn test_get_rasterband_actual_block_size() {
let dataset = Dataset::open(fixture("tinymarble.png")).unwrap();
let dataset = Dataset::open(fixture("tinymarble.tif")).unwrap();
let rasterband = dataset.rasterband(1).unwrap();
let size = rasterband.actual_block_size(0, 0).unwrap();
#[cfg(any(all(major_ge_3, minor_ge_7), major_ge_4))]
assert_eq!(size, (100, 50));
#[cfg(not(any(all(major_is_3, minor_ge_7), major_ge_4)))]
assert_eq!(size, (100, 1));
assert_eq!(size, (100, 27));
}

#[test]
Expand Down Expand Up @@ -563,7 +538,7 @@ fn test_rasterband_lifetime() {

#[test]
fn test_get_rasterband_color_interp() {
let dataset = Dataset::open(fixture("tinymarble.png")).unwrap();
let dataset = Dataset::open(fixture("tinymarble.tif")).unwrap();
let rasterband = dataset.rasterband(1).unwrap();
let band_interp = rasterband.color_interpretation();
assert_eq!(band_interp, ColorInterpretation::RedBand);
Expand Down Expand Up @@ -759,17 +734,17 @@ fn test_raster_stats() {
assert_eq!(
rb.get_statistics(true, false).unwrap().unwrap(),
StatisticsAll {
min: 12.0,
min: 0.0,
max: 255.0,
mean: 89.2526,
std_dev: 90.99835379412092,
mean: 68.4716,
std_dev: 83.68444773934999,
}
);

assert_eq!(
rb.compute_raster_min_max(true).unwrap(),
StatisticsMinMax {
min: 12.0,
min: 0.0,
max: 255.0,
}
);
Expand Down

0 comments on commit 84a33d7

Please sign in to comment.