开发LBS应用之 根据一点的经纬度实现附近点的查询 - geohash
2015-03-30 17:57
573 查看
原文
http://blog.segmentfault.com/cloudmario/1190000000624088
geohash能做到:
https://github.com/CloudSide/geohash
https://github.com/lyokato/objc-geohash
例如: 假设我的数据库里存储着1亿条包含经纬度的用户数据,用iPhone/android手机定位得到 新浪总部(理想国际大厦)的经纬度: 39.98123848, 116.30683690 然后去数据库查找附近的妞
得到9个geohash值
范围如图:
用sql语句查询
看一下是否用上索引 (一共有50多万行测试数据):
索引:
数据:
看一下查询是否够高效?:
恩, HOHO!!
其他资料:
- geohash演示: http://openlocation.org/geohash/geohash-js/
- wiki: http://en.wikipedia.org/wiki/Geohash
- 原理: https://github.com/CloudSide/geohash/wiki
开发LBS应用之 根据一点的经纬度实现附近点的查询 - geohash
时间 2014-07-31 15:13:13 segmentfault-博客原文
http://blog.segmentfault.com/cloudmario/1190000000624088
geohash
这年头和LBS相关的应用越来越火. 从最早的foursquare的热闹程度就可见一般, 现在就更不用说微信、陌陌了 (什么, 没听过... 哥们, 你out 了). 和LBS有关的应用一般都包括一些共同的操作, 最常见的一个, 就是找附近的东东(餐馆, 商店, 妞....). 所以, 这里就抛出了一个问题, 怎样才能在大量经纬度数据中检索出附近的点呢?geohash能做到:
https://github.com/CloudSide/geohash
https://github.com/lyokato/objc-geohash
例如: 假设我的数据库里存储着1亿条包含经纬度的用户数据,用iPhone/android手机定位得到 新浪总部(理想国际大厦)的经纬度: 39.98123848, 116.30683690 然后去数据库查找附近的妞
require_once('geohash.class.php'); $geohash = new Geohash; //得到这点的hash值 $hash = $geohash->encode(39.98123848, 116.30683690); //取前缀,前缀约长范围越小 $prefix = substr($hash, 0, 6); //取出相邻八个区域 $neighbors = $geohash->neighbors($prefix); array_push($neighbors, $prefix); print_r($neighbors);
得到9个geohash值
//得到9个geohash值 Array ( [top] => wx4eqx [bottom] => wx4eqt [right] => wx4eqy [left] => wx4eqq [topleft] => wx4eqr [topright] => wx4eqz [bottomright] => wx4eqv [bottomleft] => wx4eqm [0] => wx4eqw )
范围如图:
用sql语句查询
SELECT * FROM xy WHERE geohash LIKE 'wx4eqw%'; SELECT * FROM xy WHERE geohash LIKE 'wx4eqx%'; SELECT * FROM xy WHERE geohash LIKE 'wx4eqt%'; SELECT * FROM xy WHERE geohash LIKE 'wx4eqy%'; SELECT * FROM xy WHERE geohash LIKE 'wx4eqq%'; SELECT * FROM xy WHERE geohash LIKE 'wx4eqr%'; SELECT * FROM xy WHERE geohash LIKE 'wx4eqz%'; SELECT * FROM xy WHERE geohash LIKE 'wx4eqv%'; SELECT * FROM xy WHERE geohash LIKE 'wx4eqm%';
看一下是否用上索引 (一共有50多万行测试数据):
索引:
数据:
看一下查询是否够高效?:
EXPLAIN SELECT * FROM xy WHERE geohash LIKE 'wx4eqw%';
恩, HOHO!!
其他资料:
- geohash演示: http://openlocation.org/geohash/geohash-js/
- wiki: http://en.wikipedia.org/wiki/Geohash
- 原理: https://github.com/CloudSide/geohash/wiki
相关文章推荐
- 在SAE上开发LBS应用之 根据一点的经纬度实现附近点的查询
- 在SAE上开发LBS应用之 根据一点的经纬度实现附近点的查询
- LBS应用之 根据一点的经纬度实现附近点的查询
- java实现根据经纬度查询附近,比如附近团购 附近美食等。。
- app后端开发四:GeoHash实现查找附近的X
- GPS定位,根据经纬度查询附近地点的经纬度-sql方法实现
- LBS:附近搜索(geohash算法:经纬度编码搜索)
- PHP,Mysql-根据一个给定经纬度的点,进行附近地点查询–合理利用算法,
- 百度地图API简单应用——1.根据地址查询经纬度
- Java,Mysql-根据一个给定经纬度的点,进行附近500米地点查询–合理利用算法
- 百度地图API简单应用——1.根据地址查询经纬度
- 根据一个给定经纬度的点,进行附近地点查询
- geohash:用字符串实现附近地点搜索
- geohash:用字符串实现附近地点搜索
- 基于LBS功能应用的Geohash方案
- 根据经纬度查询附近的点
- geohash:用字符串实现附近地点搜索
- 根据两个经纬度点调用百度地图应用查询路线 适用android或者ios中及网页浏览(手机网页同样适用)
- 开发你的LBS应用,使用Google地图引擎,根据地理位置获取纬度、经度。
- 学习: ASP.NET MVC开发入门-UI实现根据查询条件返回Model层的查询结果