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

Truy vấn giá trị cơ sở dữ liệu dựa trên vị trí của người dùng

Có một câu hỏi so sánh khả năng của các cơ sở dữ liệu không gian khác nhau, GIS:PostGIS / PostgreSQL so với MySql so với SQL Server? , nơi Postgis trở thành người chiến thắng khá rõ ràng so với MySQL.

Cho dù bạn sử dụng MySQL hay Postgis, bạn sẽ tốt hơn nhiều, nếu có thể, lưu trữ các giá trị kinh độ và vĩ độ của bạn dưới dạng hình học / địa lý (Điểm), dưới dạng các hàm có thể được sử dụng để tìm những thứ lân cận, ST_Distance , ST_Distance_Sphere <-> toán tử khó hiểu hơn , xem Tìm n Hàng xóm gần nhất cho đã cho điểm bằng cách sử dụng PostGIS? (ví dụ:sử dụng) hoạt động trực tiếp trên các cột hình học / địa lý. Quan trọng hơn nữa, bạn có thể thêm chỉ mục không gian , những chức năng này cần hoạt động bình thường, sẽ hoạt động tốt hơn các tìm kiếm trên các cột kinh độ và vĩ độ được lập chỉ mục riêng bởi một lề lớn (điều này sẽ phụ thuộc vào kích thước bảng, nhưng sẽ phát triển khi kích thước bảng tăng lên),

Trong Postgis, bạn có thể chuyển đổi vĩ độ và kinh độ sang dạng hình học với:

alter table mytable add column geom (Geometry, 4326);
update mytable set geom = ST_SetSRID(ST_MakePoint(lon, lat), 4326)
create index ix_spatial_mytable_geom on mytable using gist(geom);

Tại thời điểm này, bạn sẽ có thể truy vấn rất hiệu quả để tìm các điểm gần các điểm khác, bằng cách sử dụng bất kỳ ví dụ nào trong các liên kết ở trên.

Bạn có thể làm những điều tương tự trong MySQL, mặc dù, nó không hỗ trợ hệ thống tham chiếu không gian, tức là 4326 ở trên, có nghĩa là vĩ độ / kinh độ và nó thiếu chức năng ST_MakePoint, vì vậy bạn sẽ cần sử dụng STGeomFromText và nối vĩ độ / lon nhau để làm một ĐIỂM. Nó cũng thực hiện mọi thứ ở tọa độ phẳng, như Claudio và những người khác đã nêu, đây không phải là vấn đề với Postgis.

Tôi xin lỗi vì một câu trả lời hơi dài và hơi phức tạp, nhưng đã thực hiện nhiều lần di chuyển khác nhau giữa các cơ sở dữ liệu trên một lượng lớn dữ liệu (MySQL, SQL Server và Postgres / GIS) và đã mắc nhiều lỗi trong quá trình thực hiện, tôi hy vọng tôi có thể giúp bạn vượt qua đúng hướng (và thêm một chút kiểm chứng trong tương lai, nếu bạn muốn bắt đầu sử dụng một số chức năng không gian khác mà Postigs có trong tay).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sắp xếp cây con trong cấu trúc dữ liệu phân cấp bảng đóng

  2. Nhiều câu lệnh chèn / cập nhật bên trong trình kích hoạt?

  3. Một tập lệnh để thay đổi tất cả các bảng và trường thành đối chiếu utf-8-bin trong MYSQL

  4. mysql auto_increment bằng 5?

  5. Làm thế nào để sử dụng OdbcParameter cho MySQL?