taoCMS是基于php+sqlite/mysql的国内最小(100Kb左右)的功能完善、开源免费的CMS管理系统

使用geohash查找附近的人

2013-11-29

这年头和LBS相关的应用越来越火。从foursquare的热闹程度就可见一般(什么,没听过 foursquare…. 哥们,你 out 了)。和 LBS有关的应用一般都包括一些共同的操作,最常见的一个,就是找附近的东东(餐馆, 商店, 妞…)。 所以, 这里就抛出了一个问题, 怎样才能知道两个物体离得近呢?


例如:iPhone/android手机定位得到理想国际大厦的经纬度:39.98123848, 116.30683690 然后查找附近的妞在SAE上开发LBS应用之 <wbr>根据一点的经纬度实现附近点的查询 

<?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);

 

?>

 

得到9geohash值:

 

Array

(

    [top] => wx4eqx

    [bottom] => wx4eqt

    [right] => wx4eqy

    [left] => wx4eqq

    [topleft] => wx4eqr

    [topright] => wx4eqz

    [bottomright] => wx4eqv

    [bottomleft] => wx4eqm

    [0] => wx4eqw

)

 

范围如图:

 

::Desktop:Pasted Graphic.tiff

 

 

用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多万行测试数据):

 

::Desktop:Pasted Graphic 2.tiff

 

在SAE上开发LBS应用之 <wbr>根据一点的经纬度实现附近点的查询

 

::Desktop:Pasted Graphic 1.tiff


geohash.class.php下载地址:https://github.com/CloudSide/geohash

 

资料:

·      geohash演示:  http://openlocation.org/geohash/geohash-js/

·      wiki: http://en.wikipedia.org/wiki/Geohash

·      原理: http://blog.sina.com.cn/s/blog_62ba0fdd0100tr98.html

 

类别:技术文章 | 阅读:328479 | 评论:0 | 标签:lbs

想收藏或者和大家分享这篇好文章→

“使用geohash查找附近的人”共有0条留言

发表评论

姓名:

邮箱:

网址:

验证码:

公告

taoCMS发布taoCMS 3.0.2(最后更新21年03月15日),请大家速速升级,欢迎大家试用和提出您宝贵的意见建议。

捐助与联系

☟请使用新浪微博联系我☟

☟在github上follow我☟

标签云