1、geohash及其性质

一种空间索引技术。

(1)将二维的经纬度位置数据转换为一维的字符串(基本上hash族的算法都是这样);

其优点在于hash编码后的字符串,可以方便查找和索引,从而减少相似计算的计算量(不需要再去两两计算距离,而是缩小了比较的范围,减少了计算量、提高了效率);

(2)字符串越长,表示的范围越小越精确;字符串长度越小,表示的范围越大越宽泛;

(3)字符串越相似表示距离越相近;

这样可以利用字符串的前缀匹配来查询附近的POI信息;

2、应用

将POI位置信息进行GeoHash编码之后,根据字符串前缀匹配来获得附近距离;

3、GeoHash编码算法

(1)算法步骤:

主要是用的二分查找的方法,先根据纬度编码,得到一个二进制序列;然后根据经度编码,又得到一个二进制序列;

然后组码,偶位数放经度,奇位数放纬度,把两串编码组合成新串;最后使用0-9,b-z(去掉a,i,l,o)这32个字母进行base32编码。

同理,将编码转换为经纬度的解码算法与之相反。

(2)算法原理:(就是解释为什么这样的编码能够使得越相近的位置有越相似的编码结果)

空间填充曲线:

Peano

Hilbert

4、注意点

(1)geohash将区域划分为矩形,那么在边界附近的点可能会出现定位点与同一个geohash编码区域内的点的距离大于临近区域内的点距离的情况;

解决办法:查询时,除了匹配定位点本身所在区域的geohash之外,还使用周围8个区域的geohash编码来匹配;

(2)peano空间填充曲线会产生突变,即编码相似但距离可能相差很大,也就是说使得用编码相似性来衡量距离接近成为了充分不必要条件;

解决办法:在使用geohash过滤筛选可能的附近poi 之后,再进一步计算两点之间的实际距离;

此外,

geohash只是空间索引的一种方式,特别适合点数据,而对线、面数据采用R树索引更有优势。

参考:http://www.cnblogs.com/LBSer/p/3310455.html

最新文章

  1. jquery on()
  2. string类型转换int类型
  3. 【BZOJ】3521: [Poi2014]Salad Bar
  4. DBCC SHOWCONTIG、DBCC DBREINDEX。
  5. [MFC] 向文本编辑框写入数据与从其中读取数据
  6. Javascript模块化编程(二):AMD规范【转】
  7. 读取spring配置文件的方法(spring读取资源文件)
  8. 如何调试MFC中的内存泄漏
  9. E - Fibonacci Again(找规律)
  10. CEOI2014 day1 task3 Question
  11. vs添加到附加进程调试(IIS页面调试)
  12. 增加一台web机注意事项
  13. CodeVs 3150 (大数 + 递推)
  14. laravel 添加验证码
  15. 关于scanf、getchar、getch、getche缓冲区分析——C语言
  16. ASP.NET MVC —— Model之一模型模板
  17. Task 6.2冲刺会议九 /2015-5-22
  18. Caffe使用step by step:r-cnn目标检测代码
  19. Luogu4885 灭顶之灾
  20. Repository与UnitOfWork引入

热门文章

  1. SWT的基本组件使用
  2. 链家H5项目总结
  3. compass初探
  4. 如何使用sass
  5. Luogu P3384 【模板】树链剖分
  6. redis 拒绝远程访问解决
  7. c++笔记1
  8. 使用OAuth保护REST API并使用简单的Angular客户端
  9. spring和springmvc是单例还是多例
  10. nodejs 实践:express 最佳实践(七) 改造模块 connect2 解析