geotiff 0.1.0

A GeoTIFF library for Rust
Documentation
use common::read_geotiff;
use geo_types::{Coord, Rect};
use geotiff::{GeoKeyDirectory, RasterType};

mod common;

#[test]
fn test_load_marbles() {
    let geotiff = read_geotiff("resources/marbles.tif");

    println!("{geotiff:?}");
    assert_eq!(geotiff.raster_width, 1419);
    assert_eq!(geotiff.raster_height, 1001);
    assert_eq!(geotiff.num_samples, 3);
    assert_eq!(
        geotiff.model_extent(),
        Rect::new(
            Coord { x: 0.0, y: 0.0 },
            Coord {
                x: 1419.0,
                y: 1001.0
            }
        )
    );
    assert_eq!(
        geotiff.get_value_at::<u8>(&Coord { x: 761.0, y: 599.0 }, 0),
        Some(147)
    );
    assert_eq!(
        geotiff.get_value_at::<u8>(&Coord { x: 761.0, y: 599.0 }, 1),
        Some(128)
    );
    assert_eq!(
        geotiff.get_value_at::<u8>(&Coord { x: 761.0, y: 599.0 }, 2),
        Some(165)
    );
}

#[test]
fn test_load_zh_dem_25() {
    let geotiff = read_geotiff("resources/zh_dem_25.tif");

    println!("{geotiff:?}");
    assert_eq!(geotiff.raster_width, 399);
    assert_eq!(geotiff.raster_height, 366);
    assert_eq!(geotiff.num_samples, 1);
    assert_eq!(
        geotiff.model_extent(),
        Rect::new(
            Coord {
                x: 677562.5,
                y: 243862.5
            },
            Coord {
                x: 687537.5,
                y: 253012.5
            }
        )
    );
    assert_eq!(
        geotiff.get_value_at::<i16>(
            &Coord {
                x: 677575.0,
                y: 253000.0
            },
            0
        ),
        Some(551)
    );
    assert_eq!(
        geotiff.get_value_at::<i16>(
            &Coord {
                x: 679250.0,
                y: 251875.0
            },
            0
        ),
        Some(530)
    );
    assert_eq!(
        geotiff.get_value_at::<i16>(
            &Coord {
                x: 685700.0,
                y: 249450.0
            },
            0
        ),
        Some(587)
    );

    assert_eq!(
        geotiff.geo_key_directory,
        GeoKeyDirectory {
            ..Default::default()
        }
    );
}

#[test]
fn test_load_merc() {
    let geotiff = read_geotiff("resources/merc.tif");

    println!("{geotiff:?}");
    assert_eq!(geotiff.raster_width, 200);
    assert_eq!(geotiff.raster_height, 200);
    assert_eq!(geotiff.num_samples, 1);

    assert_eq!(
        geotiff.geo_key_directory,
        GeoKeyDirectory {
            key_directory_version: 1,
            key_revision: 1,
            minor_revision: 2,
            model_type: Some(1),
            raster_type: Some(RasterType::RasterPixelIsArea),
            geog_geodetic_datum: Some(6267),
            geog_ellipsoid: Some(7008),
            projected_type: Some(32767),
            proj_citation: Some("Mercator North American 1927".into()),
            projection: Some(32767),
            proj_coord_trans: Some(7),
            proj_linear_units: Some(9001),
            proj_nat_origin_long: Some(-90.0),
            proj_nat_origin_lat: Some(30.0),
            proj_false_easting: Some(0.001),
            proj_false_northing: Some(0.002),
            proj_center_lat: Some(34.0),
            proj_scale_at_nat_origin: Some(0.829916312080482),
            ..Default::default()
        }
    );

    assert_eq!(
        geotiff.model_extent(),
        Rect::new(
            Coord {
                x: 1871032.9538880002,
                y: 662408.6726400064
            },
            Coord {
                x: 1901982.949391994,
                y: 693358.6681440001
            }
        )
    );
}