tp5 中使用 mongoDB 空间位置搜索

在很多场景我们都会使用位置范围服务:

如:查找附近的单车、旅店、饭店等等。tp5框架的使用还是比挺多的,关于tp5中的查询条件已经默认拥有了near查询处理了,但结果并不能满足我们的一些需求。参考到一篇文章,所以对 tp5中的范围查找进行记录,希望可以帮助到有同等需求的小伙伴们。

需要了解mongoDB的2dsphere、2d索引服务,及空间查找的基本使用语法。

composer.json 文件添加

"require": {
    "topthink/think-mongo": "2.0.*"
},

或者 到 vendor文件夹下打开终端用命令添加扩展:composer require topthink/think-mongo 

public function mongo(){
   $lat = '22.54164073';
   $lng = '114.0474614';
   $lat = floatval($lat);
   $lng = floatval($lng);
   $res = Db::connect(Config('mongodb')) -> table('guest') -> where(['location'=>['near',[$lng,$lat,5000]]]) -> limit(10) -> select();
   dump($res);
}

上面的 where 条件没有默认的,所以要修改一下

找到要修改的文件:项目\vendor\topthink\think-mongo\src\Builder.php     并找到 parseWhereItem 方法

......
}elseif ('near' == $exp) {
    // 经纬度查询
    //$query[$key] = ['$near' => $this->parseValue($value, $key)];
    //空间点距查询
    $query[$key] = (object)['$near' => (object)['$geometry' => (object)['type' => "Point" ,'coordinates' => [$value[0],$value[1]]],'$maxDistance' => $value[2]]];
}
......

找到上面 near == $exp  这项,经纬度查询的代码注释掉,并添加空间点查询这项代码

OK ,最后测试成功

参考文章:如何在thinkPHP5中使用mongoDB中空间搜索进行位置范围查找

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

逸曦穆泽

您的鼓励是我的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值