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中空间搜索进行位置范围查找

发布了52 篇原创文章 · 获赞 15 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/qq_41408081/article/details/103634517