Vraisemblablement les éléments x et y dans vos données POINT dans votre geometry
la colonne est en degrés de latitude et de longitude.
Pour effectuer cette recherche efficacement dans MySQL, vous aurez besoin de quelques éléments.
- Une table MyISAM (ou MySQL version 5.7 et ultérieure et InnoDB ou MyISAM)
- Une qualification NOT NULL sur votre colonne de géométrie
- Un index spatial
ALTER TABLE flags ADD SPATIAL INDEX (coordinates)
- Code pour créer une représentation textuelle du rectangle que vous souhaitez rechercher
- Utilisation des fonctions GeomFromText et MBRContains / MBRWithin dans votre instruction SELECT.
Supposons que votre boîte lat/long soit un rectangle d'un degré centré sur Cathédrale de Winchester (51.0606, -1.3131) . Vous avez besoin d'une boîte englobante autour de ce point. Cette requête MySQL générera un LINESTRING (texte) pour une ligne passant en diagonale à travers cette boîte englobante.
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 requête vous donne ceci :
LINESTRING(50.5606 -1.8131,51.5606 -0.8131)
Vous pouvez également utiliser le traitement de chaîne dans un langage hôte pour créer un type de chaîne de texte similaire. Le format dont vous avez besoin est celui-ci.
LINESTRING(lat1 long1, lat2 long2)
Ensuite, vous pouvez l'utiliser pour rechercher votre table spatiale comme suit :
SELECT whatever, whatever
FROM flags
WHERE MBRContains(
GeomFromText( 'LINESTRING(50.5606 -1.8131,51.5606 -0.8131)' ),
flags.coordinates)
Cela exploitera l'index spatial et trouvera chaque rangée de flags
dont les coordonnées se trouvent dans la boîte englobante de cette ligne diagonale.
Voici quelques documentation .
Si vos flags
contient moins de quelques centaines de milliers de lignes, vous constaterez peut-être qu'une table ordinaire (pas une table spatiale) avec des colonnes de latitude et de longitude (types de données FLOAT, indexées) fonctionne aussi bien et est plus facile à développer et à déboguer.
J'ai écrit un tutoriel sur cette technique. http://www.plumislandmedia.net/mysql/haversine-mysql- emplacement-le-plus-proche/