news 2026/6/10 17:10:38

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/6/9 18:48:17

五款城市通勤合资混动SUV精选:20万以内智能驾驶辅助系统推荐

随着智能科技的进步和环保意识的提升,越来越多的消费者开始关注兼具智能驾驶辅助系统和低油耗的合资混动SUV。在20万元以内的预算范围内,插电混动(PHEV)SUV凭借其优秀的综合性能和智能化配置,成为了城市通勤的理想选择…

作者头像 李华
网站建设 2026/6/10 11:42:26

深度学习开发新利器:PyTorch-CUDA-v2.7镜像一键部署教程

深度学习开发新利器:PyTorch-CUDA-v2.7镜像一键部署实战 在AI研发一线摸爬滚打过的人都懂,最让人头疼的往往不是模型调参,而是环境配置——明明代码没问题,“在我机器上能跑”却成了团队协作中的高频梗。CUDA版本不匹配、cuDNN缺失…

作者头像 李华
网站建设 2026/6/10 11:37:37

工业园区再生水源热泵供热制冷管理平台方案

工业园区是集成了生产、管理和服务等多重功能的综合性经济体,是现代工业发展的主要载体。目前中国工业园区的能源消耗量约占全社会能源消耗量的三分之一以上,普遍存在较高的能耗成本与能源浪费问题,因此实现园区智慧节能管理越来越刻不容缓。…

作者头像 李华
网站建设 2026/6/10 11:39:40

AI编程提示词完整指南:30+工具中文版免费资源库

AI编程提示词完整指南:30工具中文版免费资源库 【免费下载链接】system-prompts-and-models-of-ai-tools-chinese AI编程工具中文提示词合集,包含Cursor、Devin、VSCode Agent等多种AI编程工具的提示词,为中文开发者提供AI辅助编程参考资源。…

作者头像 李华
网站建设 2026/6/9 17:32:05

AI代码分析终极指南:使用统计CLI工具快速洞察开发成本

在当今AI驱动的开发环境中,了解代码使用情况变得至关重要。AI代码分析工具通过CLI界面提供实时使用统计,帮助开发者掌握成本、优化资源分配。无论您是个人开发者还是团队负责人,掌握这些分析工具都将大幅提升开发效率和成本控制能力。 【免费…

作者头像 李华
网站建设 2026/6/10 13:35:01

前端技术分享,零基础入门到精通,收藏这篇就够了

css模块化设计 1. 设计原则 a、可复用能继承要完整 b、周期性迭代 2. 设计方法 a、先整体后部分再颗粒化 b、先抽象再具体 代码规范——ESLint ESLint 是一个代码规范和错误检查工具,有以下几个特性: 所有东西都是可以插拔的。你可以调用任意的ru…

作者头像 李华