-
Crea tus puntos usando
Point
valores deGeometry
tipos de datos enMyISAM
mesa. A partir de Mysql 5.7.5,InnoDB
las tablas ahora también son compatibles conSPATIAL
índices. -
Crear un
SPATIAL
índice sobre estos puntos -
Usa
MBRContains()
para encontrar los valores:SELECT * FROM table WHERE MBRContains(LineFromText(CONCAT( '(' , @lon + 10 / ( 111.1 / cos(RADIANS(@lat))) , ' ' , @lat + 10 / 111.1 , ',' , @lon - 10 / ( 111.1 / cos(RADIANS(@lat))) , ' ' , @lat - 10 / 111.1 , ')' ) ,mypoint)
o, en MySQL 5.1
y superiores:
SELECT *
FROM table
WHERE MBRContains
(
LineString
(
Point (
@lon + 10 / ( 111.1 / COS(RADIANS(@lat))),
@lat + 10 / 111.1
),
Point (
@lon - 10 / ( 111.1 / COS(RADIANS(@lat))),
@lat - 10 / 111.1
)
),
mypoint
)
Esto seleccionará todos los puntos aproximadamente dentro del cuadro (@lat +/- 10 km, @lon +/- 10km)
.
En realidad, esto no es una caja, sino un rectángulo esférico:segmento de la esfera con límites de latitud y longitud. Esto puede diferir de un rectángulo simple en Franz Joseph Land , pero bastante cerca de él en la mayoría de los lugares habitados.
-
Aplicar filtrado adicional para seleccionar todo lo que está dentro del círculo (no el cuadrado)
-
Posiblemente, aplique un filtrado fino adicional para tener en cuenta la distancia del círculo grande (para distancias grandes)