Haversine and Laravel

后端 未结 2 1394
春和景丽
春和景丽 2020-12-20 00:39

I\'m attempting to compare a users location (Sent via params in the URL) to offers.offer_lat and offers.offer_long (in my DB) by a distance argument (set in miles)

I

相关标签:
2条回答
  • 2020-12-20 00:48

    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.

    0 讨论(0)
  • 2020-12-20 01:04

    Haversine in Laravel works in this way:

                    Travel::select(
                        DB::raw("travels.*,
                              ( 6371 * acos( cos( radians($lat) ) *
                                cos( radians( lat ) )
                                * cos( radians( lon ) - radians($lng)
                                ) + sin( radians($lat) ) *
                                sin( radians( lat ) ) )
                              ) AS distance"))
                    ->orderBy('distance', 'asc')
                    ->get();
    

    and you will get a collection of points ordered by distance (nearest first)

    Was used travel model with params lat and lng. parameter distance is added by the raw query

    0 讨论(0)
提交回复
热议问题