У меня есть таблица, которая содержит события и местоположение с использованием MySQL POINT(X,Y) as geocodedLocation
, и я пытаюсь использовать поиск по радиусу по этим данным сейчас, я нашел, что должно было быть ответом здесь https://gis.stackexchange.com/questions/31628/find-points-within-a-distance-using-mysql. Я видел это раньше, и, видимо, это ответ от Google для использования Locations ServicesPHP MySQL Найти событие в пределах диапазона Lat/Lng
У меня есть 2 зоны, которые должны быть собирание события
Area 1 = `Array ([0] => 51.524074 [1] => -0.1005592)`
Area 2 = `Array ([0] => 53.818391 [1] => -1.4714507)`
У меня есть некоторые события
Event 1 `geocodedLocation` = POINT(-1.54907739999999, 53.8007554)
Event 2 `geocodedLocation` = POINT(-0.100559200000021, 51.524074)
Да, знаю, что POINT - это неправильный путь, но я не создал его, и мне просто нужно его использовать.
Теперь это вопрос я бегу
SELECT a.*
,(
3959 * acos(cos(radians(51.524074)) * cos(radians((
SELECT Y(`geocodedLocation`)
))) * cos(radians((
SELECT X(`geocodedLocation`)
)) - radians(- 0.1005592)) + sin(radians(51.524074)) * sin(radians((
SELECT Y(`geocodedLocation`)
))))
) AS distance
,COUNT(*) AS pagedAmount
FROM Activities a
HAVING distance < 10
ORDER BY a.startTime ASC
Как вы можете видеть, я использую расположение Area 1
, событие Event 2
на этом месте только немного более точным, но по какой-то причине запроса не дает результата Event 2
удалить COUNT (*) в качестве pagedAmound части и обмена выберите X и выберите Y, так как ваши значения точки являются наоборот, и вы хорошо идти! второе событие будет отображаться, когда расстояние больше 168 – Markus
, оно обратное. Я использую Y как Lat и X как долго. зачем удалять счетчик? –