Skip to main content
Version: 4.x

Grid traversal functions

Grid traversal allows finding cells in the vicinity of an origin cell, and determining how to traverse the grid from one cell to another.

gridDisk

H3Error gridDisk(H3Index origin, int k, H3Index* out);

gridDisk produces indices within k distance of the origin index.

gridDisk was previously named k-ring after the concept of a ring with distance k. k-ring 0 is defined as the origin index, k-ring 1 is defined as k-ring 0 and all neighboring indices, and so on.

Output is placed in the provided array in no particular order. Elements of the output array may be left as zero, which can happen when crossing a pentagon.

maxGridDiskSize

H3Error maxGridDiskSize(int k, int64_t *out);

Maximum number of indices that result from the gridDisk algorithm with the given k.

gridDiskDistances

H3Error gridDiskDistances(H3Index origin, int k, H3Index* out, int* distances);

gridDiskDistances produces indices within k distance of the origin index.

k-ring 0 is defined as the origin index, k-ring 1 is defined as k-ring 0 and all neighboring indices, and so on.

Output is placed in the provided array in no particular order. Elements of the output array may be left as zero, which can happen when crossing a pentagon.

gridDiskUnsafe

H3Error gridDiskUnsafe(H3Index origin, int k, H3Index* out);

gridDiskUnsafe produces indexes within k distance of the origin index. The function returns an error code when one of the returned by this function is a pentagon or is in the pentagon distortion area. In this case, the output behavior of the out array is undefined.

k-ring 0 is defined as the origin index, k-ring 1 is defined as k-ring 0 and all neighboring indexes, and so on.

Output is placed in the provided array in order of increasing distance from the origin. The provided array must be of size maxGridDiskSize(k).

Returns 0 (E_SUCCESS) if no pentagonal distortion is encountered.

gridDiskDistancesUnsafe

H3Error gridDiskDistancesUnsafe(H3Index origin, int k, H3Index* out, int* distances);

gridDiskDistancesUnsafe produces indexes within k distance of the origin index. Output behavior is undefined when one of the indexes returned by this function is a pentagon or is in the pentagon distortion area.

k-ring 0 is defined as the origin index, k-ring 1 is defined as k-ring 0 and all neighboring indexes, and so on.

Output is placed in the provided array in order of increasing distance from the origin. The distances in hexagons is placed in the distances array at the same offset. The provided array must be of size maxGridDiskSize(k).

Returns 0 (E_SUCCESS) if no pentagonal distortion is encountered.

gridDiskDistancesSafe

H3Error gridDiskDistancesSafe(H3Index origin, int k, H3Index* out, int* distances);

gridDiskDistancesSafe produces indexes within k distance of the origin index.

k-ring 0 is defined as the origin index, k-ring 1 is defined as k-ring 0 and all neighboring indexes, and so on.

Output is placed in the provided array in order of increasing distance from the origin. The distances in hexagons is placed in the distances array at the same offset. The provided array must be of size maxGridDiskSize(k).

Returns 0 (E_SUCCESS) on success.

gridDisksUnsafe

H3Error gridDisksUnsafe(H3Index* h3Set, int length, int k, H3Index* out);

gridDisksUnsafe takes an array of input hex IDs and a max k and returns an array of hexagon IDs sorted first by the original hex IDs and then by the grid k-ring (0 to max), with no guaranteed sorting within each grid k-ring group.

Returns 0 (E_SUCCESS) if no pentagonal distortion was encountered. Otherwise, output is undefined

gridRingUnsafe

H3Error gridRingUnsafe(H3Index origin, int k, H3Index* out);

Produces the hollow hexagonal ring centered at origin with sides of length k.

Returns 0 (E_SUCCESS) if no pentagonal distortion was encountered.

gridPathCells

H3Error gridPathCells(H3Index start, H3Index end, H3Index* out);

Given two H3 indexes, return the line of indexes between them (inclusive).

This function may fail to find the line between two indexes, for example if they are very far apart. It may also fail when finding distances for indexes on opposite sides of a pentagon.

Notes:

  • The specific output of this function should not be considered stable across library versions. The only guarantees the library provides are that the line length will be h3Distance(start, end) + 1 and that every index in the line will be a neighbor of the preceding index.

  • Lines are drawn in grid space, and may not correspond exactly to either Cartesian lines or great arcs.

gridPathCellsSize

H3Error gridPathCellsSize(H3Index start, H3Index end, int64_t* size);

Number of indexes in a line from the start index to the end index, to be used for allocating memory.

Returns 0 (E_SUCCESS) on success, or an error if the line cannot be computed.

gridDistance

H3Error gridDistance(H3Index origin, H3Index h3, int64_t *distance);

Provides the distance in grid cells between the two indexes.

Returns 0 (E_SUCCESS) on success, or an error if finding the distance failed. Finding the distance can fail because the two indexes are not comparable (different resolutions), too far apart, or are separated by pentagonal distortion. This is the same set of limitations as the local IJ coordinate space functions.

cellToLocalIj

H3Error cellToLocalIj(H3Index origin, H3Index h3, uint32_t mode, CoordIJ *out);

Produces local IJ coordinates for an H3 index anchored by an origin.

mode is reserved for future expansion and must be set to 0.

This function's output is not guaranteed to be compatible across different versions of H3.

localIjToCell

H3Error localIjToCell(H3Index origin, const CoordIJ *ij, uint32_t mode, H3Index *out);

Produces an H3 index from local IJ coordinates anchored by an origin.

mode is reserved for future expansion and must be set to 0.

This function's output is not guaranteed to be compatible across different versions of H3.