#![allow(non_snake_case)]
use crate::{Dataset, DatasetFormat, GeoTransform, OxiGdalError, Result};
pub fn GDALAllRegister() {
}
pub fn GDALVersionInfo() -> &'static str {
crate::version()
}
pub fn GDALOpen(path: &str) -> Result<Dataset> {
Dataset::open(path)
}
pub fn GDALOpenEx(path: &str, format: DatasetFormat) -> Result<Dataset> {
if format == DatasetFormat::Unknown {
Dataset::open(path)
} else {
Dataset::open_with_format(path, format)
}
}
pub fn GDALClose(dataset: Dataset) {
drop(dataset);
}
pub fn GDALGetDatasetDriver(dataset: &Dataset) -> &'static str {
dataset.format().driver_name()
}
pub fn GDALGetRasterXSize(dataset: &Dataset) -> u32 {
dataset.width()
}
pub fn GDALGetRasterYSize(dataset: &Dataset) -> u32 {
dataset.height()
}
pub fn GDALGetRasterCount(dataset: &Dataset) -> u32 {
dataset.band_count()
}
pub fn GDALGetProjectionRef(dataset: &Dataset) -> Option<&str> {
dataset.crs()
}
pub fn GDALGetGeoTransform(dataset: &Dataset) -> Result<GeoTransform> {
dataset
.geotransform()
.copied()
.ok_or_else(|| OxiGdalError::NotSupported {
operation:
"GDALGetGeoTransform: dataset has no geo-transform (vector-only or unknown CRS)"
.to_string(),
})
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_gdal_compat_nonexistent_path_errors() {
let result = GDALOpen("/nonexistent/path/does_not_exist.tif");
assert!(
result.is_err(),
"GDALOpen on nonexistent path should return Err"
);
}
#[test]
fn test_gdal_compat_all_register_noop() {
GDALAllRegister(); }
#[test]
fn test_gdal_compat_version_info() {
let v = GDALVersionInfo();
assert!(!v.is_empty(), "version string should not be empty");
}
#[cfg(feature = "geotiff")]
#[test]
fn test_gdal_compat_open_close_tiff() {
use std::io::Write;
let dir = std::env::temp_dir();
let path = dir.join("test_gdal_compat_tiff.tif");
let mut buf: Vec<u8> = vec![0x49, 0x49, 0x2A, 0x00, 0x08, 0x00, 0x00, 0x00];
buf.extend_from_slice(&3u16.to_le_bytes()); buf.extend_from_slice(&256u16.to_le_bytes());
buf.extend_from_slice(&4u16.to_le_bytes());
buf.extend_from_slice(&1u32.to_le_bytes());
buf.extend_from_slice(&128u32.to_le_bytes());
buf.extend_from_slice(&257u16.to_le_bytes());
buf.extend_from_slice(&4u16.to_le_bytes());
buf.extend_from_slice(&1u32.to_le_bytes());
buf.extend_from_slice(&64u32.to_le_bytes());
buf.extend_from_slice(&277u16.to_le_bytes());
buf.extend_from_slice(&3u16.to_le_bytes());
buf.extend_from_slice(&1u32.to_le_bytes());
buf.extend_from_slice(&3u16.to_le_bytes());
buf.extend_from_slice(&[0x00, 0x00]);
buf.extend_from_slice(&0u32.to_le_bytes());
std::fs::File::create(&path)
.and_then(|mut f| f.write_all(&buf))
.expect("write tiff");
let ds = GDALOpen(path.to_str().expect("path")).expect("GDALOpen");
assert_eq!(GDALGetRasterXSize(&ds), 128);
assert_eq!(GDALGetRasterYSize(&ds), 64);
assert_eq!(GDALGetRasterCount(&ds), 3);
assert_eq!(GDALGetDatasetDriver(&ds), "GTiff");
GDALClose(ds); }
}