Você deve procurar a fórmula de Haversine, mas um bom começo pode ser:
- Criando um localizador de lojas com PHP, MySQL e Google Maps - Consulte a seção 'Encontrando locais com MySQL'
- Pesquisa geográfica/espacial com MySQL
Citando da primeira url:
Aqui está a instrução SQL que encontrará os 20 locais mais próximos que estão dentro de um raio de 25 milhas da coordenada 37, -122. Ele calcula a distância com base na latitude/longitude dessa linha e na latitude/longitude de destino e, em seguida, solicita apenas as linhas em que o valor da distância é menor que 25, 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.
SELECT
id,
( 3959
* acos( cos( radians(37) )
* cos( radians( lat ) )
* cos( radians( lng ) - radians(-122) )
+ sin( radians(37) )
* sin( radians( lat ) )
)
)
AS distance
FROM markers
HAVING distance < 25
ORDER BY distance
LIMIT 0 , 20;