Badoo 等网站如何使用附近的地理位置搜索?
How sites like Badoo are using Nearby geolocation search?
Badoo.com
等应用程序如何使用附近的地理位置搜索?
我想让 smth 相似,就像用户点击 "Search",打开他的地理位置,然后在某个范围内,例如 1km
正在寻找另一个用户。
我的意思是,它应该如何运作?从我的角度来看,当用户点击搜索时,使用 google 地图 API 检索用户的经度和纬度,并将其发送到数据库。接下来,对 DB 进行 AJAX request
以查找距离该坐标 1km 范围内的所有用户并获取结果。
我觉得我一点都不对。有人可以从 A-Z 解释该逻辑以及使用什么 services/scripts 来实现它吗?
谢谢!
我遇到了类似的问题,但我试图找到与用户位置最接近的特色广告,我写了这段代码:
$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
的代码
Flow: 你应该首先获取用户选择的位置的经纬度作为他的home
地址,然后将其保存在数据库中。然后当有人试图找到 match
时,你可以根据他们的 longitude and latitude of home address
和 radius
计算边界,然后根据这些边界你可以查询数据库,或者你可以进一步缩小搜索范围,通过 gender, status, etc.
Badoo.com
等应用程序如何使用附近的地理位置搜索?
我想让 smth 相似,就像用户点击 "Search",打开他的地理位置,然后在某个范围内,例如 1km
正在寻找另一个用户。
我的意思是,它应该如何运作?从我的角度来看,当用户点击搜索时,使用 google 地图 API 检索用户的经度和纬度,并将其发送到数据库。接下来,对 DB 进行 AJAX request
以查找距离该坐标 1km 范围内的所有用户并获取结果。
我觉得我一点都不对。有人可以从 A-Z 解释该逻辑以及使用什么 services/scripts 来实现它吗? 谢谢!
我遇到了类似的问题,但我试图找到与用户位置最接近的特色广告,我写了这段代码:
$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
的代码Flow: 你应该首先获取用户选择的位置的经纬度作为他的home
地址,然后将其保存在数据库中。然后当有人试图找到 match
时,你可以根据他们的 longitude and latitude of home address
和 radius
计算边界,然后根据这些边界你可以查询数据库,或者你可以进一步缩小搜索范围,通过 gender, status, etc.