Eu tenho uma tabela mySQL com nome de usuário, latitude e longitude do usuário. Gostaria de obter uma lista de usuários que estão dentro do círculo ou quadrado de uma determinada latitude e longitude com determinada distância. Por exemplo, minha entrada Lat = 78.3232 e Long = 65.3234 e distância = 30 milhas. Gostaria de obter a lista de usuários que estão a 48 km do ponto 78.3232 e 65.3234. É possível resolver isso com uma única consulta? Ou você pode me dar uma dica para começar a resolver esta consulta? Eu sou novo nas informações geográficas.
20
Respostas:
A instrução SQL que encontrará os 20 locais mais próximos que estão dentro de um raio de 30 milhas para a coordenada 78,3232, 65,3234. Ele calcula a distância com base na latitude / longitude dessa linha e na latitude / longitude alvo e solicita apenas linhas onde o valor da distância é inferior a 48 quilômetros, ordena toda a consulta por distância e a limita a 20 resultados. Para pesquisar por quilômetros em vez de milhas, substitua 3959 por 6371.
Isso está usando a API do Google Maps v3 com um back-end do MySQL que você já possui.
https://developers.google.com/maps/articles/phpsqlsearch_v3#findnearsql
fonte
A resposta do Mapperz é inválida. O seio deve ser calculado a partir da latitude e NÃO da longitude. Portanto, a instrução SQL correta é:
fonte
Pode ser a base para criar uma função .. para que você possa reutilizá-la em outras áreas. Também tornaria sua consulta um pouco mais limpa ... Pelo menos esses são meus 2 centavos.
fonte
Aqui está minha variante de consulta, parece um pouco mais fácil ( http://dexxtr.com/post/83498801191/how-to-determine-point-inside-circle-using-mysql )
fonte