Mysql
 sql >> Base de données >  >> RDS >> Mysql

Configuration de la table de latitude et de longitude MySQL

Vous devez stocker les points dans une seule colonne de type de données Point que vous pouvez indexer avec un SPATIAL index (si votre type de table est MyISAM ):

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

Cela améliorera considérablement la vitesse des requêtes telles que "trouver tout dans un rayon donné".

Notez qu'il est préférable d'utiliser simplement TM coordonnées métriques (est et nord) au lieu de polaires (latitude et longitude). Pour les petits rayons, ils sont suffisamment précis et les calculs sont grandement simplifiés. Si tous vos points se trouvent dans un hémisphère et sont éloignés des pôles, vous pouvez utiliser un seul méridien central.

Vous pouvez toujours utiliser les coordonnées polaires bien sûr, mais les formules pour calculer le MBR et la distance sera plus complexe.