【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

相关文章
|
6月前
|
存储 NoSQL 定位技术
Redis Geo:掌握地理空间数据的艺术
Redis Geo:掌握地理空间数据的艺术
465 0
|
12月前
|
SQL 存储 数据可视化
Ganos矢量快显功能上手系列2:增强的MVT能力
本文主要介绍Ganos新增的2D矢量动态切片函数及其使用方法。新增的矢量动态切片函数能够大幅提升可视化效率,有效解决小比例尺MVT显示耗时久的问题。和PostGIS相比,小比例尺MVT的可视化效率提升可达60%以上。
|
2月前
|
存储 数据可视化 定位技术
Ganos矢量快显功能
Ganos的2D矢量快显功能提供了亿级二维矢量数据的高效可视化解决方案。通过创新性的稀疏金字塔索引技术,Ganos大幅减少了切片构建时间和存储开销,并支持动态更新。相较于传统离线切片方式,Ganos能在普通云实例上快速构建和更新切片,显著提升了响应速度和更新效率,同时大幅降低了存储需求。本文详细介绍如何使用Ganos进行2D矢量数据的准备、稀疏金字塔构建、切片获取及Web地图服务搭建,帮助读者快速上手体验这一高效功能。
38 1
|
2月前
|
存储 数据可视化 关系型数据库
Ganos矢量快显功能上手
Ganos是由阿里云数据库产品事业部与达摩院合作研发的新一代云原生位置智能引擎,集成于PolarDB、Lindorm、AnalyticDB和RDS PG等核心产品中。Ganos具备十大核心引擎,为数据库提供一体化时空数据处理能力。其2D矢量快显功能采用稀疏金字塔索引技术,显著缩短切片时间和减少存储开销,支持动态更新。通过简单的表结构准备和索引构建,用户可快速实现高效的数据可视化。此外,Ganos还支持3D矢量数据可视化,进一步拓展了应用场景。
41 0
|
2月前
|
SQL 关系型数据库 分布式数据库
用Ganos低代码实现免切片遥感影像浏览
本文介绍了一种基于PolarDB兼容PostgreSQL 14的高效栅格数据管理和可视化方案。推荐配置包括4核CPU、16GB内存、50GB磁盘等。通过创建扩展并上传影像至OSS,利用SQL语句完成数据导入、镶嵌、匀色及金字塔构建。重点介绍了使用ST_AsTile函数动态生成标准瓦片的方法,支持多种格式和增强方式。前端通过Python实现服务接口,实现实时、高效的数据展示。此方案具有实时性强、存储成本低等优点,适合快速可视化大量栅格数据。
40 0
|
6月前
|
Web App开发 存储 网络协议
C/C++ 数据结构设计与应用(四):C++数据压缩与传输:从理论到实践的全景解析
C/C++ 数据结构设计与应用(四):C++数据压缩与传输:从理论到实践的全景解析
310 3
|
6月前
|
定位技术 Python
R语言raster包批量拼接、融合大量栅格图像
R语言raster包批量拼接、融合大量栅格图像
145 1
|
NoSQL 定位技术 Redis
Redis学习笔记-GEO经纬度编码原理&地理划分
Redis学习笔记-GEO经纬度编码原理&地理划分
247 1
|
前端开发 关系型数据库 定位技术
用Ganos低代码实现免切片遥感影像浏览(一)
本文介绍了使用PolarDB-PG数据库配合Ganos时空数据库引擎,不借助第三方工具仅利用SQL语句快速管理与展示遥感影像数据的一种方法。Ganos共提供两种影像免切浏览的方法,一种使用窗口范围获取影像数据展示,另一种通过固定瓦片范围获取影像数据展示,本文详细介绍第一种方法并提供了前后端实操代码帮助用户可以快速理解Ganos Raster的使用细节。
|
存储 Cloud Native 关系型数据库
Ganos矢量栅格数据快速入库方法简介
本文介绍了Ganos提供的矢量、栅格数据高效入库方法,帮助用户快速理解云原生数据库空间数据的写入方案,以便更好的使用Ganos矢栅数据的处理能力。