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.