Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Tính toán khoảng cách Haversine giữa hai điểm trong Laravel

Đây là cách tôi thực hiện nó. Tôi đã chọn đặt biệt danh cho truy vấn của mình trước thời hạn, bằng cách này, tôi có thể tận dụng lợi thế của Pagination . Hơn nữa, bạn cần phải chọn rõ ràng các cột mà bạn muốn lấy từ truy vấn. thêm chúng tại ->select() . Chẳng hạn như users.latitude, users.longitude, products.name hoặc bất cứ điều gì chúng có thể là.

Tôi đã tạo một phạm vi trông giống như sau:

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

Bạn có thể áp dụng phạm vi này cho bất kỳ mô hình nào có latitudelongitude .

Thay thế $location->latitude với latitude của bạn mà bạn muốn tìm kiếm và thay thế $location->longitude với kinh độ mà bạn muốn tìm kiếm.

Thay thế model.latitudemodel.longitude với các Mô hình bạn muốn tìm xung quanh $location dựa trên khoảng cách được xác định trong $radius .

Tôi biết bạn có một công thức Haversine đang hoạt động, nhưng nếu bạn cần Phân trang, bạn không thể sử dụng mã bạn đã cung cấp.

Hy vọng rằng điều này sẽ hữu ích.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Truy vấn SQL IF SELECT là null thì hãy thực hiện một truy vấn khác

  2. Cách viết câu lệnh IF ELSE trong truy vấn MySQL

  3. Tải DATA mà không có tệp (tức là trong bộ nhớ) có khả thi cho MySQL và Java không?

  4. Làm cách nào để tìm các hàng (ngày tháng) bị thiếu trong bảng mysql?

  5. Có cách nào để tự động tạo trình kích hoạt khi tạo bảng mới trong MySQL không?