sql >> Database >  >> RDS >> Mysql

Zoek naar bereik Breedtegraad/Lengtegraad coördinaten

Een versie van wat je doet is juist, maar ik denk dat je waarschijnlijk de werkelijke typen geometrie wilt gebruiken, vooral als je op MyISAM zit en een ruimtelijke index van R-Tree kunt maken. U kunt kolommen hebben met elk ondersteund type (bijv. point , polygon ), of de catchall geometry typ:

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

Vraag en update vervolgens met de WKT-syntaxis:

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)

U kunt dan uw query uitvoeren (dwz omgeving), tegen de minimale begrenzende rechthoek van een lijnstring met eindpunten point1 =longitude - increment, lon - increment, y =longitude + increment, latitude + increment, dwz hier met een +- van 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)

Dit zal veel beter presteren dan rekenen op een aantal drijvers die lengte- en breedtegraad vertegenwoordigen. Tussen haakjes, ongeveer op de locatie van San Francisco werken de volgende constanten redelijk goed voor het converteren tussen km en graden lengte- en breedtegraad (dwz als je schone vierkante kaarten van Santa Cruz wilt):

lonf 0.01132221938
latf 0.0090215040

Dat wil zeggen, (x +- 2*lonf, y +- 2*latf) geeft u de relevante $lat_floor enz.-waarden voor een jongen van 2 km breed rond uw bezienswaardigheid.



  1. Hoe een enkele rij te selecteren a 100 miljoen x

  2. Converteer BufferedInputStream naar afbeelding

  3. echo iets uit MySQL-database

  4. Bezetten char / varchar / text / longtext-kolommen in MySQL de volledige grootte in het bestandssysteem, zelfs voor gedeeltelijk gevulde cellen?