The H3 grid system became well-known as it was applied by Uber in developing its ride hailing service. Since then, the tool has been released publicly as an open source project and is widely applied. Isaac Brodsky, one of the key developers of this grid system and founder of Unfolded, discusses the use of the system and future developments in a recent GIS podcast episode. More about the H3 system, including the open source code, can be found on GitHub.
What is the H3 geospatial indexing system?
Simply stated, the H3 grid is a geospatial indexing system that is hexagonal and that can be subdivided into smaller grids. It is a multi-precision tiling of the entire world with hierarchical linear indexes to organize data. It also has a variety of analytical tools, with functions available to convert coordinates and geospatial indexing. Uber created the indexing system to not only help with its location and positioning of rides but also for handling a dynamic market, with the H3 system handling dynamic pricing and other marketplace dynamic data that deal with supply and demand. It, therefore, also integrates a variety of spatial data together. The system handles data points as discrete information with 16 resolution points with one resolution subdivided by the other. The system is often utilized in unifying analysis between different data types using the hierarchical organization and system. Data can be grouped through unique identifiers that connect different types of data within analytics applied in H3. At an operational level, H3 helps to smooth data gradients and can measure differences between cell data points.
What are the advantages and disadvantages of H3?
A hexagonal system makes it easier to navigate the Earth, giving it an advantage over other types of layouts, although some areas utilize a pentagon shape using H3. A hexagonal system is more convenient for modeling and spatial transformations, while neighbors are equal distant or uniform in this system, unlike shapes such as triangles or squares. As an example, in converting point or a polygon to the H3 system, then that data are given a resolution through the indexing operation that provides an exact resolution for the defined scale. As someone moves between resolutions then a zig-zag or jagged pattern is created to navigate the grid. Ideally, you would render a position based on your index and your original resolution. For data integration, using the hierarchical system makes it easy to integrate front-end and back-end connectivity in how data are stored, visualized, and operated on. The flexibility of the system makes it apt for handling a variety of spatial properties and types, including raster and vector data as well as GPS points, while moving between these data types in visualizing or conducting spatial operations. All data types can be treated as discrete data. Operations that require one spatial geometry can be applied with other spatial geometries, but the data can be outputted or visualized in a given geometry a user defines or requests. The variability and integration of different spatial properties helps the system to be useful in a variety of analyses, including uses in gaming, wildfire modeling, or urban analysis among many other applications. Popular games such as augmented reality Pokemon Go have even applied this approach in organizing spatial data and conducting spatial operations with different data types.
There are disadvantages to using this system, for instance in operations that attempt to determine equal area properties. The gnomonic projection used in H3 does sacrifice accuracy in calculations and location precision could be sacrificed based on varying scales in operations. The hexagonal hierarchy could be a disadvantage because as hierarchies are divided to smaller units, then there are spatial errors in dividing hexagonal shapes that are not present, for instance, in squares. Exact, error-free projection might be needed in some use cases by users, but that may not be easily possible based on hierarchical transformations.
When should we use H3?
There are different reasons to use H3. For instance, if you have a building layer, then you may want to use H3 to calculate the density of buildings in a given H3 cell using area measures within the tool. The tool would allow it also to integrate building data, surround data about the grid, and other spatial geometries within the cell could be integrated in the analysis, including individual information about buildings. In another example, a neighborhood lookup may require scanning a lot of points. Location data can be bucketed and various partitioning of a desired area can be accomplished using a surface grid or regions drawn based on human knowledge. Using H3, all cells within a defined search distance can be looked up easily and information is easily recalled from different layer of data using the unique identifiers. H3 could be used to convert polygon or point data with bindings available to different languages and databases, including tools within Python or R used. PostgreSQL and non-relational databases could be integrated, allowing users with different databases to take advantage of H3 tools. Pandas and Spark databases also work well, with H3 also scaling well to larger computational problems and scales. Tools such as polyfill can take a given input polygon that a user is interested in and then find the index H3 grid that covers it, allowing users to use the system from within a geometry rather than having to use the grid as the first instance of coverage.