Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Configuração da tabela de latitude e longitude do MySQL


Você deve armazenar os pontos em uma única coluna do tipo de dados Point que você pode indexar com um SPATIAL index (se o seu tipo de tabela for 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

Isso melhorará drasticamente a velocidade de consultas como "encontrar tudo dentro de um determinado raio".

Observe que é melhor usar TM simples coordenadas métricas (leste e norte) em vez de polares (latitude e longitude). Para raios pequenos, eles são precisos o suficiente e os cálculos são bastante simplificados. Se todos os seus pontos estiverem em um hemisfério e longe dos pólos, você pode usar um único meridiano central.

Você ainda pode usar coordenadas polares, é claro, mas as fórmulas para calcular o MBR e a distância será mais complexa.