菜单 学习猿地 - LMONKEY

VIP

开通学习猿地VIP

尊享10项VIP特权 持续新增

知识通关挑战

打卡带练!告别无效练习

接私单赚外块

VIP优先接,累计金额超百万

学习猿地私房课免费学

大厂实战课仅对VIP开放

你的一对一导师

每月可免费咨询大牛30次

领取更多软件工程师实用特权

入驻
0
0

基于 Redis 的 LBS 尝试

原创
05/13 14:22
阅读数 363

redis 3.2版本中增加的最大功能就是对GEO(地理位置)的支持,这对于O2O项目来说,又有了一项实现LBS应用的选择。

file

主要命令:

  1. GEOADD |将指定的地理空间位置(纬度、经度、名称)添加到指定的key中
  2. GEODIST |返回两个给定位置之间的距离
  3. GEOHASH |返回一个或多个位置元素的 Geohash 表示
  4. GEOPOS |从key里返回所有给定位置元素的位置(经度和纬度)
  5. GEORADIUS |以给定的经纬度为中心, 找出某一半径内的元素
  6. GEORADIUSBYMEMBER |找出位于指定范围内的元素,中心点是由给定的位置元素决定

demo

我们来做个小demo:

先插入西湖区几个景点的地理坐标

$redis->rawCommand('geoadd', 'location', '120.118007', '30.259293', '桃园岭');
$redis->rawCommand('geoadd', 'location', '120.119445','30.255082', '农耕科普园');
$redis->rawCommand('geoadd', 'location', '120.071655','30.272893', '西溪湿地');
$redis->rawCommand('geoadd', 'location', '120.114321','30.221218', '龙井村');
$redis->rawCommand('geoadd', 'location', '120.145012','30.205586', '白塔公园');
$redis->rawCommand('geoadd', 'location', '120.112912','30.224221', '十里琅珰');
$redis->rawCommand('geoadd', 'location', '120.107264','30.206997', '狮峰');
$redis->rawCommand('geoadd', 'location', '120.117936','30.227969', '真迹寺');
$redis->rawCommand('geoadd', 'location', '120.10826','30.246569', '灵隐寺');
$redis->rawCommand('geoadd', 'location', '120.114123','30.264152', '状元峰');

我们获取西溪湿地和龙井村的距离

$ret = $redis->rawCommand('GEODIST', 'location','西溪湿地', '龙井村', 'm');
print_r($ret);  //7060.0083

其他命令:

// 返回灵隐寺,状元峰的位置
$ret = $redis->rawCommand('GEOPOS', 'location','灵隐寺', '状元峰');
print_r($ret);
// 返回'120.114253','30.219759'坐标附近1km的地址
$ret = $redis->rawCommand('GEORADIUS', 'location','120.114253','30.219759', 1, 'km', 'WITHDIST');
print_r($ret);
$ret = $redis->rawCommand('GEOHASH', 'location','龙井村', '灵隐寺');
print_r($ret);

返回值如下:

Array
(
    [0] => Array
        (
            [0] => 120.10826021432877
            [1] => 30.24656778547287
        )

    [1] => Array
        (
            [0] => 120.11412352323532
            [1] => 30.264151146155207
        )

)
Array
(
    [0] => Array
        (
            [0] => 龙井村
            [1] => 0.1624
        )

    [1] => Array
        (
            [0] => 十里琅珰
            [1] => 0.5128
        )

    [2] => Array
        (
            [0] => 五台寺
            [1] => 0.9793
        )

)
Array
(
    [0] => wtm7vm8e6e0
    [1] => wtmkj4hpj20
)

操作比较简单,就不一一说明了。

发表评论

0/200
0 点赞
0 评论
收藏
为你推荐 换一批