Imagine having more spatial data than you know what to do with, and yet it holds the key to improving your customer’s experience and your company’s bottom line. That’s the situation that Uber found themselves in, so they created a Hexagonal Hierarchical Spatial Indexing library (called H3) that indexes the world in 16 different levels of resolution as the foundation for solving their challenge.
Fortunately for all of us, Uber open sourced H3 and the upcoming FME 2021.0 release will provide no-code, format agnostic access to its functionality. Join us to learn theory behind H3 directly from Unfolded’s Isaac Brodsky, one of the creators of H3, and see firsthand how you might apply the upcoming FME H3 transformer to solve a variety of real-world, big-data spatial problems.
3. Years of solving data challenges
25+
10,000+
Organizations trusting us worldwide
Partners supporting our network
150+
128
Countries with FME customers
Safe Software
Company Profile
www.safe.com
25. ● Unlikely to see any changes in the index structure
● Improvements on our roadmap for the C library
API: standardized error handling, naming, etc -
mostly low level changes
● More support for indexing vertexes and cell edges
- useful for some algorithms and optimization
approaches
● More upcoming H3 talks and conferences
H3 as a library is very stable
26. ● Data analysis and optimization
○ Marketplaces, logistics, POI, traffic
○ Environment, agriculture
● Engineering
○ Spatial indexing (most uses aren’t publicly visible)
○ Augmented reality games, gamification
● Data interchange
○ Placekey (https://www.placekey.io/)
○ Data privacy
Some promising use cases
32. Connect Your Data Sources Transform Your Data Automate Your Workflows
33. FME®
Integration Platform
Connect. Transform. Automate.
FME Desktop FME Server FME Cloud
Build & Run Data Workflows Automate Data Workflows
(on-premises)
Automate Data Workflows
(hosted FME Server)
Mobile Apps
Access the Power of FME
Wherever You Are
Get a free trial of FME Desktop and FME Server at safe.com
36. FME & H3 Integration: Goals
● Provide simple no-code way to apply
H3 power
● Provide tools for turning spatial
problems into relational problems
● Optimize for high data volumes
● Provide easy way to spatially shard
data
● Make H3 easily accessible for both:
○ Visualization outputs
○ Downstream analysis
49. Apply H3 to Mobile Asset Tracking
Scenario
Discard data based on location in relation
to a geofence.
Input
Kafka messages with location data.
Output
Live map of data within geofence
boundary.
54. Special thanks to Dr. Karen Wiebe, University of Saskatchewan
Apply H3 to Snowy Owl
Migration Patterns
Step 1:
Affix a GPS transmitter to
the Snowy Owl.
55. Apply H3 to Snowy Owl Migration Patterns
Step 2: Collect the data
56. Apply H3 to Snowy Owl Migration Patterns
Step 3: Use FME to index and overlay with satellite imagery, and
produce a video...
57. Step 4: Sit back and enjoy the video
Apply H3 to Snowy Owl Migration Patterns
71. How Many Vertices Does A Hexagon Have?
● Naive answer: 6
● H3 answer: 5, 6, 7, 8, or 10!
○ H3 Indexes have “geoboundaries”
that are not necessarily hexagons
○ Non-hexagons are very rare:
■ Intentional pentagons
■ Additional distortion vertices
● See this stack exchange post and the
H3 Index Inspector for details
72. I Might Not be Contained in My Hexagon
● Cartesian containment is not the same
as spherical containment.
● H3 is a spherical framework
● See Nick Rabinowitz’s interactive post
for details
○ Point =
○ Red = Cartesian
○ Blue = Spherical
73. The Parent of My Parent Might Not be My
Grandparent
● Child hexagons are not strictly inside their
parent hexagons
● A point near the edge of a child hexagon
could be outside the parent hexagon
● Matters when comparing a point index to a
compacted fill set of indexes
○ Don’t recompute point indexes at
various levels
○ Use H3’s Parent call instead to get a
parent hexagon id for a query
● (Thanks Isaac for this explanation)
74. Compacted Filling Appears To Leave Slivers
● Artifact of child hexagons not strictly
inside their parent hexagons
● Point containment will still work if you
use same level for index as fill
○ Then use parent index calls to get
parents to compare
75. Filling Leaves Gaps Around The Edges
● Buffering can help
● H3 not a replacement for
PointOnAreaOverlayer or SpatialFilter
if exact accuracy needed