【GIS新探索】GeoHash原理和编解码实现

简介: 1.什么是GeoHash         geohash基本原理是将地球理解为一个二维平面,将平面递归分解成更小的子块,每个子块在一定经纬度范围内拥有相同的编码。不好理解,没关系,我来找个图。         就像上面这张图,一个坐标点,可以当做一个小格子,而格子的标注就是该坐标点geohash值,当然格子越小精度越高,这个看实际应用吧。

1.什么是GeoHash

        geohash基本原理是将地球理解为一个二维平面,将平面递归分解成更小的子块,每个子块在一定经纬度范围内拥有相同的编码。不好理解,没关系,我来找个图。

        就像上面这张图,一个坐标点,可以当做一个小格子,而格子的标注就是该坐标点geohash值,当然格子越小精度越高,这个看实际应用吧。

2.为什么要用GeoHash

        现在我们来说说为什么要用geohash,普通的经纬度坐标不是挺好的么?

        举个栗子:我有1W+个经纬度坐标点,我现在需要查询其中一个点周围5KM范围内有哪些点,可以怎么做?

        答案一:以该点为圆心,半径5KM做圆,循环这1W+个点与圆心的直线距离,判断是否小于5KM。这种做法其实是非常常用也非常高效的。

        答案二:采用GIS二次开发组件,调用GIS接口查询该点周围5KM范围内点数据,这种做法也没有问题,虽然我不清楚GIS组件具体实现的方案是什么,但是我觉得性能应该比方案一要差点,原因很简单GIS组件都非常的庞大和复杂(以AE或者ArcGIS JS API为例)。

        以上的答案我都没有测试过,不过设想如果我把数据量扩大到100W+个坐标点呢?循环计算的计算量可想而知,如果再要求点时效性,那就为难了。这个时候我们来谈谈geohash,还是举个栗子,我选4个点,A B C D,每个点之间的距离都约5KM,如下表。

 

序号 坐标 geohash geohash长度
A 116.280159,39.9138 111001110100100011011010 5
B 116.316816,39.913551 111001110100100011011010 5
C 116.404036,39.91405 111001110100100011110000 5
D 116.46663,39.914354 111001110100100011110010 5

 

        看不懂没关系,我们再来看一张图。

 

        这张图说明什么呢,我们来对应看一下两张表的“geohash长度”,拿5级别为例,看KM误差,意思是在5级别如果geohash相同,说明两个点的距离误差在2.4*2=4.8KM左右(+-算左右两次)。再看看表中A和B的geohash是一样的,说明A和B距离在5KM范围内,而A与C、D都不在5KM范围内。不信,我们来看看地图。

        由于是手动取点坐标有一定误差,不过不影响结果演示。这时候我们再回来开始那个问题,我有1KW+个点,需要找到某点5KM范围内的数据,我可以把这些坐标全部转为第5级别的geohash值,然后SQL查询等于这个点geohash值的所有数据即可。所以geohash适合于快速查询且对绝对精度要求不高的业务场景。

        下图是某年参加ArcSummit会议滴滴某位技术大咖分享的滴滴内部使用geohash快速查询周边车辆信息的PPT截图。PPT下载

 

3.JS实现GeoHash编解码

具体代码麻烦移步个人博客:http://www.88gis.cn/web/pages/blog/blogInfo.html?id=fd587a3e-f7df-41c8-8503-8f4a298e80c4

相关文章
|
XML 前端开发 Java
SpringMVC实现文件下载实践
SpringMVC实现文件下载实践
213 3
|
数据可视化 Java 分布式数据库
分享111个Java源码,总有一款适合您
分享111个Java源码,总有一款适合您
640 0
|
25天前
|
JavaScript 安全 Java
基于springboot的大学生心理咨询管理系统
本研究针对大学生心理健康问题,构建基于Spring Boot、Vue等技术的心理咨询管理系统,实现心理数据电子化、智能化管理。系统支持在线预约、匿名咨询、心理测评与数据分析,兼具隐私保护与危机预警功能,提升服务可及性与干预精准度,助力高校心理健康工作科学化发展。
|
12月前
|
XML JSON Ubuntu
Python实用记录(十五):PyQt/PySide6打包成exe,精简版(nuitka/pyinstaller/auto-py-to-exe)
本文介绍了使用Nuitka、PyInstaller和auto-py-to-exe三种工具将Python的PyQt/PySide6应用打包成exe文件的方法。提供了详细的安装步骤、打包命令和参数说明,适合新手学习和实践。
3563 0
|
存储 数据采集 数据挖掘
Python数据分析实验一:Python数据采集与存储
Python数据分析实验一:Python数据采集与存储
449 1
|
机器学习/深度学习 人工智能 自然语言处理
英伟达开源大模型对齐框架—NeMo-Aligner
【5月更文挑战第25天】英伟达开源NeMo-Aligner,一个针对大型语言模型对齐的工具包,支持RLHF、DPO等前沿技术,实现高效训练和扩展。基于Megatron-LM,利用3D并行训练和分布式PPO优化处理大规模模型。采用Apache 2.0许可,鼓励社区参与和创新。然而,硬件需求和技术门槛仍是应用挑战。[链接](https://arxiv.org/abs/2405.01481v1)
312 5
|
存储 算法 编译器
【C/C++ 数据结构 线性表】 数据结构 解析 链表中哨兵节点(伪节点)的作用
【C/C++ 数据结构 线性表】 数据结构 解析 链表中哨兵节点(伪节点)的作用
371 0
|
消息中间件 NoSQL 安全
javpower:后端技术革新的开源之旅
🌟 Java后端开发者javpower热衷于开源项目,分享AI、Git、Redis等领域的知识和工具,如JavaVision、EasyGit。擅长JVM优化、数据库事务处理、微服务架构等,积极参与开源社区,为技术世界贡献力量。
546 3
|
弹性计算 NoSQL Java
阿里云新用户免费领云服务器并搭建网站教程分享(图文教程)
阿里云针对新用户有注册阿里云,免费领云服务器的优惠政策,对于新手用户来说,我们可以借助这个活动先免费领取一台试用云服务器,并部署自己的网站或其他应用程序,先测试下网站或者项目在阿里云服务器上的运行情况之后再购买,这样可以买的放心,用的也放心,下面是阿里云新用户免费领云服务器并搭建网站教程,以供大家参考。
阿里云新用户免费领云服务器并搭建网站教程分享(图文教程)
|
Java 程序员 数据安全/隐私保护
分享一个word转pdf的工具类Aspose[java]
分享一个word转pdf的工具类Aspose[java]
358 0