Presumiblemente, los elementos x e y en sus datos de PUNTO en su geometry
la columna está en grados de latitud y longitud.
Para realizar esta búsqueda de manera eficiente en MySQL, necesitará algunas cosas.
- Una tabla MyISAM (o MySQL versión 5.7 y posterior e InnoDB o MyISAM)
- UNA calificación NOT NULL en su columna de geometría
- Un índice espacial
ALTER TABLE flags ADD SPATIAL INDEX (coordinates)
- Código para crear una representación textual del rectángulo que desea buscar
- Uso de las funciones GeomFromText y MBRContains / MBRWithin en su instrucción SELECT.
Suponga que su cuadro de latitud/longitud es un rectángulo de un grado de extensión centrado alrededor de Catedral de Winchester (51.0606, -1.3131) . Necesita un cuadro delimitador alrededor de ese punto. Esta consulta de MySQL generará un LINESTRING (texto) para una línea que cruza en diagonal ese cuadro delimitador.
SELECT
CONCAT('LINESTRING(',
latitude-0.5,' ',longitude-0.5,
',',
latitude+0.5 ,' ',longitude +0.5,
')') AS box
FROM (
SELECT 51.0606 AS latitude, -1.3131 AS longitude
) AS coord
La consulta te da esto:
LINESTRING(50.5606 -1.8131,51.5606 -0.8131)
También puede utilizar el procesamiento de cadenas en un idioma anfitrión para generar un tipo similar de cadena de texto. El formato que necesitas es este.
LINESTRING(lat1 long1, lat2 long2)
Luego puede usarlo para buscar en su tabla espacial de la siguiente manera:
SELECT whatever, whatever
FROM flags
WHERE MBRContains(
GeomFromText( 'LINESTRING(50.5606 -1.8131,51.5606 -0.8131)' ),
flags.coordinates)
Esto explotará el índice espacial y encontrará cada fila de flags
cuyas coordenadas se encuentran dentro del cuadro delimitador de esa línea diagonal.
Aquí hay algo de documentación .
Si tus flags
contiene menos de unos pocos cientos de miles de filas, es posible que una tabla normal (no una tabla espacial) con columnas de latitud y longitud (tipos de datos FLOAT, indexados) funcione igual de bien y sea más fácil de desarrollar y depurar.
He escrito un tutorial sobre esa técnica. http://www.plumislandmedia.net/mysql/haversine-mysql- ubicación-más-cercana/