-
Créez vos points en utilisant
Point
valeurs deGeometry
types de données dansMyISAM
table. Depuis Mysql 5.7.5,InnoDB
les tables prennent désormais également en chargeSPATIAL
indices. -
Créer un
SPATIAL
index sur ces points -
Utilisez
MBRContains()
pour trouver les valeurs :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)
, ou, en MySQL 5.1
et plus :
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
)
Cela sélectionnera approximativement tous les points dans la case (@lat +/- 10 km, @lon +/- 10km)
.
Ce n'est en fait pas une boîte, mais un rectangle sphérique :segment délimité par la latitude et la longitude de la sphère. Cela peut différer d'un simple rectangle sur la Franz Joseph Land , mais assez proche sur la plupart des lieux habités.
-
Appliquez un filtrage supplémentaire pour sélectionner tout ce qui se trouve à l'intérieur du cercle (pas le carré)
-
Appliquer éventuellement un filtrage fin supplémentaire pour tenir compte de la distance du grand cercle (pour les grandes distances)