SQL-запрос для выполнения поиска по радиусу на основе широты и долготы

У нас есть таблица ресторанов, в которой для каждой строки есть данные по широте.

Нам нужно написать запрос, который выполняет поиск, чтобы найти все рестораны в пределах указанного радиуса, например. 1 миля, 5 миль и т. Д.

Для этого у нас есть следующий запрос:

***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 );

Таблица имеет около 23 тыс. Строк. Размер результирующего набора иногда бывает странным, например, для поиска в 5,4 мили он возвращает 880 строк, а для 5,5 миль - 21 тыс. строк.

Эта таблица содержит данные ресторана для nyc - поэтому реальное распределение не соответствует результирующему набору.

Вопрос: ТАК НИЧЕГО НЕПРАВИЛЬНО С этим запросом?

DB: MySQL, долгота: DECIMAL (10,6), широта: DECIMAL (10,6)

Ответы на вопрос(4)

Ваш ответ на вопрос