Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Obliczanie odległości Haversine między dwoma punktami w Laravel

To była moja realizacja. Wybrałem aliasowanie mojego zapytania z wyprzedzeniem, w ten sposób mogę skorzystać z Pagination . Ponadto musisz wyraźnie wybrać kolumny, które chcesz pobrać z zapytania. dodaj je w ->select() . Na przykład users.latitude, users.longitude, products.name , czy cokolwiek to może być.

Stworzyłem zakres, który wygląda mniej więcej tak:

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]);
}

Możesz zastosować ten zakres do dowolnego modelu z latitude ilongitude .

Zastąp $location->latitude ze swoją latitude które chcesz wyszukać, i zastąp $location->longitude z długością geograficzną, według której chcesz wyszukiwać.

Zastąp model.latitude i model.longitude z Modelami, które chcesz znaleźć w okolicy $location na podstawie odległości zdefiniowanej w $radius .

Wiem, że masz działającą formułę Haversine, ale jeśli potrzebujesz stronicowania, nie możesz użyć dostarczonego kodu.

Mam nadzieję, że to pomoże.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Połączenie wewnętrzne laravel 5.2

  2. Czy jest jakaś szkoda w resetowaniu automatycznego przyrostu?

  3. kolumna json a wiele kolumn

  4. Aplikacja Xamarin dla systemu Android z internetową bazą danych MySql/Sql

  5. Jak dołączyć zmienną PHP do instrukcji MySQL?