Skip to content

Latest commit

 

History

History
453 lines (308 loc) · 14.4 KB

CHANGES.md

File metadata and controls

453 lines (308 loc) · 14.4 KB

Changes

Unreleased

  • Added new content to README.md and the root docs.

  • Fixed a crash in Group::dimensions and MDArray::dimensions when no dimensions exist

0.13

  • Add prebuild bindings for GDAL 3.5

  • Breaking: Add gdal::vector::OwnedLayer, gdal::vector::LayerAccess and gdal::vector::layer::OwnedFeatureIterator. This requires importing gdal::vector::LayerAccess for using most vector layer methods.

  • Breaking: SpatialRef::from_c_obj is now unsafe.

  • Breaking: Rename Driver::get to Driver::get_by_name, add Driver::get(usize) and Driver::count

  • Implemented wrapper for OGR_L_SetFeature

  • Add programs::raster::build_vrt

  • Add GeoTransformEx extension trait with apply and invert

  • Add gdal::vector::geometry_type_to_name and gdal::vector::field_type_to_name

  • Add gdal::raster::rasterband::RasterBand::unit as wrapper for GDALGetRasterUnitType

  • Add gdal::vsi::read_dir function.

  • Add a ColorTable struct and RasterBand::color_table method

  • Add GeometryRef<'a> to reference owned nested geometry in a lifetime-safe way.

  • Add support for MDArray API

  • Add gdal::srs::CoordTransform::transform_bounds as wrapper for OCTTransformBounds for GDAL 3.4

  • Add Feature::set_field_*_list functions for list field types

  • Deprecate Transaction::dataset and Transaction::dataset_mut. Add Deref and DerefMut implementations instead.

  • Add methods to access raster masks and get raster mask flags. (open_mask_band, create_mask_band, and mask_flags).

  • Remove PartialEq from GdalError

  • Prevent SIGGEGV when reading a string array on an MD Array that is not of type string.

  • Add Rasterband::set_scale and Rasterband::set_offset methods

  • Added program wrapper for GDALMultiDimTranslate

  • Test that GdalError is Send

  • Allow reading Dimensions from Groups in multimensional Datasets.

  • Added wrapper methods for GDALGetRasterStatistics, GDALComputeRasterMinMax and GDALMDArrayGetStatistics.

  • Added a workaround in multi-dim tests to not access files multiple times

0.12

  • Bump Rust edition to 2021

  • Add prebuild bindings for GDAL 3.4

0.11

0.8 - 0.10

  • Update types to fix build on ppc64le.

  • Upgrade semver to 1.0 and trim gdal version output in build.rs.

  • Breaking: Make set_attribute_filter and clear_attribute_filter take &mut self

  • Breaking: Drop pre-build bindings for GDAL versions < 2.4. The bindgen feature can be used to generate bindings for older versions.

  • Fix memory leaks reported by Valgrind. This required re-generation of the pre-build bindings.

  • Breaking: Implement TryFrom instead of From to convert from gdal geometries to geo-types. This avoids a possible panic on unsupported geometries and returns an error instead.

  • Add Feature::c_feature that returns the OGR feature handle.

  • Add wrapper for OGR_G_Buffer.

  • Add support for raster dataset creation options. A new struct (RasterCreationOption) and function (driver.create_with_band_type_with_options()) are now available for this.

