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

Tìm kiếm phạm vi Vĩ độ / Kinh độ

Một số phiên bản của những gì bạn đang làm là đúng nhưng tôi nghĩ bạn có thể muốn sử dụng các kiểu hình học thực tế, đặc biệt nếu bạn đang sử dụng MyISAM và có thể tạo chỉ mục không gian R-Tree. Bạn có thể có các cột với bất kỳ loại được hỗ trợ nào (tức là point , polygon ) hoặc catchall geometry loại:

mysql> create table spatial_table (id int, my_spots point, my_polygons geometry);
Query OK, 0 rows affected (0.06 sec)

Sau đó, truy vấn và cập nhật với cú pháp WKT:

mysql> insert into spatial_table values (1, GeomFromText('POINT(1 1)'), GeomFromText('POLYGON((1 1, 2 2, 0 2, 1 1))'));
Query OK, 1 row affected (0.00 sec)

mysql> insert into spatial_table values (1, GeomFromText('POINT(10 10)'), GeomFromText('POLYGON((10 10, 20 20, 0 20, 10 10))') );
Query OK, 1 row affected (0.00 sec)

Sau đó, bạn có thể thực hiện truy vấn của mình (tức là vùng lân cận), đối với hình chữ nhật giới hạn tối thiểu của chuỗi dòng với các điểm kết thúc point1 =kinh độ - tăng, kinh - tăng, y =kinh độ + tăng, vĩ độ + tăng, tức là ở đây với + - của 1 :

mysql> select * from spatial_table where MBRContains(GeomFromText('LINESTRING(9 9, 11 11)'), my_spots);
+------+---------------------------+-----------------------------------------------------------------------------------+
| id   | my_spots                  | my_polygons                                                                       |
+------+---------------------------+-----------------------------------------------------------------------------------+
|    1 |              [email protected]      [email protected] |                    [email protected]      [email protected]      [email protected]      [email protected]              [email protected]      [email protected]      [email protected] |
+------+---------------------------+-----------------------------------------------------------------------------------+
1 row in set (0.00 sec)

Điều này sẽ hoạt động tốt hơn nhiều so với thực hiện số học trên một loạt các phao biểu thị kinh độ và vĩ độ. BTW tại vị trí của San Francisco, các hằng số sau hoạt động khá tốt để chuyển đổi giữa km và độ kinh độ và vĩ độ (tức là, nếu bạn muốn có bản đồ vuông rõ ràng về Santa Cruz):

lonf 0.01132221938
latf 0.0090215040

Tức là, (x + - 2 * lonf, y + - 2 * latf) cung cấp cho bạn $lat_floor có liên quan vv giá trị cho một cậu bé rộng 2km xung quanh điểm quan tâm của bạ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. Cách sử dụng NHibernate với cả máy chủ MySQL và máy chủ Microsoft SQL 2008

  2. Cách tránh lỗi hết bộ nhớ trong trình duyệt do quá nhiều lệnh gọi ajax

  3. .NET Core 2.0 với MySQL:Khóa được chỉ định quá dài; độ dài khóa tối đa là 3072 byte

  4. MySQL dual master

  5. Password_verify trong PHP