# Changelog All notable changes to this project will be documented in this file. The format is loosely based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). After version 0.12 the version numbers from the individual crates are decoupled from each other as releases are now done without github actions and without having to coordinate the release process with the `h3ronpy` python extension. ## h3ron Unreleased * Upgraded `geo` to 0.27 * Upgraded `indexmap` to 2 and `hashbrown` to 0.14 * Upgrade h3ron-h3-sys to 0.17 ## h3ron 0.17.0 - 2023-01-19 ### Added * `ToIntersectingH3Cells` trait and implementations for `Polygon` and `MultiPolygon`. ### Changed * Upgrade hashbrown to 0.13 * Upgrade h3ron-h3-sys to 0.16 ## h3ron 0.16.0 - 2022-10-25 ### Added * Add example describing how to compile to the wasm32-wasi target. * Parse `H3Cell` from different string representations using `H3Cell::from_str`. [#52](https://github.com/nmandery/h3ron/pull/52) * `ToLine` trait and implementation for `H3DirectedEdge`. * Added `h3ron::algorithm::find_cell_clusters` and `h3ron::algorithm::find_cell_clusters_eq_value`. ### Changed * Use only types from `geo-types` in the public API, not from `geo`. * Upgrade `geo` from 0.22 to 0.23. * Include pre-build bindings in `h3ron-h3-sys` to drop the `bindgen` dependency as the default. Enabling the `bindgen`-feature allows creating the bindings during build. * Upgrade `roaring` from 0.9 to 0.10. * Move `polygon_to_cells` and `max_polygon_to_cells_size` to `to_h3` module. ## h3ron 0.15.1 - 2022-08-24 * Upgraded `h3ron-h3-sys` to 0.15 to drop the `cmake` build time dependency by building `libh3` with the `cc` crate. ## h3ron 0.15.0 - 2022-08-23 This version includes the migration from H3 version 3.x to 4.x. This includes some renaming of functions and structs to stay somewhat consistent [with the changes made in H3](https://github.com/uber/h3/releases/tag/v4.0.0-rc3) as well as making most functions return `Result` as H3 now returns error codes in most functions of its API. ### Added * Added `H3Treemap::from_result_iter_with_sort` for easier construction from iterators yielding `Result` * Added `H3Cell::center_child`. * Added `IndexBlock::contains`. ### Removed * `h3ron::io` module has been relocated to `h3ron_graph:io::serde_util` as it is fairly custom and only used there. Requires the `io_serde_util` feature. ### Changed * **Migration to H3 v4.0** * Many functions are now failable and return `Result`. * Renaming of functions and structs: * `res0_index_count` -> `res0_cell_count` * `res0_indexes` -> `res0_cells` * `iter::GeoBoundaryBuilder` -> `iter::CellBoundaryBuilder` * `max_polyfill_size` -> `max_polygon_to_cells_size` * `polyfill` -> `polygon_to_cells` * `compact` -> `compact_cells` * `line_size` -> `grid_path_cells_size` * `line_between_cells` -> `grid_path_cells` * `Index` trait * moved all hierarchy traversal functions to `H3Cell` * `H3Cell` * `get_base_cell` -> `get_base_cell_number` * `area_m2` -> `area_avg_m2` * `area_km2` -> `area_avg_km2` * `unidirectional_edges` -> `directed_edges` * `is_neighbor_to` -> `are_neighbor_cells` * `hex_ring` -> `grid_ring_unsafe` * `distance_to` -> `grid_distance_to` * `exact_area_m2` -> `area_m2` * `exact_area_km2` -> `area_km2` * `exact_area_rads2` -> `area_rads2` * `hex_range_distances` -> `grid_disk_distances_unsafe` * `k_ring_distances` -> `grid_disk_distances` * The `h3ron::experimantal` module has been renamed to `h3ron::localij`. The contained functions have now been added to `H3Cell`: `H3Cell::to_localij` and `H3Cell::from_localij`. * `H3Edge` -> `H3DirectedEdge` * `edge_length_km` -> `edge_length_avg_km` * `edge_length_m` -> `edge_length_avg_m` * `cell_centroid_distance_m_at_resolution` -> `cell_centroid_distance_avg_m_at_resolution` * `destination_index` -> `destination_cell` * `origin_index` -> `origin_cell` * `cell_indexes` -> `cells` * undirectional edge -> directed edge * Adapted `Error` to the error codes now defined in H3. * Most `*_unchecked` methods are gone now as H3 returns natively error codes. * The `ExactArea` trait was removed as it was only implemented for `H3Cell`. The methods have been added the `H3Cell`. The same for `ExactLength` and `H3Edge`. * Upgrade `geo` dependency to 0.21. * Upgrade `roaring` optional dependency to 0.9. * `IndexBlock` now uses the simpler run-length encoding instead of LZ4. Compression ratio stays nearly the same. Feature-gate is removed. This change makes deserialization of previously serialized data impossible * Upgrade `ahash` dependency to 0.8. ## h3ron 0.14.0 - 2022-01-23 ### Added - Add `H3Edge::from_cells` as an alternative way to build edges to `H3Cell::unidirectional_edge_to`. - Add `h3ron::iter::continuous_cells_to_edges`. - Add `h3ron::error::InvalidGeometry` error. - Add `H3Direction::iter_directions_over_resolutions` to iterate over all directions leading to the given `Index` starting from resolution 0 to the resolution of the `Index`. - Add `h3ron::res0_index_count` and `h3ron::res0_indexes`. - Add `Index::base_cell_number`. - Add naive implementation of `h3ron::collections::IndexHierarchyMap` as an idea to maybe improve in the future. - Allow faster creation of `H3Treemap` from unsorted iterators by using `H3Treemap::from_iter_with_sort`. - Add `IndexBlock` to store `Index` vectors in compressed form. This replaces the former `CompressedIndexVec` and also provides a better compression ratio. - Add `h3ron::iter::BoundaryBuilder` and `h3ron::iter::GeoBoundaryIter`. Switching `ToPolygon` for `H3Cell` to using these. The result is 5-10% reduction in run time. - Add `h3ron::iter::change_resolution_tuple`. ### Changed - Re-export `hashbrown` from `collections`. - switch to using safe en-/decoding with lz4_flex - Pass function parameters using `Copy`-implementing types like `H3Cell` and `H3Edge` directly and not via reference. [#26](https://github.com/nmandery/h3ron/pull/26). - Remove the generic hasher parameter from `ThreadPartitionedMap`. Also make the number of partitions not CPU dependent but instead using a generic usize parameter (using const_generics). - Cleanup/rename feature gates - see main page of documentation. - Switch from using H3 `radsToDegs` and `degsToRads` to rusts `f64::to_degrees` and `f64::to_radians` as this appears slightly faster in benchmarks. - Switch to rust edition 2021 - Rename `change_cell_resolution` to `change_resolution` and make generic over all `Index + FromH3Index` types. This allows usage with `H3Cell` and `H3Edge`. ### Removed - Removal of `CompressedIndexVec` in favour of `IndexBlock`. See the above "Added" section. - Removed `ToLinestring::to_linestring_unchecked` and `ToMultiLinestring::to_multilinestring` in favour of the checked variants. - `ThreadPartitionedMap` has been removed. ## h3ron 0.13.0 - 2021-11-01 ### Added - `IndexVec` to interface between libh3 and rust. - `H3EdgesBuilder`:Creates H3Edges from cells while only requiring a single memory allocation when the struct is created. - `KRingBuilder` for repeated creation of small k-rings while avoiding allocations for each cell. - `neighbors_within_distance_window_or_default` iterator including a few simplified wrapper functions. - add `CompactedCellVec::shrink_to_fit` - added specialized collections based on `hashbrown` with `ahash` hashing. Added `ThreadPartionedMap` behind `use-rayon` feature. - `HasH3Resolution` trait - `H3Edge::cell_indexes` and `H3Edge::cell_indexes_unchecked` to get the origin and destination cell of an edge in one call. - `H3Edge::reversed` and `H3Edge::reversed_unchecked` to get the edge in the reverse direction. - `ContainsIndex` trait for collections. - `ToMultiLineString` trait for `&[H3Edge]` and `Vec`. - Implemented `Deref` for `H3Cell` and `H3Edge` [#23](https://github.com/nmandery/h3ron/pull/23). - All types implementing `Index` can have directions [#23](https://github.com/nmandery/h3ron/pull/23). - Add `H3Edge::boundary_linestring`. - Add `H3Edge::cell_centroid_distance_m` and `H3Edge::cell_centroid_distance_m_at_resolution`. ### Changed - Changed many return values from `Vec` to `IndexVec` to reduce the number of allocations by doing less moving around of `H3Index` types. - Clean up measurement functions. Create `ExactArea` and `ExactLength` traits and move the measurement functions from `H3Cell` and `H3Edge` to these traits. Remove `AreaUnits` and move average-area functions to `H3Cell`. - Fixed overflow in `H3Direction` [#23](https://github.com/nmandery/h3ron/pull/23). - Make serde support feature-gated behind `use-serde`. ## h3ron [0.12.0] - 2021-08-10 ### Added - `change_cell_resolution` iterator ### Changed - dependency updates - Using `repr(transparent)` for `H3Cell` and `H3Edge` types. - Removing `H3Index` from most of the API: - Changing all functions from `H3Index` parameters and return values to `H3Cell`/`H3Edge`. In the names of the functions the term "index" has also been replaced. - Replacing the `ToH3Indexes` trait with `ToH3Cells` - Changed `H3CompactedVec` to `CompactedCellVec` - Make `CompactedCellVec::add_cells` take a generic iterator and remove `add_indexes_from_iter`. - remove `FromIterator for CompactedCellVec` ## h3ron [0.11.0] - 2021-06-12 ### Added - `Debug` trait implementations for `H3Cell` and `H3Edge` to display the `H3Index` in hexadecimal. [#16](https://github.com/nmandery/h3ron/pull/16) - `ToLineString` trait providing `to_linestring` and `to_linestring_unchecked` methods to convert `H3Edge` to a `geo-types` `LineString`. ### Changed - Update dependencies: `geo-types` 0.6->0.7 ## h3ron [0.10.0] - 2021-04-24 ### Added - Edge indexes (named `H3Cell`) with edge length methods, validation, getting an edge between two hexagons. [#10](https://github.com/nmandery/h3ron/pull/10), [#11](https://github.com/nmandery/h3ron/pull/11) - Edges can retrieve their origin and destination hexagons. - Get a hexagons edges. - Implementation of the relative H3 direction system (see https://h3geo.org/docs/core-library/h3Indexing) . [#13](https://github.com/nmandery/h3ron/pull/13) - Implementing `Add` and `Sub` traits for `CoordIj`. [#9](https://github.com/nmandery/h3ron/issues/9) ### Changed - Changing `Index` to a trait, the former `Index` renamed to `H3Cell`. [#10](https://github.com/nmandery/h3ron/pull/10) , [#11](https://github.com/nmandery/h3ron/pull/11), [#15](https://github.com/nmandery/h3ron/pull/15) - Error handling improvements. [#10](https://github.com/nmandery/h3ron/pull/10) , [#11](https://github.com/nmandery/h3ron/pull/11) - Renaming `CoordIJ` to `CoordIj` and `Error::NoLocalIJCoordinates` to `Error::NoLocalIjCoordinates` to follow clippy suggestions. ### Removed ## h3ron [0.9.0] - 2021-04-11 ### Added - `TryFrom` implementation to convert `u64` to `Index` - Improved documentation. [#8](https://github.com/nmandery/h3ron/issues/8) , [#6](https://github.com/nmandery/h3ron/issues/6) - `ToH3`-trait to convert `geotypes` geometries to H3 `Vec` instances. ### Changed - Extending unittest for `CoordIJ` - Fixing new clippy warnings after the upgrade to rust 1.51 - Introducing more checks in the API when traversing parent indexes and creating indexes from coordinates. [#8](https://github.com/nmandery/h3ron/issues/8) - Improved index validation and error handling. ### Removed - removed `From` implementation to convert `u64` to `Index` ## Earlier versions The changes done in earlier versions where not documented in this changelog and can only be reconstructed from the commits in git. [0.12.0]: https://github.com/nmandery/h3ron/compare/v0.11.0...v0.12.0 [0.11.0]: https://github.com/nmandery/h3ron/compare/v0.10.0...v0.11.0 [0.10.0]: https://github.com/nmandery/h3ron/compare/v0.9.0...v0.10.0 [0.9.0]: https://github.com/nmandery/h3ron/compare/v0.8.1...v0.9.0