finds.dev← search

// the find

uber/h3-py

★ 1,021 · Python · Apache-2.0 · updated May 2026

Python bindings for H3, a hierarchical hexagonal geospatial indexing system

Python bindings for H3, Uber's C library that maps the world to a hierarchy of hexagonal cells at 16 resolutions. You get a cell index for any lat/lng, then work with those indexes for proximity queries, aggregation, and spatial joins — without a geometry engine. The target user is anyone doing geospatial data analysis who wants fast discrete indexing without PostGIS.

The Cython layer means you're calling the C library directly — no subprocess overhead, no FFI round-trips through ctypes. Multiple API variants (basic_str, basic_int, numpy_int, memview_int) let you stay in the right dtype for your pipeline without conversion tax. 100% test coverage is enforced in CI, not just claimed. Versioning convention that locks major.minor to the C library is a thoughtful decision — you know exactly what H3 features you're getting.

Building from source requires CMake and a C toolchain; the wheels cover common platforms but if you're on something exotic you're in for a yak-shave. The library is stateless and index-oriented, so anything involving actual geometry (reprojection, intersection with arbitrary polygons) still needs Shapely or GeoPandas — h3-py doesn't replace those. The multiple API flavors are useful but the docs don't make the performance tradeoffs between them concrete, so users guess. No async support, which matters when you're doing cell lookups inside a FastAPI or async data pipeline.

View on GitHub → Homepage ↗

// want more like this?

We dig through GitHub every week and send a few repos picked for what you actually care about — each with an honest take like this one.

Get finds in your inbox → Search again →