Vous pouvez utiliser l'extension spatiale mysql et enregistrer la latitude et la longitude en tant que type de données de point et en faire un index spatial. De cette façon, vous pouvez réorganiser les coordonnées le long d'une courbe et réduire la dimension et conserver les informations spatiales. Vous pouvez utiliser l'index spatial comme cadre de délimitation pour filtrer la requête, puis utiliser la formule harvesine pour sélectionner le résultat optimal. Votre boîte englobante doit être plus grande que le rayon du grand cercle. Mysql utilise un rtree avec un index spatial et mon exemple concernait une courbe z ou une courbe hilbert :https://softwareengineering.stackexchange.com/questions/113256/what-is-the-difference-between-btree-and-rtree-indexing .Ensuite, vous pouvez insérer une géocoordonnée directement dans une colonne de points :http://dev.mysql.com/doc/refman/5.0/en/creating-spatial-values.html . Ou vous pouvez utiliser un type de données géométrique :http:// markmaunder.com/2009/10/10/mysql-gis-extensions-quick-start/ . Ensuite, vous pouvez utiliser la fonction MBRcontains comme ceci : http://dev.mysql.com/doc/refman/4.1/en/relations-on-geometry-mbr.html ou toute autre fonction :http://dev.mysql.com/doc/refman/5.5/en/functions-for-testing-spatial-relations-between-geometric-objects.html . Par conséquent, vous avez besoin d'une boîte englobante.Voici quelques exemples :
- Stockage Lat Valeurs Lng dans MySQL utilisant le type de point spatial
- https://gis.stackexchange.com/questions/28333/how-to-speed-up-this-simple-mysql-points-in-the-box-query
Voici un exemple simple avec le type de données point :
CREATE SPATIAL INDEX sx_place_location ON place (location)
SELECT * FROM mytable
WHERE MBRContains
(
LineString
(
Point($x - $radius, $y - $radius),
Point($x + $radius, $y + $radius)
)
location
)
AND Distance(Point($x, $y), location) <= $radius
Je ne sais pas si cela fonctionne car il utilise une variable de rayon avec une fonction de boîte englobante. Il me semble que MBRwithin est un peu plus simple, car il n'a besoin d'aucun argument :Mysql :Optimisation de la recherche de super nœuds dans l'arborescence d'ensembles imbriqués .