在SAE上开发LBS应用之 根据一点的经纬度实现附近点的查询
2012-10-11 11:57
441 查看
http://blog.sina.com.cn/s/blog_62ba0fdd0100tul4.html
这年头和LBS相关的应用越来越火。从foursquare的热闹程度就可见一般(什么,没听过 foursquare…. 哥们,你 out 了)。和 LBS有关的应用一般都包括一些共同的操作,最常见的一个,就是找附近的东东(餐馆, 商店, 妞…)。 所以, 这里就抛出了一个问题, 怎样才能知道两个物体离得近呢?
例如:用iPhone/android手机定位得到理想国际大厦的经纬度:39.98123848,
116.30683690 然后查找附近的妞
<?php
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值:
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多万行测试数据):
geohash.class.php下载地址: http://vdisk.weibo.com/s/ybAZ
资料:
· geohash演示: http://openlocation.org/geohash/geohash-js/
· wiki: http://en.wikipedia.org/wiki/Geohash
· 原理: http://blog.sina.com.cn/s/blog_62ba0fdd0100tr98.html
这年头和LBS相关的应用越来越火。从foursquare的热闹程度就可见一般(什么,没听过 foursquare…. 哥们,你 out 了)。和 LBS有关的应用一般都包括一些共同的操作,最常见的一个,就是找附近的东东(餐馆, 商店, 妞…)。 所以, 这里就抛出了一个问题, 怎样才能知道两个物体离得近呢?
例如:用iPhone/android手机定位得到理想国际大厦的经纬度:39.98123848,
116.30683690 然后查找附近的妞
<?php
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值:
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多万行测试数据):
geohash.class.php下载地址: http://vdisk.weibo.com/s/ybAZ
资料:
· geohash演示: http://openlocation.org/geohash/geohash-js/
· wiki: http://en.wikipedia.org/wiki/Geohash
· 原理: http://blog.sina.com.cn/s/blog_62ba0fdd0100tr98.html
相关文章推荐
- 在SAE上开发LBS应用之 根据一点的经纬度实现附近点的查询
- 开发LBS应用之 根据一点的经纬度实现附近点的查询 - geohash
- LBS应用之 根据一点的经纬度实现附近点的查询
- GPS定位,根据经纬度查询附近地点的经纬度-sql方法实现
- java实现根据经纬度查询附近,比如附近团购 附近美食等。。
- Java,Mysql-根据一个给定经纬度的点,进行附近500米地点查询–合理利用算法
- PHP,Mysql-根据一个给定经纬度的点,进行附近地点查询–合理利用算法,效率提高2125倍
- GPS定位,经纬度附近地点查询–C#实现方法
- PHP,Mysql-根据一个给定经纬度的点,进行附近地点查询–合理利用算法,效率提高2125倍
- 学习: ASP.NET MVC开发入门-UI实现根据查询条件返回Model层的查询结果
- PHP,Mysql-根据一个给定经纬度的点,进行附近地点查询–算法
- PHP,Mysql-根据一个给定经纬度的点,进行附近地点查询–合理利用算法
- PHP,Mysql-根据一个给定经纬度的点,进行附近地点查询–合理利用算法,效率提高2125倍
- 百度地图API简单应用——1.根据地址查询经纬度
- 使用百度地图api实现根据地址查询经纬度
- 使用GPS经纬度定位附近地点(某一点范围内查询)
- 根据经纬度查询附近的点
- 根据经纬度查询附近的点
- 【Android】Parse 开发笔记(3)—— 实现查找附近的功能(LBS)
- PHP,Mysql-根据一个给定经纬度的点,进行附近地点查询–合理利用算法,效率提高2125倍