【GIS新探索】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
【GIS新探索】GeoHash原理和编解码实现的更多相关文章
- 【GIS新探索】算法实现在不规则区域内均匀分布点
1 概要 在不规则区域内均匀分布点,这个需求初看可能不好理解.如果设想一下需求场景就比较简单了. 场景1:在某个地区范围内,例如A市区有100W人口,需要将这100W人口在地图上面相对均匀的标识出来. ...
- 蓝牙协议中的SBC编解码原理和仿真
一.SBC的原理 SBC是subband codec的缩写,中文叫做次频带编码,也叫子带编码.其基本原理是把信号的频率分为若干子带,然后对每个子带进行编码,并根据每个子带的重要性及特点分配不同的位数( ...
- SSD ECC中的LDPC编解码原理
转自:http://blog.csdn.net/zhuzongpeng/article/details/78899198 目前SSD中ECC纠错代码主要两种BCH和LDPC.不过,随着SSD对ECC纠 ...
- 编解码原理,Python默认解码是ascii
编解码原理,Python默认解码是ascii 首先我们知道,python里的字符默认是ascii码,英文当然没问题啦,碰到中文的时候立马给跪. 不知道你还记不记得,python里打印中文汉字的时候需要 ...
- GeoHash原理和可视化显示
最近在做附近定位功能的产品,geohash是一个非常不错的实现方式.查询资料,发现阿里的这篇文章讲解的很好.但文中并没有给出geohash显示的工具.无奈,也没有查到类似的.只好自己简单显示一下,方便 ...
- 视频编解码学习之路(H264)
学习视频编解码技术很难吗?视频编解码技术的未来是什么? 明了的说,无论是软件还是硬件设计,视频编解码技术有很多难点,都需要很长一段时间积累才行. 从一开始接触MPEG-2到最新的H.264标准,可算走 ...
- (中级篇 NettyNIO编解码开发)第七章-java序列化
相信大多数Java程序员接触到的第一种序列化或者编解码技术就是.Java的默认序列化,只需要序列化的POJO对象实现java.io.Serializable接口,根据实际情况生成序列ID,这个类就能够 ...
- Android硬件编解码与软件编解码
最近做了一个android项目用到编解码功能.大概需求是:通过摄像头拍摄一段视频,然后抽帧,生成一个短视频,以及倒序视频,刚开始直接用 H.264 编码格式,没有使用MP4容器封装.做了 ...
- 音视频编解码技术(一):MPEG-4/H.264 AVC 编解码标准
一.H264 概述 H.264,通常也被称之为H.264/AVC(或者H.264/MPEG-4 AVC或MPEG-4/H.264 AVC) 1. H.264视频编解码的意义 H.264的出现就是为了创 ...
随机推荐
- 布局xml文件不能预览
原因:xml文件里,有一些值没有设置属性. 如: <LinearLayout android:layout_width="fill_ ...
- ubuntu系统中解决github下载速度慢问题
如果你在使用github,出现访问和下载速度慢问题,可以通过修改host解决.记得不要踩坑哦!分四步: 第一步:查询速度快的IP地址 在http://tool.chinaz.com/dns中查询下面三 ...
- sklearn.metrics import precision_recall_fscore_support
二分类/多分类/多标签 对于二分类来说,必须定义一些matrics(f1_score,roc_auc_score).在这些case中,缺省只评估正例的label,缺省的正例label被标为1(可以通过 ...
- Devexpress VCL Build v2013 vol 13.2.2 发布
devexpress 2013 的第二个大版本出来了,一如既往, 基本上还是一个大补丁包.各位看官,自己看. What's New in 13.2.2 (VCL Product Line) New ...
- HttpClient Timeout
1. Overview This tutorial will show how to configure a timeout with the Apache HttpClient 4. If you ...
- Ubuntu的常识使用了解4
寻找文件的「名称」 在Linux系统当中,文件的数量非常非常的多, 需要使用查找工具来高效查找指定文件位置:
- Baidu Map开发示例
1.获取SHA1码 在Eclipse中点击“Windows”----->“Preferences” ----->“Android” ----->“Build”如下图: 打开“Win+ ...
- IOC容器基本原理
1 IoC容器的概念 IoC容器就是具有依赖注入功能的容器,IoC容器负责实例化.定位.配置应用程序中的对象及建立这些对象间的依赖.应用程序无需直接在代码中new相关的对象,应用程序由IoC容器进行 ...
- js练习计算器
js练习计算器,支持鼠标点击.键盘操作 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" &quo ...
- solr特点三: 基于Solr实现排序定制化参考
排序实现有N种形式,最低成本.最快响应时间是目标 一份索引,支持N种排序策略并且在线互不干扰是要考虑的每一种实现,处理的场景是不同的,不要千篇一律 020排序,从索引到效果,有不少坑,这篇文章没有细说 ...