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中空間搜索進行位置範圍查找

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章