什么是 Geohash?

Geohash 是一种地理编码系统,将地理坐标(纬度和经度)编码为由字母和数字组成的短字符串。它由 Gustavo Niemeyer 于 2008 年发明,提供了一种将世界划分为网格单元的分层空间数据结构。

快速了解

全称Geohash 地理编码系统
创建时间2008 年由 Gustavo Niemeyer 发明
规范文档官方规范

工作原理

Geohash 通过交错纬度和经度的二进制表示,然后使用 Base32 编码结果来工作。Geohash 中的每个字符代表一个逐渐变小的区域,较长的字符串提供更高的精度。相邻位置通常共享相似的前缀,使 geohash 对于邻近搜索和空间索引非常有用。该系统广泛用于数据库、缓存系统和基于位置的服务,以实现高效的地理查询。

主要特点

  • 将经纬度编码为字母数字字符串(Base32)
  • 分层结构 - 字符串越长精度越高
  • 相邻位置共享公共前缀
  • 每个字符增加约 5 位精度
  • 12 字符的 geohash 精度约为 3.7 厘米
  • 公开可用的算法,无许可限制

常见用途

  1. 空间数据库索引和查询
  2. 基于位置的缓存和搜索
  3. 邻近检测和附近搜索
  4. URL 友好的位置编码
  5. 具有位置分片的分布式系统

示例

loading...
Loading code...

常见问题

Geohash 精度与字符串长度有什么关系?

Geohash 中每增加一个字符,精度大约提高 5 位。1 字符的 geohash 覆盖约 5,000 公里,4 字符约 39 公里,6 字符约 1.2 公里,8 字符约 38 米,12 字符约 3.7 厘米。根据精度需求选择长度。

为什么相邻位置有时会有完全不同的 geohash?

这是「边界问题」。位于 geohash 单元边界两侧的位置可能尽管很接近却有非常不同的前缀。这发生在单元格边缘,进行邻近搜索时需要检查相邻单元格。

Geohash 编码使用哪些字符?

Geohash 使用由 32 个字符组成的 Base32 字母表:0-9 和 b-z(不包括「a」、「i」、「l」和「o」)。这些字母被排除以避免与数字 0 和 1 混淆。字符集为:0123456789bcdefghjkmnpqrstuvwxyz。

Geohash 如何用于数据库索引?

Geohash 通过将二维坐标转换为可用标准 B 树索引进行索引的一维字符串,实现高效的空间查询。邻近搜索使用前缀匹配——同一区域内的所有位置共享相同的 geohash 前缀。

Geohash 和 H3 有什么区别?

Geohash 使用矩形单元格,而 H3 使用六边形单元格。H3 提供更均匀的邻居距离和一致的区域覆盖。Geohash 更简单且广泛支持;H3 更适合需要均匀单元格属性的分析,如网约车优化。

相关工具

相关术语

相关文章