sql >> Databáze >  >> RDS >> Mysql

Vyhledejte rozsah souřadnic zeměpisné šířky/délky

Některá verze toho, co děláte, je správná, ale myslím, že pravděpodobně budete chtít použít skutečné typy geometrie, zvláště pokud používáte MyISAM a můžete vytvořit prostorový index R-Tree. Můžete mít sloupce s jakýmkoli podporovaným typem (tj. point , polygon ), nebo geometry typ:

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

Poté se dotazujte a aktualizujte syntaxí 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)

Poté můžete provést svůj dotaz (tj. okolí) proti minimálnímu ohraničujícímu obdélníku čáry s koncovými body bod1 =zeměpisná délka - přírůstek, délka - přírůstek, y =zeměpisná délka + přírůstek, zeměpisná šířka + přírůstek, tj. zde s +- 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)

To bude fungovat mnohem lépe než aritmetika na hromadě plováků představujících zeměpisnou délku a šířku. BTW přibližně v místě San Francisca následující konstanty docela dobře fungují pro převod mezi km a stupni zeměpisné délky a šířky (tj. pokud chcete čisté čtvercové mapy Santa Cruz):

lonf 0.01132221938
latf 0.0090215040

To znamená, že (x +- 2*lonf, y +- 2*latf) vám dává relevantní $lat_floor atd. hodnoty pro chlapce o šířce 2 km kolem vašeho bodu zájmu.



  1. Získejte všechny děti podle rodičů v dotazu mysql

  2. PHP PDO načte null

  3. Jak odečíst oprávnění v MySQL

  4. Jak vypočítat dny mezi dvěma daty v PHP?