H3 Index Representations
---
Introduction
---
The **H3** system assigns a unique hierarchical index to each cell. The **H3** index of a resolution *r* cell begins with the appropriate resolution 0 base cell number. This is followed by a sequence of *r* digits 0-6, where each *i*th digit *d*i specifies one of the 7 cells centered on the cell indicated by the coarser resolution digits *d*1 through *d*i-1. A local hexagon coordinate system is assigned to each of the resolution 0 base cells and is used to orient all hierarchical indexing child cells of that base cell. The assignment of digits 0-6 at each resolution uses a *Central Place Indexing* arrangement (see [Sahr, 2014](http://webpages.sou.edu/~sahrk/sqspc/pubs/autocarto14.pdf)). In the case of the 12 pentagonal cells the indexing hierarchy produced by sub-digit 1 is removed at all resolutions.
Child hexagons are linearly smaller than their parent hexagons.
H3Index Representation
---
The **H3Index** is the integer representation of an **H3** index, which can be placed into multiple modes to indicate the kind of concept being indexed. Mode 1 is an **H3** Cell (Hexagon) Index, mode 2 is an **H3** Unidirectional Edge (Hexagon A -> Hexagon B) Index, mode 3 is planned to be a bidirectional edge (Hexagon A <-> Hexagon B). Mode 0 is reserved and indicates an invalid **H3** index.
The components of the **H3** cell index (mode 1) are packed into the lowest order 63 bits of a 64-bit integer in order as follows:
* 4 bits to indicate the index mode,
* 3 bits reserved,
* 4 bits to indicate the cell resolution 0-15,
* 7 bits to indicate the base cell 0-121, and
* 3 bits to indicate each subsequent digit 0-6 from resolution 1 up to the resolution of the cell (45 bits total is reserved for resolutions 1-15)
The components of the **H3** unidirectional edge index (mode 2) are packed into the lowest order 63 bits of a 64-bit integer in order as follows:
* 4 bits to indicate the index mode,
* 3 bits to indicate the edge 1-6 of the cell to traverse,
* 4 bits to indicate the cell resolution 0-15,
* 7 bits to indicate the base cell 0-121, and
* 3 bits to indicate each subsequent digit 0-6 from resolution 1 up to the resolution of the cell (45 bits total is reserved for resolutions 1-15)
The canonical string representation of an **H3Index** is the hexadecimal representation of the integer.
The three bits for each unused digit are set to 7.
Bit layout of H3Index
---
The layout of an **H3Index** is shown below in table form. The interpretation of the "Reserved/edge" 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 |
|
Mode |
Reserved/edge |
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 |