案例库 · 软件与 IT · 技术决策 · 2008–2014
Geohash 把坐标变成可排序的字符串,数据库纷纷采用
Gustavo Niemeyer 在 2008 年提出的 geohash 将经纬度打包成一个 base32 字符串;共享前缀越长表示地点越近,因此数据库可以用字符串来索引位置。
geohash.org (Gustavo Niemeyer) · Elasticsearch
解法
2008 年 2 月,Gustavo Niemeyer 推出了 geohash,并上线了 geohash.org:一个公共领域的编码系统,可以把地理位置编码成由字母和数字组成的短字符串。这个想法是让坐标变得可以写在邮件、URL 或数据库键里。
关键在于前缀的分层结构。geohash 将纬度和经度的比特位交错,并用 base32 编码;每增加一个字符就增加五位精度,同时表示前一个单元的 32 个子单元之一。通常,相邻的位置共享前缀,去掉末尾的字符会缩小范围,但编码仍然有效。
正是这个特性让它成了标准。Elasticsearch 在文档中说明,地理点可以用 geohash 表示——即经纬度比特交错后的 base32 字符串——并用它来做索引和网格聚合,这样邻近搜索就变成了对已有索引的字符串前缀搜索。
生效的原因
- 前缀长度同时表示精度和邻近程度,一个字段就能做两件事。
- 短字符串比坐标对更容易分享。
- 现有的字符串索引无需新机制就能支持地理空间查询。
- 公共领域发布扫清了许可上的障碍。
取得的成效一个字符串,其前缀即可表示邻近程度聪明
可借鉴之处
把二维问题压缩成一维键,所有现有的字符串索引就都变成了空间索引——前缀长度同时编码了精度和邻近程度,无需新机制。
后续进展
Geohash 成了表达和索引位置的标准方式:Elasticsearch 支持 geohash 地理点和 geohash 网格聚合,字符串形式让它天然适用于缓存、URL 和数据库键。如今它已成为地理空间索引的默认编码之一。
资料来源
发现哪里写错了?告诉我们。