news 2026/1/21 3:51:46

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/1/17 9:48:10

CSS滚动行为:scroll-behavior与滚动捕捉的深度解析

CSS滚动行为:scroll-behavior与滚动捕捉的深度解析 在网页交互设计中,滚动行为直接影响用户体验的流畅度与视觉连贯性。CSS提供的scroll-behavior与滚动捕捉(Scroll Snapping)模块通过原生浏览器支持,无需复杂JavaScr…

作者头像 李华
网站建设 2026/1/18 21:36:50

技术架构:如何让多智能体“吵出”更优解——竞合机制的关键设计模式

在多数多智能体系统的讨论里,“协作”往往被当作默认正确的方向:让多个Agent共享信息、分解任务、互相补位,最终更快、更稳地把问题做完。这当然重要,但它也带来一个常被忽略的副作用——当Agent之间高度同质、目标一致且缺乏结构化的分歧时,系统会出现一种“温和的集体盲…

作者头像 李华
网站建设 2026/1/19 19:29:15

人证一体机,给网吧上机系统“大换血”啦!

在如今这个科技飞速发展的时代,各行各业都在积极引入新技术来提升效率与管理水平。网吧行业,这个承载着无数人青春回忆的娱乐场所,也在悄悄进行着一场技术革新。而人证一体机的出现,无疑给网吧上机系统带来了一场 “大换血”。以往…

作者头像 李华
网站建设 2026/1/16 23:43:38

PyTorch-CUDA-v2.7镜像与TensorFlow环境共存的可能性

PyTorch-CUDA-v2.7镜像与TensorFlow环境共存的可能性 在现代AI开发中,一个常见的痛点是:项目A用PyTorch训练得风生水起,而部署平台却要求模型必须转成TensorFlow的SavedModel格式;或者团队一边做研究用PyTorch写实验代码&#xff…

作者头像 李华
网站建设 2026/1/19 10:34:46

Input Remapper终极配置指南:从入门到精通的全流程解析

Input Remapper作为Linux系统下功能最强大的输入设备重映射工具,能够彻底改变你的键盘、鼠标和游戏手柄的操作逻辑。无论你是想要优化工作效率的程序员,还是追求极致游戏体验的玩家,这款开源神器都能满足你对输入设备的定制化需求。本指南将带…

作者头像 李华