У меня есть запрос, который пытается найти объекты в пределах определенной геолокации, но результаты, которые он возвращает, немного ... странные.
I ранее опубликовал эту ветку, и сообщество помогло мне найти формулу, которая мне нужна: Запросы по долготе и широте в MySQL , но теперь запрос дает действительно дурацкие результаты.
Мои данные окружают город Сан-Франциско, у которого широта / долгота 37.780182, -122.517349
Запрос:
SELECT
id,
hike_title,
lat,
lng,
( 3959 * acos( cos( radians(37) )
* cos( radians( lat ) )
* cos( radians( lng ) - radians(37.780182) )
+ sin( radians(-122.517349) ) * sin( radians( lat ) )
)
) AS distance
FROM
my_awesome_table
HAVING
distance < 10000
ORDER BY
distance
LIMIT
0 , 50
Итак, как вы видите - даже если я сделаю радиус 10000, он все равно не будет ' Я много не нашел, поэтому мне интересно, отключен ли мой запрос. Некоторые из результатов, которые он возвращает, даже имеют 0,0 для широты / долготы, что является моим способом обозначить, что для этой записи нет широты / долготы.
Вот как должна выглядеть формула:
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;
Спасибо и извините за мучительно длинный вопрос! Между прочим, я использую MySQL.
Хммм,
Я просто попробовал с точным запросом, который вы задали, и он работал с 50% точностью. Вот образец набора данных:
lat lng
| 37.223465 | -122.090363 |
| 39.320980 | -111.093735 |
| 38.031715 | -84.495132 |
| 37.787144 | -122.493263 |
| 52.975361 | -1.458620 |
| 40.848557 | -111.906883 |
| 40.572498 | -111.859718 |
Итак, теперь запрос вернул все элементы, которые находились на расстоянии многих миль, но не элементы, которые находились на расстоянии менее 100 миль. Как будто этот предмет (37.787144, -122.493263) никогда не возвращался, хотя он находится всего в 50 милях от отправной точки. Вы случайно не знаете, почему?