Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Select an option

  • Save be-geeky/3fe571774158bf16f23e2ca07fe91631 to your computer and use it in GitHub Desktop.

Select an option

Save be-geeky/3fe571774158bf16f23e2ca07fe91631 to your computer and use it in GitHub Desktop.

Revisions

  1. Steven Maguire revised this gist Aug 23, 2014. 1 changed file with 2 additions and 0 deletions.
    2 changes: 2 additions & 0 deletions laravel-nearby-locations-query-scope.php
    Original file line number Diff line number Diff line change
    @@ -1,3 +1,5 @@
    <?php

    /**
    * Query builder scope to list neighboring locations
    * within a given distance from a given location
  2. Steven Maguire renamed this gist Aug 23, 2014. 1 changed file with 0 additions and 0 deletions.
  3. Steven Maguire revised this gist Aug 12, 2014. 1 changed file with 28 additions and 28 deletions.
    56 changes: 28 additions & 28 deletions laravel-nearby-locations-query-scope
    Original file line number Diff line number Diff line change
    @@ -1,28 +1,28 @@
    /**
    * Query builder scope to list neighboring locations
    * within a given distance from a given location
    *
    * @param Illuminate\Database\Query\Builder $query Query builder instance
    * @param mixed $lat Lattitude of given location
    * @param mixed $lng Longitude of given location
    * @param integer $radius Optional distance
    * @param string $unit Optional unit
    *
    * @return Illuminate\Database\Query\Builder Modified query builder
    */
    public function scopeDistance($query, $lat, $lng, $radius = 100, $unit = "km")
    {
    $unit = ($unit === "km") ? 6378.10 : 3963.17;
    $lat = (float) $lat;
    $lng = (float) $lng;
    $radius = (double) $radius;
    return $query->having('distance','<=',$radius)
    ->select(DB::raw("*,
    ($unit * ACOS(COS(RADIANS($lat))
    * COS(RADIANS(latitude))
    * COS(RADIANS($lng) - RADIANS(longitude))
    + SIN(RADIANS($lat))
    * SIN(RADIANS(latitude)))) AS distance")
    )->orderBy('distance','asc');
    }
    /**
    * Query builder scope to list neighboring locations
    * within a given distance from a given location
    *
    * @param Illuminate\Database\Query\Builder $query Query builder instance
    * @param mixed $lat Lattitude of given location
    * @param mixed $lng Longitude of given location
    * @param integer $radius Optional distance
    * @param string $unit Optional unit
    *
    * @return Illuminate\Database\Query\Builder Modified query builder
    */
    public function scopeDistance($query, $lat, $lng, $radius = 100, $unit = "km")
    {

    $unit = ($unit === "km") ? 6378.10 : 3963.17;
    $lat = (float) $lat;
    $lng = (float) $lng;
    $radius = (double) $radius;
    return $query->having('distance','<=',$radius)
    ->select(DB::raw("*,
    ($unit * ACOS(COS(RADIANS($lat))
    * COS(RADIANS(latitude))
    * COS(RADIANS($lng) - RADIANS(longitude))
    + SIN(RADIANS($lat))
    * SIN(RADIANS(latitude)))) AS distance")
    )->orderBy('distance','asc');
    }
  4. Steven Maguire created this gist Aug 6, 2014.
    28 changes: 28 additions & 0 deletions laravel-nearby-locations-query-scope
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,28 @@
    /**
    * Query builder scope to list neighboring locations
    * within a given distance from a given location
    *
    * @param Illuminate\Database\Query\Builder $query Query builder instance
    * @param mixed $lat Lattitude of given location
    * @param mixed $lng Longitude of given location
    * @param integer $radius Optional distance
    * @param string $unit Optional unit
    *
    * @return Illuminate\Database\Query\Builder Modified query builder
    */
    public function scopeDistance($query, $lat, $lng, $radius = 100, $unit = "km")
    {

    $unit = ($unit === "km") ? 6378.10 : 3963.17;
    $lat = (float) $lat;
    $lng = (float) $lng;
    $radius = (double) $radius;
    return $query->having('distance','<=',$radius)
    ->select(DB::raw("*,
    ($unit * ACOS(COS(RADIANS($lat))
    * COS(RADIANS(latitude))
    * COS(RADIANS($lng) - RADIANS(longitude))
    + SIN(RADIANS($lat))
    * SIN(RADIANS(latitude)))) AS distance")
    )->orderBy('distance','asc');
    }