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原理和编解码实现的更多相关文章

  1. 【GIS新探索】算法实现在不规则区域内均匀分布点

    1 概要 在不规则区域内均匀分布点,这个需求初看可能不好理解.如果设想一下需求场景就比较简单了. 场景1:在某个地区范围内,例如A市区有100W人口,需要将这100W人口在地图上面相对均匀的标识出来. ...

  2. 蓝牙协议中的SBC编解码原理和仿真

    一.SBC的原理 SBC是subband codec的缩写,中文叫做次频带编码,也叫子带编码.其基本原理是把信号的频率分为若干子带,然后对每个子带进行编码,并根据每个子带的重要性及特点分配不同的位数( ...

  3. SSD ECC中的LDPC编解码原理

    转自:http://blog.csdn.net/zhuzongpeng/article/details/78899198 目前SSD中ECC纠错代码主要两种BCH和LDPC.不过,随着SSD对ECC纠 ...

  4. 编解码原理,Python默认解码是ascii

    编解码原理,Python默认解码是ascii 首先我们知道,python里的字符默认是ascii码,英文当然没问题啦,碰到中文的时候立马给跪. 不知道你还记不记得,python里打印中文汉字的时候需要 ...

  5. GeoHash原理和可视化显示

    最近在做附近定位功能的产品,geohash是一个非常不错的实现方式.查询资料,发现阿里的这篇文章讲解的很好.但文中并没有给出geohash显示的工具.无奈,也没有查到类似的.只好自己简单显示一下,方便 ...

  6. 视频编解码学习之路(H264)

    学习视频编解码技术很难吗?视频编解码技术的未来是什么? 明了的说,无论是软件还是硬件设计,视频编解码技术有很多难点,都需要很长一段时间积累才行. 从一开始接触MPEG-2到最新的H.264标准,可算走 ...

  7. (中级篇 NettyNIO编解码开发)第七章-java序列化

    相信大多数Java程序员接触到的第一种序列化或者编解码技术就是.Java的默认序列化,只需要序列化的POJO对象实现java.io.Serializable接口,根据实际情况生成序列ID,这个类就能够 ...

  8. Android硬件编解码与软件编解码

           最近做了一个android项目用到编解码功能.大概需求是:通过摄像头拍摄一段视频,然后抽帧,生成一个短视频,以及倒序视频,刚开始直接用 H.264 编码格式,没有使用MP4容器封装.做了 ...

  9. 音视频编解码技术(一):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的出现就是为了创 ...

随机推荐

  1. jdbc和Java中的日期问题

    JDBC中的日期Java.sql.Date 是继承自Java中的Java.util.Date,在实现插入的时候可以 将Java.util.Date类型的时间转换成毫秒数,date.getTime(), ...

  2. 无脑无负担网站架构-- Application Request Route的一些应用

    首先作为一个.net 程序员,多数情况你懒的整什么架构啊.框架啊.还有那命令行的linux,别说linux也有桌面,那个桌面用起来更让人抓狂,一直不明白居然有人说喜欢上linux的命令行,装B还是SB ...

  3. CI框架下的PHP增删改查总结

    controllers下的 cquery.php文件 <?php class CQuery extends Controller { //构造函数 function CQuery() { par ...

  4. Freedom DownTime

    Storyline Computer hackers are being portrayed as the newest brand of terrorists. This is a story of ...

  5. SpringMVC源码解析 - HandlerAdapter - HandlerMethodArgumentResolver

    HandlerMethodArgumentResolver主要负责执行handler前参数准备工作. 看个例子,红色部分的id初始化,填充值就是它干的活: @RequestMapping(value ...

  6. 20169221 2016-2017-2《移动平台与android开发》学习总结

    每周作业连接汇总 第一周<Intellj IDEA 简易教程>学习,码云的基础使用.由于第一次写作业,网络攻防作业占据了我整个周四周五周六的时间这周java时间被挤没了,所以没有完成所有学 ...

  7. [label][HTML5-APP]通过使用HTML5特性开发WebApp的Framework收集

    1. jQuery mobile  http://jquerymobile.com 2. Intel's App Framework  http://app-framework-software.in ...

  8. Homework 4

    Homework 4 开发工具:dev c++ 开发语言:c++ 源代码上传至github:上传一直失败... 合作人:曹权 博客地址:http://www.cnblogs.com/c2016/ 这里 ...

  9. TSQL--标示列、GUID 、序列

    --1. IDENTIY 列不能为空,不能设默认值,创建后不能使用ALTER TABLE TableName ALTER COLUMN修改,每张表只能有一个自增列--2. 查看当前值:SELECT I ...

  10. mysql设定或修改密码的三个方法

    为用户设定密码: 1.mysql>SET PASSWORD FOR 'USERNAME'@'HOST'=PASSWORD('password'); 2.# mysqladmin -uUSERNA ...