# Change Log All notable changes to this project will be documented in this file. This project adheres to [Semantic Versioning](http://semver.org/). The public API of this library consists of the functions declared in file [h3api.h.in](./src/h3lib/include/h3api.h.in). ## [Unreleased] ## [4.1.0] - 2023-01-18 ### Added - Functions for `cellToChildPos` and `childPosToCell` (#719) ### Fixed - Fixed possible signed integer overflow in `h3NeighborRotations` (#707) - Fixed possible signed integer overflow in `localIjToCell` (#706, #735) ### Changed - `assert` on defensive code blocks that are not already covered. (#720) - `clang-format` upgraded to version 11. (#734) ## [4.0.1] - 2022-09-15 ### Fixed - Changing an internal `float` to `double` improves the precision of geographic coordinate output (#652) - Fixed compacting all children of a resolution 0 cell (#679) - Fixed possible signed integer overflow in `maxGridDiskSize` (#686) - Fixed possible use of uninitialized values in `cellToVertex` (#683, #690) - Fixed possible out of bounds read in `localIjToCell` (#684) - Fixed possible memory leak in `compactCells` (#685) - Fixed possible out of bounds read in `areNeighborCells` (#677) - Fixed possible memory leak in `cellsToLinkedMultiPolygon` (#673) ### Changed - Build script does not use toolchain file (#641) - Removed a duplicated include preprocessor directive (#682) - Improvements to the fuzzer suite and their automatic runs in CI (#671, #674, #687) - Increased test coverage (#642) - Added a fuzzer targetting internal `algos.c` functions (#675) ## [4.0.0] - 2022-08-23 ### Breaking changes - Rename functions according to the terminology RFC (#622, #586, #571, #403, #466, #495, #466) - Functions that can experience errors now have an `H3Error` return value. (#617, #586, #581, #551, #550, #509, #505, #507, #508, #503, #478, #468, #436, #359) - Cell count parameters use `int64_t` instead of `int`. - `polygonToCells` (previously `polyfill`) accepts a flags argument for future expansion. (#570) - `cellToLocalIj` and `localIjToCell` accept a mode argument for future expansion. (#586) - `exactEdgeLength` functions renamed to `edgeLength` (#639) ### Fixed - Fix polyfill bug when vertex latitude exactly matches cell center. (#603) - A number of issues detected via unit tests and fuzzers were fixed. (#568, #562, #558, #559, #560, #430) - `polygonToCells` returns an error if Infinity is passed in. (#636) ### Changed - The file `CMakeTests.cmake` is no longer included if `ENABLE_TESTING` is off. (#609) ### Added - Vertex mode and associated functions: (#422, #420, #417) - `cellToVertex(cell, vertexNum)` - `cellToVertexes(cell, out)` - `vertexToLatLng(vertex, out)` - `isValidVertex(vertex)` - `h3` CLI application. (#556, #497) ### Other changes - Generally use `lng` instead of `lon` - Closed-form implementation of `numHexagons` - A number of fuzzer harnesses are now included in the H3 core library. (#557, #553, #545, #433) - Additional benchmarks are added and benchmarks are regularly run in CI. (#524, #518) ## [4.0.0-rc5] - 2022-08-16 ### Breaking changes - `exactEdgeLength` functions renamed to `edgeLength` (#639) ### Fixed - `polygonToCells` returns an error if Infinity is passed in. (#636) ## [4.0.0-rc4] - 2022-07-25 ### Breaking changes - `distance*` functions (`distanceKm`, etc) renamed to `greatCircleDistance*`. (#622) - Error code `E_MEMORY` renamed to `E_MEMORY_ALLOC`. (#617) ## [4.0.0-rc3] - 2022-06-03 ### Fixed - Fix polyfill bug when vertex latitude exactly matches cell center. (#603) ### Changed - The file `CMakeTests.cmake` is no longer included if `ENABLE_TESTING` is off. (#609) ## [4.0.0-rc2] - 2022-03-16 ### Breaking changes - `experimentalH3ToLocalIj` and `experimentalLocalIjToH3` renamed to `cellToLocalIj` and `localIjToCell` respectively. (#586) - `cellToLocalIj` and `localIjToCell` accept a mode argument for future expansion. (#586) - `cellToCenterChild` (previously `h3ToCenterChild`) returns an error code. (#581) ### Added - `E_OPTION_INVALID` error code added. (#586) ## [4.0.0-rc1] - 2022-02-07 ### Breaking changes - Rename functions according to the terminology RFC (#571, #403, #466, #495, #466) - Functions that can experience errors now have an `H3Error` return value. (#551, #550, #509, #505, #507, #508, #503, #478, #468, #436, #359) - Cell count parameters use `int64_t` instead of `int`. - `polygonToCells` (previously `polyfill`) accepts a flags argument for future expansion. (#570) ### Added - Vertex mode and associated functions: (#422, #420, #417) - `cellToVertex(cell, vertexNum)` - `cellToVertexes(cell, out)` - `vertexToLatLng(vertex, out)` - `isValidVertex(vertex)` - `h3` CLI application. (#556, #497) ### Fixed - A number of issues detected via unit tests and fuzzers were fixed. (#568, #562, #558, #559, #560, #430) ### Other changes - Generally use `lng` instead of `lon` - Closed-form implementation of `numHexagons` - A number of fuzzer harnesses are now included in the H3 core library. (#557, #553, #545, #433) - Additional benchmarks are added and benchmarks are regularly run in CI. (#524, #518) ## [3.7.2] - 2021-07-15 ### Fixed - `gridDisk` of invalid indexes should not crash. (#498) ## [3.7.1] - 2020-10-05 ### Fixed - Finding invalid edge boundaries should not crash. (#399) - Build fixes for FreeBSD. (#397) ## [3.7.0] - 2020-09-28 ### Added - Area and haversine distance functions (#377): - `cellAreaRads2` - `cellAreaKm2` - `cellAreaM2` - `pointDistRads` - `pointDistKm` - `pointDistM` - `exactEdgeLengthRads` - `exactEdgeLengthKm` - `exactEdgeLengthM` - Refactor `getH3UnidirectionalEdgeBoundary` for accuracy at small resolutions. (#391) - Speeds up `getH3UnidirectionalEdgeBoundary` by about 3x. - Implement core logic for future vertex mode. ### Fixed - Fixed building the library with custom memory allocation functions on Mac OSX. (#362) - The installed H3 CMake target should have include directories specified. (#381) ### Changed - Tests now use `bash` on Windows. (#381) ## [3.6.4] - 2020-06-19 ### Added - `H3_MEMORY_PREFIX` CMake option for replacing the memory management functions used in H3. (#317) - Support for building Debian packages of H3. (#352) ### Fixed - Removed duplicate include statements. (#333) - Fixed macro `H3_DIGIT_MASK_NEGATIVE`. (#329) ## Changed - Again implement new `polyfill` algorithm. (#313) ## [3.6.3] - 2020-01-21 ### Fixed - `compact` detects and fails on cases with duplicated input indexes. (#299) ### Changed - `h3IsValid` returns false for indexes that have non-zero reserved bits. (#300) - `h3IsValid` and `h3UnidirectionalEdgeIsValid` return false for indexes with the high bit set. (#300) ## [3.6.2] - 2019-12-9 - Revert new `polyfill` algorithm until reported issues are fixed. (#293) ## [3.6.1] - 2019-11-11 ### Fixed - `compact` handles zero length input correctly. (#278) - `bboxHexRadius` scaling factor adjusted to guarantee containment for `polyfill`. (#279) - `polyfill` new algorithm for up to 3x perf boost. (#282) - Fix CMake targets for KML generation. (#285) ## [3.6.0] - 2019-08-12 ### Added - `h3ToCenterChild` function to find center child at given resolution (#267) - `getPentagonIndexes` (and `pentagonIndexCount`) function to find pentagons at given resolution (#267) ### Fixed - Fix bounds check for local IJ coordinates (#271) ## [3.5.0] - 2019-07-22 ### Added - CMake options for excluding filter applications or benchmarks from the build. (#247) - `h3GetFaces` function to find icosahedron faces for an index, and helper function `maxFaceCount` (#253) ### Changed - Argument parsing for all filter applications is more flexible. (#238) ### Fixed - Fix printing program name in `h3ToHier` error messages. (#254) ## [3.4.4] - 2019-05-30 ### Changed - Local coordinate spaces cannot cross more than one icosahedron edge. (#234) - All dynamic internal memory allocations happen on the heap instead of the stack. (#235) - Argument parsing for `h3ToGeo`, `geoToH3`, and `h3ToGeoBoundary` is more flexible. (#227) ## [3.4.3] - 2019-05-02 ### Added - `localIjToH3` filter application (#222) - An option to print distances in the `kRing` filter application (#222) ### Changed - Arguments parsing for `kRing` filter application is more flexible. (#224) ### Fixed - `benchmarkPolyfill` allocates its memory on the heap (#198) - Fixed constraints of vertex longitudes (#213) - Zero only input to `uncompact` does not produce an error (#223) ## [3.4.2] - 2019-02-21 ### Changed - `binding-functions` build target generates an ASCII file on Windows (#193) ## [3.4.1] - 2019-02-15 ### Fixed - `binding-functions` build target fixed when running the build out of source (#188) ## [3.4.0] - 2019-01-23 ### Added - `getRes0Indexes` function for getting all base cells, and helper function `res0IndexCount` (#174) - Include defined constants for current library version (#173) ## [3.3.0] - 2018-12-25 ### Added - `h3Line` and `h3LineSize` functions for getting the line of indexes between some start and end (inclusive) (#165) ### Changed - Indexes in deleted pentagon subsequences are not considered valid. ## [3.2.0] - 2018-10-04 ### Added - `experimentalH3ToLocalIj` function for getting local coordinates for an index. (#102) - `experimentalLocalIjToH3` function for getting an index from local coordinates. (#102) - Benchmarks for the kRing method for k's of size 10, 20, 30, and 40. (#142, #144) ### Changed - Internal `h3ToIjk` function renamed to `h3ToLocalIjk`. (#102) - `h3ToIjk` filter application replaced with `h3ToLocalIj`. (#102) ### Fixed - Added `#include ` to `benchmark.h` (#142) ## [3.1.1] - 2018-08-29 ### Fixed - Fixed bounding box bug for polygons crossing the antimeridian (#130) - Normalize output of h3SetToMultiPolygon to align with the GeoJSON spec, ensuring that each polygon has only one outer loop, followed by holes (#131) ### Changed - Longitude outputs are now guaranteed to be in the range [-Pi, Pi]. (#93) - Implemented closed form formula for maxKringSize. Source: https://oeis.org/A003215 (#138) - Improved test and benchmark harnesses (#126, #128) ## [3.1.0] - 2018-08-03 ### Added - `h3Distance` function for determining the grid distance between H3 indexes (#83) - Internal `h3ToIjk` function for getting IJK+ coordinates from an index (#83) - Internal `ijkDistance` function for determining the grid distance between IJK+ coordinates (#83) - `h3ToIjk` filter application for experimenting with `h3ToIjk` (#83) ### Fixed - Don't require a C++ compiler (#107) ### Changed - Most dynamic internal memory allocations happen on the heap instead of the stack (#100) ## [3.0.8] - 2018-07-18 ### Added - Added Direction enum, replacing int and defined constants (#77) ### Fixed - Ensured unused memory is cleared for pentagon children. (#84) - Fixed compiler warnings in `h3ToGeoHier` and `h3ToGeoBoundaryHier`. (#90) - Fixed a segfault in `h3SetToLinkedGeo` (#94) ### Changed - Warnings are not errors by default. (#90) ## [3.0.7] - 2018-06-08 ### Added - Generator for the faceCenterPoint table (#67) - Generator for number of indexes per resolution (#69) - Added CMake `WARNINGS_AS_ERRORS` option, default on, for Clang and GCC (#70) - Added CMake `TEST_WRAPPER` setting when `WRAP_VALGRIND` is on (#66) ### Changed - Moved Vec3d structure to `vec3d.h` (#67) - Added input validation when getting the origin or destination of an edge (#74) ## [3.0.6] - 2018-06-01 ### Changed - Changed signature of internal function h3NeighborRotations. - Do not require support for `hexRange`, `hexRanges`, or `hexRangeDistances` in the bindings. These functions may be deprecated in the public API in future releases; consumers should use `kRing` and `kRingDistances` instead. - Performance improvement in core indexing logic for `geoToH3` (thanks @wewei!) ## [3.0.5] - 2018-04-27 ### Fixed - Fixed duplicate vertex in h3ToGeoBoundary for certain class III hexagons (#46) ### Added - Release guide ## [3.0.4] - 2018-04-16 ### Added - Assertions when allocating memory on the heap. ### Changed - Most internal memory allocations happen on the stack instead of the heap. ## [3.0.3] - 2018-03-19 ### Added - CMake config installation to ease use of h3 from CMake projects. - Add CMake toolchain file to set build options upfront. - Add CMake `C_CLANG_TIDY` property to integrate clang-tidy checks during build. - YouCompleteMe completion support. ### Changed - Improved resilience to out of range inputs. - Minimum CMake version to 3.1. - Set `CMAKE_C_STANDARD` to `11` instead of using compiler flag `-std=c1x`. - Use `CMAKE_POSITION_INDEPENDENT_CODE` instead of using compiler flag `-fPIC`. - Rename library target from `h3.1` to `h3` with `SONAME` property of 1. ### Removed - CMake `H3_COMPILER` option in favor of built-in `CMAKE_C_COMPILER`. - CMake `BUILD_STATIC` option in favor of built-in `BUILD_SHARED_LIBS`. - CMake `ENABLE_TESTS` option in favor of built-in `BUILD_TESTING`. - File globbing in CMake in favor of listing source files. ## [3.0.2] - 2018-01-24 ### Removed - Removed the `H3IndexFat` internal structure. ### Changed - Simplified build process on Windows. ### Fixed - Fixed an issue where tests would fail on ARM systems. ## [3.0.1] - 2018-01-18 ### Added - Added a `make install` target. ### Changed - Improved compatability with building on Windows. - Fixed various cases where the test suite could crash or not compile. ## [3.0.0] - 2018-01-08 ### Added - First public release.