Consulta SQL para executar a pesquisa de raio com base na latitude longitude

Temos uma mesa de restaurante com dados de latitude longa para cada linha.

Precisamos escrever uma consulta que realize uma pesquisa para encontrar todos os restaurantes dentro do raio fornecido. 1 milha, 5 milhas etc.

Nós temos a seguinte consulta para este propósito:

***Parameters***

Longitude: -74.008680
Latitude: 40.711676
Radius: 1 mile

***Query***

SELECT *
FROM restaurant
WHERE (
POW( ( 69.1 * ( Longitude - -74.008680 ) * cos( 40.711676 / 57.3 ) ) , 2 ) + POW( ( 69.1 * ( Latitude - 40.711676 ) ) , 2 )
) < ( 1 *1 );

A tabela tem cerca de 23k linhas. O tamanho do conjunto de resultados é estranho às vezes, por exemplo. para uma pesquisa de 5,4 milhas, devolve 880 linhas e, para 5,5 milhas, devolve 21k linhas.

Esta tabela contém dados do restaurante para nyc - portanto, a distribuição real não é conforme o conjunto de resultados.

Pergunta: Existe alguma coisa errada com esta consulta?

DB: MySQL, Longitude: DECIMAL (10,6), Latitude: DECIMAL (10,6)

questionAnswers(4)

yourAnswerToTheQuestion