php使用mongodb实现附近功能

配置

return array (
    'lbs' => array (
        'host' => '88888888888888',
        'username' => '',
        'password' => '',
        )
);


连接

$constr=bizma_cjfaster::ld_config("lbs","lbs");

$connection  = new MongoClient("mongodb://$constr[host]");


选择表

$db=IM_PREFIX.near;
$m = $connection->selectDB("lbs")->selectCollection("$db");


操作

$gpshash = md5($data_arr[code].$data_arr[lon].$data_arr[lat]);
 
        $lbs_arr = array(
            "code" => $data_arr[code],
            "type" => $data_arr[type],
            "gpshash" => $gpshash,
            "sex" => $data_arr[sex],
            "loc" => array( "type"=> "Point",  "coordinates"=> array(floatval($data_arr[lon]), floatval($data_arr[lat]))),
        );


$obj = $m->findOne(array('code' => "$data_arr[code]"));
 

if (!empty($obj)) {
            //$m->insert($user_arr);
            $m->update(array("code" => "$data_arr[code]"), array('$set' => array("loc" =>  array( "type"=> "Point",  "coordinates"=> array(floatval($data_arr[lon]),    floatval($data_arr[lat]))),  "workstate" => '1')));
          
        } else {
            
            
            $m->insert($lbs_arr);
            
            try{
                //添加索引,注意经度和纬度的顺序,否则会报错
                //$m->ensureIndex(array('loc' => '2dsphere'));
                
            }catch(Exception $e){
                //print $e->getMessage();
            };
    
            
           
        }


获取附近的数据


连接选择

$constr=bizma_cjfaster::ld_config("lbs","lbs");
        
       $connection  = new MongoClient("mongodb://$constr[host]");
       
         $db=IM_PREFIX.near;
 
        $m = $connection->selectDB("lbs")->selectCollection("$db");


搜索条件

$query = array(
              "loc"=>array(
            '$near'=>array(
              '$geometry'=>array(
                'type'=> "Point",
                'coordinates'=>array($lon,$lat),
               ),
             '$maxDistance'=>5000
            )
          )
         )


搜索

$cursor = $m->find($query)->limit(10);

转换数组

$r_arr=iterator_to_array($cursor);


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值