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

Chọn điểm từ cơ sở dữ liệu bản đồ theo bán kính

Đôi khi tham số thành ACOS() có thể lớn hơn 1 một chút - nằm ngoài miền của hàm đó một chút - khi khoảng cách nhỏ. Có một công thức khoảng cách tốt hơn, do Vincenty. Nó sử dụng ATAN2(y,x) chứ không phải là ACOS() chức năng và do đó ổn định hơn về mặt số học.

Đây là nó.

DEGREES(
    ATAN2(
      SQRT(
        POW(COS(RADIANS(lat2))*SIN(RADIANS(lon2-lon1)),2) +
        POW(COS(RADIANS(lat1))*SIN(RADIANS(lat2)) -
             (SIN(RADIANS(lat1))*COS(RADIANS(lat2)) *
              COS(RADIANS(lon2-lon1))) ,2)),
      SIN(RADIANS(lat1))*SIN(RADIANS(lat2)) +
      COS(RADIANS(lat1))*COS(RADIANS(lat2))*COS(RADIANS(lon2-lon1))))

Hàm này trả về kết quả của nó theo độ. Có 111,045 km trong một mức độ. 60 hải lý. 69 dặm theo quy chế. Vì vậy, hãy nhân kết quả với một trong những số đó để có được khoảng cách. Có một bản ghi đầy đủ hơn, bao gồm định nghĩa hàm được lưu trữ cho MySQL, tại đây .

Một giải pháp khác là sử dụng ISNULL(ACOS(formula), 0.0)




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách tính toán trung bình động trong MySQL

  2. MySQL &PHP:Tìm kiếm nhiều từ khóa

  3. MYSQL Tạo bảng với giá trị mặc định (biểu thức) cho một cột

  4. Chạy các tệp MySQL * .sql trong PHP

  5. Làm thế nào để chọn các danh mục con từ danh mục đã chọn bằng cách sử dụng một hàm lồng nhau trong PHP?