Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Wyszukaj zakres Współrzędne szerokości/długości geograficznej

Niektóre wersje tego, co robisz, są prawidłowe, ale myślę, że prawdopodobnie chcesz użyć rzeczywistych typów geometrii, zwłaszcza jeśli korzystasz z MyISAM i możesz utworzyć indeks przestrzenny R-Tree. Możesz mieć kolumny z dowolnym obsługiwanym typem (np. point , polygon ) lub catchall geometry typ:

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

Następnie zapytaj i zaktualizuj składnię 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)

Następnie możesz wykonać zapytanie (tj. sąsiedztwo) względem minimalnego prostokąta ograniczającego ciągu linii z punktami końcowymi point1 =długość geograficzna - przyrost, lon - przyrost, y =długość geograficzna + przyrost, szerokość geograficzna + przyrost, czyli tutaj z +- 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)

Będzie to działać znacznie lepiej niż wykonywanie arytmetyki na kilku pływakach reprezentujących długość i szerokość geograficzną. BTW w okolicach San Francisco następujące stałe działają całkiem dobrze przy przeliczaniu km na stopnie długości i szerokości geograficznej (tj. jeśli chcesz mieć czyste kwadratowe mapy Santa Cruz):

lonf 0.01132221938
latf 0.0090215040

Oznacza to, że (x +- 2*lonf, y +- 2*latf) daje odpowiednie $lat_floor itp. wartości dla chłopca o szerokości 2 km wokół twojego punktu zainteresowania.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Usuwanie wiersza z samoodwołującym się kluczem obcym

  2. „ER_PARSE_ERROR” w węźle mysql podczas wstawiania wielu wartości

  3. Sformatuj kod MySQL w ciągu PHP

  4. mysql dławi się niektórymi znakami, a mssql nie

  5. MySQL:Jak dowiedzieć się, które tabele odwołują się do konkretnej tabeli?