像Badoo.com
这样的应用程序如何使用附近的地理定位搜索?
我想让smth类似,就像用户点击“搜索”,即打开他的地理定位,然后在某个范围内,例如1km
正在寻找其他用户。
我的意思是,它应该如何运作?从我的角度来看,当用户点击搜索时,使用谷歌地图API来检索用户的经度和纬度,并将其发送到数据库。接下来,对DB进行AJAX request
以查找距离该坐标1km范围内的所有用户并获取结果。
我想我根本不对。有人能解释一下A-Z的逻辑以及用来实现它的服务/脚本吗? 谢谢!
答案 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 address
和radius
计算边界,然后通过这些边界可以查询数据库,或者你可以缩小搜索范围,按gender, status, etc.