let driver = Driver::get_by_name("GTiff").unwrap();
let options = &[
    RasterCreationOption {
        key: "COMPRESS",
        value: "LZW",
    },
    RasterCreationOption {
        key: "TILED",
        value: "YES",
    },
];
let mut dataset = driver
    .create_with_band_type_with_options::<u8>("testing.tif", 2048, 2048, 1, options)
    .unwrap();
  • Breaking: Add support to select a resampling algorithm when reading a raster

    Now, it is necessary to provide a Option<ResampleAlg> when reading a raster. If None, it uses ResampleAlg::NearestNeighbour which was the default behavior.

  • Breaking: Make Layer::features iterator reset to beginning, and borrow mutably.

  • Breaking: Enforce borrow semantics on methods of Dataset, RasterBand, and Layer.

    1. Methods that do not modify the underlying structure take &self.
    2. Methods that modify the underlying structure take &mut self.
    let ds = Dataset::open(...);
    
    // ds need not be mutable to open layer
    let mut band = ds.rasterband(1)?;
    
    // band needs to be mutable to set no-data value
    band.set_no_data_value(0.0)?;
  • Breaking: Upgrade to ndarray 0.15

  • Implement wrapper for OGR_L_TestCapability

  • Breaking: Use DatasetOptions to pass as Dataset::open_ex parameters and add support for extended open flags.

        use gdal::{ Dataset, DatasetOptions }
    
        let dataset = Dataset::open_ex(
            "roads.geojson",
            DatasetOptions {
                open_flags: GdalOpenFlags::GDAL_OF_UPDATE|GdalOpenFlags::GDAL_OF_VECTOR,
                ..DatasetOptions::default()
            }
        )
        .unwrap();

    GDALAccess values are supported using [From] implementation

        Dataset::open_ex(
            "roads.geojson",
            DatasetOptions {
                open_flags: GDALAccess::GA_Update.into(),
                ..DatasetOptions::default()
            },
        )
        .unwrap();
  • Add more functions to SpatialRef implementation

  • Breaking: Change Feature::field return type from Result<FieldValue> to Result<Option<FieldValue>>. Fields can be null. Before this change, if a field was null, the value returned was the default value for the underlying type. However, this made it impossible to distinguish between null fields and legitimate values which happen to be default value, for example, an Integer field that is absent (null) from a 0, which can be a valid value. After this change, if a field is null, None is returned, rather than the default value.

    If you happened to rely on this behavior, you can fix your code by explicitly choosing a default value when the field is null. For example, if you had this before:

    let str_var = feature.field("string_field")?
        .into_string()
        .unwrap();

    You could maintain the old behavior with:

    use gdal::vector::FieldValue;
    
    let str_var = feature.field("string_field")?
        .unwrap_or(FieldValue::StringValue("".into()))
        .into_string()
        .unwrap();
  • Fixed potential race condition wrt. GDAL driver initialization

  • Add basic support to read overviews

  • Added a Dataset::build_overviews method

  • BREAKING: update geo-types to 0.7.0. geo-types Coordinate now implement Debug

  • Deprecated SpatialRef::get_axis_mapping_strategy - migrate to SpatialRef::axis_mapping_strategy instead.

  • Add support for reading and setting rasterband colour interpretations

  • Add Geometry::from_wkb and Geometry::wkb functions to convert from/to Well-Known Binary

  • Fixed memory leak in Geometry::from_wkt

  • Breaking: Changed Dataset::create_layer to take a new LayerOptions struct instead of separate arguments.

    Before:

    ds.create_layer("roads", None, wkbLineString)

    After (all fields have usable default values):

    use gdal::LayerOptions;
    ds.create_layer(LayerOptions {
      name: "roads",
      ty: wkbLineString,
      ..Default::default()
    });

    This change also removed Dataset::create_layer_blank(). Use Dataset::create_layer(Default::default()) instead.

  • Wrapper functions for OGR_F_GetFieldAs… methods

  • Wrapper functions for OGR_L_SetAttributeFilter and OGR_L_SetSpatialFilterRect

  • Wrappers for CPLSetThreadLocalConfigOption and CPLGetThreadLocalConfigOption

  • Wrappers for VSIFileFromMemBuffer, VSIUnlink and VSIGetMemFileBuffer

  • Add set_description to the Metadata trait

  • Wrappers for GDALRasterizeGeometries provided in a new rasters::rasterize function

  • Added set_error_handler and remove_error_handler to the config module that wraps CPLSetErrorHandlerEx

  • Breaking: Changed Dataset::create_copy to take a slice of RasterCreationOptions which was previously not included.

    Before:

    dataset.create_copy(&driver, "output_file");

    After:

    dataset.create_copy(&driver, "output_file", &[]);

0.7.1

0.6.0 - 0.7.0

0.5.0

0.4.0

0.3.0

0.2.1