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

Chọn tất cả các điểm không gian địa lý bên trong một hộp giới hạn

Có lẽ là các mục x và y trong dữ liệu POINT của bạn trong geometry của bạn cột theo độ vĩ độ và kinh độ.

Để thực hiện việc tra cứu này một cách hiệu quả trong MySQL, bạn sẽ cần một số thứ.

  • Một bảng MyISAM (hoặc MySQL Phiên bản 5.7 trở lên và InnoDB hoặc MyISAM)
  • Chứng chỉ KHÔNG ĐẦY ĐỦ về cột hình học của bạn
  • Chỉ mục không gian ALTER TABLE flags ADD SPATIAL INDEX (coordinates)
  • Mã để tạo bản trình bày dạng văn bản của hình chữ nhật bạn muốn tìm kiếm
  • Sử dụng các hàm GeomFromText và MBRContains / MBRWithin trong câu lệnh SELECT của bạn.

Giả sử hộp vĩ độ / kinh độ của bạn là một hình chữ nhật có góc nghiêng một độ với tâm là Nhà thờ Winchester (51.0606, -1.3131) . Bạn cần một hộp giới hạn xung quanh điểm đó. Truy vấn MySQL này sẽ tạo ra một LINESTRING (văn bản) cho một dòng đi theo đường chéo qua hộp giới hạn đó.

SELECT 
       CONCAT('LINESTRING(',
              latitude-0.5,' ',longitude-0.5,
              ',', 
              latitude+0.5 ,' ',longitude +0.5,
              ')') AS box
   FROM (
      SELECT 51.0606 AS latitude, -1.3131 AS longitude
   ) AS coord

Truy vấn giúp bạn có được điều này:

LINESTRING(50.5606 -1.8131,51.5606 -0.8131)

Bạn cũng có thể sử dụng xử lý chuỗi bằng ngôn ngữ máy chủ để tạo ra một loại chuỗi văn bản tương tự. Định dạng bạn cần là cái này.

 LINESTRING(lat1 long1, lat2 long2) 

Sau đó, bạn có thể sử dụng nó để tìm kiếm bảng không gian của mình như sau:

SELECT whatever, whatever 
  FROM flags
 WHERE MBRContains(
        GeomFromText( 'LINESTRING(50.5606 -1.8131,51.5606 -0.8131)' ),
        flags.coordinates)     

Thao tác này sẽ khai thác chỉ mục không gian và tìm mọi hàng của flags có tọa độ nằm trong hộp giới hạn của đường chéo đó.

Đây là một số tài liệu .

Nếu flags của bạn bảng chứa ít hơn vài trăm nghìn hàng, bạn có thể thấy rằng một bảng thông thường (không phải bảng không gian) với các cột kinh độ và vĩ độ (kiểu dữ liệu FLOAT, được lập chỉ mục) cũng hoạt động tốt và dễ phát triển và gỡ lỗi hơn.

Tôi đã viết một bài hướng dẫn về kỹ thuật đó. http://www.plumislandmedia.net/mysql/haversine-mysql- địa điểm gần nhất /



  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 hiển thị đối chiếu kết nối của bạn trong MySQL

  2. Biến mảng trong mysql

  3. Làm cách nào để so khớp mờ email hoặc điện thoại bằng Elasticsearch?

  4. Các ký tự có dấu trong bảng mySQL

  5. Cách liên kết dữ liệu với thời gian chạy trình xem báo cáo