news 2026/6/22 4:45:57

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/15 22:17:05

可伸缩性测试在SaaS产品中的应用‌

在云计算时代,软件即服务(SaaS)产品已成为企业运营的核心支柱。随着用户量和数据负载的动态增长,可伸缩性测试(Scalability Testing)不再是可选项,而是确保产品可靠性和性能的关键环节。本文针对…

作者头像 李华
网站建设 2026/6/15 18:55:40

边缘计算环境下的性能测试挑战与突破路径

一、边缘计算性能测试的范式转变 随着5GAIoT技术的深度融合&#xff0c;边缘计算基础设施呈现三大特性&#xff1a; 拓扑异构性&#xff1a;混合云-边-端架构&#xff08;如智能工厂含300边缘节点&#xff09; 动态约束&#xff1a;终端设备CPU<1GHz/内存<512MB占比达6…

作者头像 李华
网站建设 2026/6/16 17:24:43

人人开源前端组件库实战指南:基于Vue2和Element UI的高效开发方案

人人开源前端组件库实战指南&#xff1a;基于Vue2和Element UI的高效开发方案 【免费下载链接】renren-ui renren-ui基于vue2、element-ui构建开发&#xff0c;实现renren-security后台管理前端功能&#xff0c;提供一套更优的前端解决方案。 项目地址: https://gitcode.com/…

作者头像 李华
网站建设 2026/6/15 13:21:43

Supabase Storage 终极指南:从零开始构建高效文件存储系统

Supabase Storage 终极指南&#xff1a;从零开始构建高效文件存储系统 【免费下载链接】storage S3 compatible object storage service that stores metadata in Postgres 项目地址: https://gitcode.com/gh_mirrors/st/storage 你是否曾经为文件存储而烦恼&#xff1f…

作者头像 李华
网站建设 2026/6/18 22:22:43

自然语言处理项目启动模板:使用PyTorch-CUDA-v2.7快速初始化

自然语言处理项目启动模板&#xff1a;使用PyTorch-CUDA-v2.7快速初始化 在自然语言处理&#xff08;NLP&#xff09;项目中&#xff0c;最令人头疼的往往不是模型设计本身&#xff0c;而是环境配置——明明代码写好了&#xff0c;却因为 ImportError: libcudart.so 或“CUDA n…

作者头像 李华
网站建设 2026/6/15 15:45:59

个人媒体中心完整搭建指南:从零开始的实战教程

个人媒体中心完整搭建指南&#xff1a;从零开始的实战教程 【免费下载链接】Emby Emby Server is a personal media server with apps on just about every device. 项目地址: https://gitcode.com/gh_mirrors/emby3/Emby 在数字化时代&#xff0c;拥有一个专属的个人媒…

作者头像 李华