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

Cách nhanh nhất để tìm khoảng cách giữa hai điểm vĩ độ / vĩ độ

  • Tạo điểm của bạn bằng cách sử dụng Point các giá trị của Geometry kiểu dữ liệu trong MyISAM bàn. Kể từ Mysql 5.7.5, InnoDB bảng hiện nay cũng hỗ trợ SPATIAL chỉ số.

  • Tạo một SPATIAL lập chỉ mục về những điểm này

  • Sử dụng MBRContains() để tìm các giá trị:

      SELECT  *
      FROM    table
      WHERE   MBRContains(LineFromText(CONCAT(
              '('
              , @lon + 10 / ( 111.1 / cos(RADIANS(@lat)))
              , ' '
              , @lat + 10 / 111.1
              , ','
              , @lon - 10 / ( 111.1 / cos(RADIANS(@lat)))
              , ' '
              , @lat - 10 / 111.1 
              , ')' )
              ,mypoint)
    

hoặc trong MySQL 5.1 trở lên:

    SELECT  *
    FROM    table
    WHERE   MBRContains
                    (
                    LineString
                            (
                            Point (
                                    @lon + 10 / ( 111.1 / COS(RADIANS(@lat))),
                                    @lat + 10 / 111.1
                                  ),
                            Point (
                                    @lon - 10 / ( 111.1 / COS(RADIANS(@lat))),
                                    @lat - 10 / 111.1
                                  ) 
                            ),
                    mypoint
                    )

Thao tác này sẽ chọn tất cả các điểm gần trong ô (@lat +/- 10 km, @lon +/- 10km) .

Đây thực sự không phải là một cái hộp, mà là một hình chữ nhật hình cầu:đoạn giới hạn kinh độ và vĩ độ của hình cầu. Hình này có thể khác với hình chữ nhật trơn trên Franz Joseph Land , nhưng khá gần với nó ở hầu hết những nơi có người ở.

  • Áp dụng bộ lọc bổ sung để chọn mọi thứ bên trong hình tròn (không phải hình vuông)

  • Có thể áp dụng bộ lọc tinh bổ sung để tính khoảng cách vòng tròn lớn (đối với khoảng cách lớn)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm thế nào để biết MySQLnd có phải là trình điều khiển đang hoạt động hay không?

  2. MySQL - chọn dữ liệu từ cơ sở dữ liệu giữa hai ngày

  3. Cách thiết lập MySQL Replication trong RHEL, Rocky và AlmaLinux

  4. Làm cách nào để thoát khỏi các từ dành riêng được sử dụng làm tên cột? MySQL / Tạo bảng

  5. Làm cách nào để kích hoạt Nhật ký truy vấn MySQL?