news 2026/9/13 23:08:37

GeoHash 编码:给地球上的每一寸土地编个“身份证号”

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
GeoHash 编码:给地球上的每一寸土地编个“身份证号”

本文将带你深入了解 GeoHash 编码。

1. 为什么要发明 GeoHash?

想象一下,你和朋友在偌大的北京城约饭,你发给他一个经纬度坐标:“北纬 39.9042,东经 116.4074”。朋友可能会一脸懵:“这是哪?我要怎么找?”

在计算机的世界里,处理经纬度(两个浮点数)其实也挺麻烦的。特别是当你要问数据库:“请帮我找出离我最近的 5 家火锅店”时,数据库需要把所有火锅店的经纬度拿出来,跟你现在的坐标算距离,效率非常低。

GeoHash就是为了解决这个问题而生的。它把二维的经纬度(两个数字),变成了一个字符串(比如wx4g09)。

简单来说,GeoHash 就是把地球切成无数个小方块,然后给每个方块起个名字。

2. 核心原理:切蛋糕(二分法)

GeoHash 的核心思想非常简单,就是不断地二分

让我们把整个地球看作一张平铺的大地图。

第一刀:分左右(经度)

我们先把地图从中间竖着切一刀(本初子午线)。

  • 左边(西半球)标记为0
  • 右边(东半球)标记为1

假设你在北京(东半球),那你就在1的区域里。

第二刀:分上下(纬度)

接着,我们在刚才的半张地图上,横着切一刀(赤道)。

  • 下边(南半球)标记为0
  • 上边(北半球)标记为1

北京在北半球,所以这一步你得到了1

继续切…

现在我们锁定了地球东北角的这块区域(代码是11)。我们继续在这个区域里竖着切、横着切、竖着切、横着切……

每一次切割,我们都能得到一个0或者1
切得次数越多,区域就越小,位置就越精确。

最后,把你得到的一串1101001...这样的二进制数字,翻译成我们常见的字母和数字(Base32编码),就得到了 GeoHash 字符串,比如wx4g09

3. 举个生动的例子

假设我们要给北京天安门编码。

  1. 地球:很大。
  2. 第一次切(经度):北京在东边,取1
  3. 第二次切(纬度):北京在北边,取1
  4. 第三次切(经度):在剩下的区域里,北京偏西,取0
  5. 第四次切(纬度):在剩下的区域里,北京偏南,取0

经过几十次这样的切割,我们最终把天安门锁定在一个非常小的方块里。这个方块的名字可能就叫wx4g09j

4. GeoHash 的神奇特性

(1) 字符串越长,位置越精确

  • w:代表中国西部及周边一大片区域(几千公里)。
  • wx:代表北京及周边(几百公里)。
  • wx4:代表北京市区(几十公里)。
  • wx4g0:代表海淀区某街道(几公里)。
  • wx4g09:代表具体的一栋楼。

就像写地址一样:

  • “中国” (范围大)
  • “中国北京市” (范围小一点)
  • “中国北京市朝阳区” (范围更小)

(2) 字符串前缀相同,代表距离很近

如果两个人的 GeoHash 分别是:

  • 小明:wx4g09
  • 小红:wx4g08

你看,前 5 位wx4g0都是一样的,说明他们俩在同一个大格子里,离得非常近!
这让计算机查找“附近的人”变得超级快:只要找前缀相同的字符串就可以了,不用算复杂的距离公式。

(注:这有个小缺陷,叫边界问题,比如两个人在格子边缘,虽然物理距离近,但可能分属不同的格子,前缀完全不同。不过算法有办法解决这个问题。)

5. 总结

GeoHash 就像是把地球切成了无数个网格。

  • 它把二维的坐标变成了一维的字符串。
  • 它保留了空间邻近性(字符串相似,位置就相近)。
  • 它是“附近的人”、“外卖配送范围”背后的功臣。

下次你打开打车软件,看到周围的小车图标时,你就知道,背后可能正有一堆 GeoHash 字符串在飞速匹配呢!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/13 5:10:42

PyTorch-CUDA基础镜像评测:从安装到Jupyter Notebook实战

PyTorch-CUDA基础镜像实战:从零构建高效深度学习开发环境 在当今AI研发节奏日益加快的背景下,一个常见的场景是:算法工程师拿到新服务器后,本应立刻投入模型调优,却不得不先花上半天甚至一整天来“折腾环境”——驱动版…

作者头像 李华
网站建设 2026/9/10 4:19:07

QuickJS完全指南:从入门到精通的完整教程

QuickJS完全指南:从入门到精通的完整教程 【免费下载链接】quickjs Public repository of the QuickJS Javascript Engine. Pull requests are not accepted. Use the mailing list to submit patches. 项目地址: https://gitcode.com/gh_mirrors/qu/quickjs …

作者头像 李华
网站建设 2026/9/13 19:33:49

PyTorch 2.7 + CUDA 完美集成,这个Docker镜像让你效率翻倍

PyTorch 2.7 CUDA 完美集成,这个Docker镜像让你效率翻倍 在深度学习项目中,你是否经历过这样的场景:好不容易复现了一篇论文的代码,却因为本地环境缺少某个 CUDA 版本而卡住?或者团队新成员花了整整两天才把 PyTorch …

作者头像 李华
网站建设 2026/9/12 10:28:17

颠覆认知!开源视频修复模型如何用3项黑科技改写行业规则

颠覆认知!开源视频修复模型如何用3项黑科技改写行业规则 【免费下载链接】SeedVR-3B 项目地址: https://ai.gitcode.com/hf_mirrors/ByteDance-Seed/SeedVR-3B 技术解码:当Transformer遇见视频修复 你知道为什么传统视频修复总让人"一眼假…

作者头像 李华
网站建设 2026/8/30 11:51:44

doocs/md编辑器搜索功能完整指南:3分钟从入门到精通

doocs/md编辑器搜索功能完整指南:3分钟从入门到精通 【免费下载链接】md ✍ WeChat Markdown Editor | 一款高度简洁的微信 Markdown 编辑器:支持 Markdown 语法、自定义主题样式、内容管理、多图床、AI 助手等特性 项目地址: https://gitcode.com/doo…

作者头像 李华
网站建设 2026/9/9 8:29:21

图形化编程新纪元:从积木搭建到创意实现的终极指南

图形化编程新纪元:从积木搭建到创意实现的终极指南 【免费下载链接】blockly The web-based visual programming editor. 项目地址: https://gitcode.com/gh_mirrors/bl/blockly 在数字时代的浪潮中,编程教育正经历着一场革命性的转变。曾经令人望…

作者头像 李华