# H3 Index

## Introduction

The H3 system assigns a unique hierarchical index to each cell. Each directed edge and vertex is assigned an index based on its origin or owner cell, respectively.

## H3Index Representation

An `H3Index`

is the 64-bit integer representation of an H3 index, which may be one of multiple modes to indicate the concept being indexed.

- Mode 0 is reserved and indicates an invalid H3 index.
- Mode 1 is an
*H3 Cell*(Hexagon/Pentagon) index. - Mode 2 is an
*H3 Directed Edge*(Cell A -> Cell B) index. - Mode 3 is planned to be a bidirectional edge (Cell A <-> Cell B).
- Mode 4 is an
*H3 Vertex*(i.e. a single vertex of an H3 Cell).

The canonical string representation of an `H3Index`

is the hexadecimal representation of the integer, using lowercase letters. The string representation is variable length (no zero padding) and is not prefixed or suffixed.

### Invalid Index

Mode 0 contains a special index, `H3_NULL`

, which is unique: it is bit-equivalent to `0`

.
This index indicates, *specifically*, an invalid, missing, or uninitialized H3 index;
it is analogous to `NaN`

in floating point.
It should be used instead of an arbitrary Mode 0 index, due to its uniqueness and easy identifiability.
A mode 0 index could also indicate an error code has been provided instead of a valid H3 index.

## Bit layout of H3Index

The layout of an `H3Index`

is shown below in table form. The interpretation of the "Mode-Dependent" field differs depending on the mode of the index.

0x0F | 0x0E | 0x0D | 0x0C | 0x0B | 0x0A | 0x09 | 0x08 | 0x07 | 0x06 | 0x05 | 0x04 | 0x03 | 0x02 | 0x01 | 0x00 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|

0x30 | Reserved | Mode | Mode-Dependent | Resolution | Base cell | |||||||||||

0x20 | Base cell | Digit 1 | Digit 2 | Digit 3 | Digit 4 | Digit 5 | ||||||||||

0x10 | Digit 5 | Digit 6 | Digit 7 | Digit 8 | Digit 9 | Digit 10 | ||||||||||

0x00 | Digit 10 | Digit 11 | Digit 12 | Digit 13 | Digit 14 | Digit 15 |

## Links

- Observable notebook example: H3 Index Bit Layout