So you don't need all the bloat that is in that gist, instead, you can use the following formulae:
public function get_offers_near($latitude, $longitude, $radius = 1){
$offers = Offer::select('offers.*')
->selectRaw('( 3959 * acos( cos( radians(?) ) *
cos( radians( offer_lat ) )
* cos( radians( offer_long ) - radians(?)
) + sin( radians(?) ) *
sin( radians( offer_lat ) ) )
) AS distance', [$latitude, $longitude, $latitude])
->havingRaw("distance < ?", [$radius])
->get();
return $offers;
}
This assumes that you pass in the latitude
and longitude
from your user. Also, if you don't want the radius to be 1, you can pass in the 3rd argument and provide a custom radius.
And of course, we're assuming that this is for a model of Offer
. Change your naming convention where required.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…