Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Perhitungan jarak Haversine antara dua titik di Laravel

Ini adalah implementasi saya. Saya telah memilih untuk membuat alias kueri saya sebelumnya, dengan cara ini saya dapat memanfaatkan Pagination . Selanjutnya, Anda perlu secara eksplisit memilih kolom yang ingin Anda ambil dari kueri. tambahkan di ->select() . Seperti users.latitude, users.longitude, products.name , atau apa pun itu.

Saya telah membuat ruang lingkup yang terlihat seperti ini:

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

Anda dapat menerapkan cakupan ini ke model apa pun dengan latitude danlongitude .

Ganti $location->latitude dengan latitude yang ingin Anda cari, dan ganti $location->longitude dengan garis bujur yang ingin Anda telusuri.

Ganti model.latitude dan model.longitude dengan Model yang ingin Anda temukan di sekitar $location berdasarkan jarak yang ditentukan dalam $radius .

Saya tahu Anda memiliki rumus Haversine yang berfungsi, tetapi jika Anda perlu membuat Paginate, Anda tidak dapat menggunakan kode yang Anda berikan.

Semoga membantu.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara mengimpor dump mysql sambil mengganti nama beberapa tabel/kolom dan tidak mengimpor yang lain sama sekali?

  2. Menyimpan datetime sebagai UTC di PHP/MySQL

  3. MySQL menghapus semua baris di mana id lebih besar dari angka yang diberikan

  4. Menggunakan aplikasi klien MySQL

  5. #1064 -Anda memiliki kesalahan dalam sintaks SQL Anda; periksa manual yang sesuai dengan versi server MySQL Anda