Mysql
 sql >> база данни >  >> RDS >> Mysql

Изчисляване на разстоянието Haversine между две точки в Laravel

Това беше моето изпълнение. Избрах да направя псевдоним на заявката си преди време, по този начин мога да се възползвам от Pagination . Освен това трябва изрично да изберете колоните, които искате да извлечете от заявката. добавете ги в ->select() . Като например users.latitude, users.longitude, products.name , или каквито и да са те.

Създадох обхват, който изглежда нещо подобно:

public function scopeIsWithinMaxDistance($query, $location, $radius = 25) {

     $haversine = "(6371 * acos(cos(radians($location->latitude)) 
                     * cos(radians(model.latitude)) 
                     * cos(radians(model.longitude) 
                     - radians($location->longitude)) 
                     + sin(radians($location->latitude)) 
                     * sin(radians(model.latitude))))";
     return $query
        ->select() //pick the columns you want here.
        ->selectRaw("{$haversine} AS distance")
        ->whereRaw("{$haversine} < ?", [$radius]);
}

Можете да приложите този обхват към всеки модел с latitude иlongitude .

Заменете $location->latitude с вашата latitude по които искате да търсите, и заменете $location->longitude с географската дължина, срещу която искате да търсите.

Заменете model.latitude и model.longitude с моделите, които искате да намерите около $location въз основа на разстоянието, дефинирано в $radius .

Знам, че имате функционираща формула на Haversine, но ако трябва да разделите на страници, не можете да използвате кода, който сте предоставили.

Надяваме се това да помогне.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Функция MySQL CEILING() – закръгля до най-близкото цяло число

  2. По-добре да използвате '0000-00-00 00:00:00' с нулева дата или NULL в MySQL?

  3. Премахнете Mysql реда след определено време

  4. Как да получите последния запис във всяка група в MySQL

  5. GROUP_CONCAT ПОРЪЧАЙ ОТ