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

Consultar valores do banco de dados com base na localização do usuário


Há uma pergunta que compara os recursos de vários bancos de dados espaciais, GIS:PostGIS/PostgreSQL vs. MySQL vs. SQL Server? , onde o Postgis sai um vencedor bastante claro sobre o MySQL.

Se você usa MySQL ou Postgis, seria muito melhor, se pudesse, armazenar seus valores de latitude e longitude como uma geometria/geografia (Point), como as funções que podem ser usadas para encontrar coisas próximas, ST_Distance , ST_Distance_Sphere e o operador <-> mais obscuro , consulte Encontre n vizinhos mais próximos para determinado ponto usando PostGIS? (por exemplo, uso) funcionam diretamente em colunas de geometria/geografia. Ainda mais importante, você pode adicionar um índice espacial , que essas funções precisam para funcionar corretamente, o que superará as pesquisas em colunas de latitude e longitude indexadas separadamente por uma grande margem (isso dependerá do tamanho da tabela, mas aumentará à medida que o tamanho da tabela aumentar),

No Postgis, você pode converter lat e lon em uma geometria com:
alter table mytable add column geom (Geometry, 4326);
update mytable set geom = ST_SetSRID(ST_MakePoint(lon, lat), 4326)
create index ix_spatial_mytable_geom on mytable using gist(geom);

Neste ponto, você poderá fazer consultas muito eficientes para encontrar pontos próximos a outros pontos, usando qualquer um dos exemplos dos links acima.

Você pode fazer coisas semelhantes no MySQL, embora ele não suporte um sistema de referência espacial, ou seja, o 4326 acima, que significa lat/lon, e não possui uma função ST_MakePoint, então você precisaria usar STGeomFromText e concatenar o lat/ lon juntos para fazer um PONTO. Ele também faz tudo em coordenadas planares, como Claudio e outros afirmaram, o que não é um problema com o Postgis.

Peço desculpas por uma resposta longa e um tanto tangencial, mas tendo feito várias migrações entre bancos de dados em grandes quantidades de dados (MySQL, SQL Server e Postgres/GIS) e cometido muitos erros no caminho, espero que você possa direção certa (e adicione um pouco de prova futura, se você quiser começar a usar alguma outra funcionalidade espacial, que o Postigs tem de sobra).