Badoo等网站如何使用Nearby地理位置搜索?

时间:2018-02-20 15:09:29

标签: laravel geolocation

Badoo.com这样的应用程序如何使用附近的地理定位搜索? 我想让smth类似,就像用户点击“搜索”,即打开他的地理定位,然后在某个范围内,例如1km正在寻找其他用户。

我的意思是,它应该如何运作?从我的角度来看,当用户点击搜索时,使用谷歌地图API来检索用户的经度和纬度,并将其发送到数据库。接下来,对DB进行AJAX request以查找距离该坐标1km范围内的所有用户并获取结果。

我想我根本不对。有人能解释一下A-Z的逻辑以及用来实现它的服务/脚本吗? 谢谢!

1 个答案:

答案 0 :(得分:1)

我遇到了类似的问题,但是我试图找到与用户位置相比最接近的特色广告,我已经写了这段代码:

$userAddress = GeoLocation::fromDegrees($request->latitude, $request->longitude);

$geocode = GeoLocation::getGeocodeFromGoogle($address);
$latitude = $geocode->results[0]->geometry->location->lat?:24.55; //Here I was taking only first match
$longitude = $geocode->results[0]->geometry->location->lng?:24.55; //Here I was taking only first match

$placeAddress = GeoLocation::fromDegrees($latitude, $longitude);
$km = $userAddress->distanceTo($placeAddress, 'km');
$meters = floatval(number_format($km*1000, 2, '.', ''));

...

/**
 * Showing 5 featured
 *
 * Sorts and returns only 5 of the elements
 * from list.
 *
 * @param $list
 * @return Illuminate\Support\Collection
 */
 private function calculateShortest($list) {
     return $list->sortBy(function($val, $key) {
         return $val->km;
     })->take(5);
 }

这可能有助于您了解如何计算距离。我已经删除了许多不相关的代码,但我认为您会有所了解。以下是GeoLocation class

的代码

流程:您应首先获取用户选择作为其home地址的位置的经度和纬度,然后将其保存在数据库中。然后当有人试图找到match时,你可以根据他们的longitude and latitude of home addressradius计算边界,然后通过这些边界可以查询数据库,或者你可以缩小搜索范围,按gender, status, etc.