使用Geohash搜寻附近位置是有bug的
2015-12-04 16:00
274 查看
摘要: 这么明显的问题
有很多人说可以通过geohash把GPS经纬度转换为字符串,然后通过字符串的前缀匹配获得原始点附近的点(存
在数据库中)。但这样做有个明显的bug,只要考虑如下的java代码运行结果,就知道了:
System.out.println(Geohash.encode(45.000001, 118.768011));
System.out.println(Geohash.encode(45.000002, 118.768011));
System.out.println(Geohash.encode(44.999999, 118.768011));
System.out.println(Geohash.encode(44.999989, 118.768011));
计算出来的hash值分别如下:
y8h2n8h0p0pv
y8h2n8h0p0rg
wxuryxupzpzf
wxuryxupzjzy
可以看出,存在明显的45度分割值,也就是说如果原始点在分割线附近,那么通过前缀匹配是不可能把原始点所有的附近点都找到的。
有很多人说可以通过geohash把GPS经纬度转换为字符串,然后通过字符串的前缀匹配获得原始点附近的点(存
在数据库中)。但这样做有个明显的bug,只要考虑如下的java代码运行结果,就知道了:
System.out.println(Geohash.encode(45.000001, 118.768011));
System.out.println(Geohash.encode(45.000002, 118.768011));
System.out.println(Geohash.encode(44.999999, 118.768011));
System.out.println(Geohash.encode(44.999989, 118.768011));
计算出来的hash值分别如下:
y8h2n8h0p0pv
y8h2n8h0p0rg
wxuryxupzpzf
wxuryxupzjzy
可以看出,存在明显的45度分割值,也就是说如果原始点在分割线附近,那么通过前缀匹配是不可能把原始点所有的附近点都找到的。
相关文章推荐
- Geohash的原理、算法和具体应用探究
- 用REDIS实现LBS系统
- Geohash求当前区域周围8个区域编码的一种思路
- 用打表的方式解决求Geohash当前区域周围8个区域编码
- 网络拓扑距离的高效KNN查询
- 网络拓扑距离的高效KNN查询 (中期总结)
- geohash算法原理及实现方式
- 基于LBS功能应用的Geohash方案
- 使用Redis来实现LBS的应用
- Geohash——地理坐标索引
- php实现的geohash
- Redis新特性GEOHASH
- 3分钟了解Mysql空间搜GeoHash
- 解决Mac下geohash无法安装和无法导入的问题
- GaoHash算法根据经纬度检索附近
- GeoHash原理解析
- JAVA实现Geohash算法
- geohash 模块安装及使用(Anaconda.Python 2)
- OC geohash
- 获取某个目录下所有文件路径