Mysql
 sql >> база данни >  >> RDS >> Mysql

Търсене на координати за ширина/дължина на обхват

Някаква версия на това, което правите, е правилна, но мисля, че вероятно искате да използвате действителните типове геометрия, особено ако сте на MyISAM и можете да създадете пространствен индекс на R-Tree. Можете да имате колони с всеки поддържан тип (т.е. point , polygon ), или привличането geometry тип:

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

След това потърсете и актуализирайте с 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)

След това можете да направите своята заявка (т.е. околност) срещу минималния ограничаващ правоъгълник на ред с крайни точки point1 =дължина - приращение, lon - приращение, y =дължина + приращение, ширина + приращение, т.е. тук с +- от 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)

Това ще работи много по-добре, отколкото да правите аритметика върху куп плаващи числа, представляващи дължина и ширина. BTW около местоположението на Сан Франциско следните константи работят доста добре за преобразуване между км и градуси дължина и ширина (т.е., ако искате чисти квадратни карти на Санта Круз):

lonf 0.01132221938
latf 0.0090215040

Тоест (x +- 2*lonf, y +- 2*latf) ви дава съответния $lat_floor и т.н. стойности за момче с ширина 2 км около вашата точка на интерес.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tomcat6 не може да се свърже с MySql (драйверът не е получил никакви пакети от сървъра)

  2. Как трябва да напиша sql израз с условно умножение?

  3. Как да дам на всеки регистриран потребител свой собствен URL с помощта на PHP?

  4. Достъпът за нов потребител на mysql е отказан

  5. Застой чрез SELECT ... ЗА АКТУАЛИЗИРАНЕ в MySQL