使用redis—geo api實現搜索附近的人,本身寫的一個composer包

git地址php

安裝

須要使用composer,安裝composer, composer中國鏡像git

若是是應用在項目當中的話找到根目錄,須要和 composer.json同級github

composer require gaopengfei/redis_lbs

基本操做

初始化

require_once __DIR__.'/vendor/autoload.php';
$lbs = new \LBS\Services\LBSService();

添加

$add_params = [
    [
        'name' => 'yabao_road',
        'long' => '116.43620200729366',
        'lat' => '39.916880160714435'
    ],
    [
        'name' => 'jianguomen',
        'long' => '116.4356870231628',
        'lat' => '39.908560377800676'
    ],
    [
        'name' => 'chaoyangmen',
        'long' => '116.4345336732864',
        'lat' => '39.924466658329585'
    ],
    [
        'name' => 'galaxy_soho',
        'long' => '116.4335788068771',
        'lat' => '39.921372916981106'
    ],
    [
        'name' => 'cofco',
        'long' => '116.43564410781856',
        'lat' => '39.92024564137184'
    ],
    [
        'name' => 'fesco',
        'long' => '116.435182767868',
        'lat' => '39.91811857809279'
    ],


];
/**
 * 在集合中新加一個座標
 * @param array $params
 *  結構是 ['name'=>'xxx','long'=>'1.2321','lat'=>'1.3112']或者[['name'=>'xxx','long'=>'1.2321','lat'=>'1.3112']]
 * @param null $key
 * @return int
 */
$res = $lbs->add($add_params);

返回
int 6

刪除

/**
 * 刪除集合中指定元素
 * @param $name
 * @param null $key  默認存在集合,能夠指定
 * @return int
 */
$res = $lbs->del('gao1');

返回
int 0 或 1


若是是指定的集合名就
$res = $lbs->del('gao1','set-name');

用座標查詢附近的單位

/**
 * 查詢範圍內元素,若是不轉 key就用默認的
 * @param $long     經度
 * @param $lat      緯度
 * @param $radius   範圍
 * @param $unit     單位  (僅支持 m,km,ft,mi)
 * @param null $key 集合名
 * @return mixed
 */
$search = $lbs->search('116.435182767868','39.91811857809279',500,'m');

返回數組
array:4 [▼
  0 => array:2 [▼
    "name" => "fesco"
    "dist" => "0.1250"
  ]
  1 => array:2 [▼
    "name" => "yabao_road"
    "dist" => "162.8454"
  ]
  2 => array:2 [▼
    "name" => "cofco"
    "dist" => "239.7758"
  ]
  3 => array:2 [▼
    "name" => "galaxy_soho"
    "dist" => "386.9165"
  ]
]

根據已有的位置查詢

/**
 * 根據集合中的元素查詢範圍內元素,若是不轉 key就用默認的
 * @param $name         集合中的元素名
 * @param $radius       範圍
 * @param $unit         單位
 * @param null $key     集合名
 * @return mixed
 */
$search = $lbs->->searchByMembers('fesco',500,'m');

返回數組
array:4 [▼
  0 => array:2 [▼
    "name" => "fesco"
    "dist" => "0.1250"
  ]
  1 => array:2 [▼
    "name" => "yabao_road"
    "dist" => "162.8454"
  ]
  2 => array:2 [▼
    "name" => "cofco"
    "dist" => "239.7758"
  ]
  3 => array:2 [▼
    "name" => "galaxy_soho"
    "dist" => "386.9165"
  ]
]

列出集合的全部值(其實就是 zrange)

/**
 * 列出集合中的內容
 * @param $key          集合的key
 * @param int $start    起始位置
 * @param int $end      結束位置 -1 爲直到末尾
 * @return array
 */
$list = $lbs->list($test->geoset_name,2,-1);

返回數組
array:6 [▼
  0 => "jianguomen"
  1 => "yabao_road"
  2 => "fesco"
  3 => "cofco"
  4 => "galaxy_soho"
  5 => "chaoyangmen"
]

博客原文redis

相關文章
相關標籤/搜索