У меня есть существующий SQL-запрос, который использует lat, lng
и формулу большего круга для расчета всех записей в радиусе 1 км вокруг определенного списка.Поиск расстояния вокруг точки (с использованием MBRcontains)
Это хорошо работает, но я пытаюсь ускорить его с использованием расширения MySQL Geospatial и использования прямоугольника MBR вместо круга, который подходит мне.
Задача: Новый код, который использует MBRcontains
, возвращает нулевые результаты! Я пропустил что-то в SQL-запросе?
Lat: 42.353443
Lng: -71.076584
Старый SQL Query
SELECT `price`, `city`, `state` FROM (`listings`)
WHERE `bedroom` = '1'
AND `post_timestamp` BETWEEN DATE_SUB(NOW(), INTERVAL 10 DAY) AND DATE_SUB(NOW(), INTERVAL 0 DAY)
AND (6371 * acos(cos(radians(listings.lat)) * cos(radians(42.353443)) * cos(radians(-71.076584) - radians(listings.lng)) + sin(radians(listings.lat)) * sin(radians(42.353443)))) < 1
LIMIT 100
Новый SQL Query (Formula)
SELECT `price`, `city`, `state` FROM (`listings`)
WHERE `bedroom` = '1'
AND `post_timestamp` BETWEEN DATE_SUB(NOW(), INTERVAL 10 DAY) AND DATE_SUB(NOW(), INTERVAL 0 DAY)
AND MBRContains(
LineString(Point(42.353443 + 1/(111.1/COS(RADIANS(-71.076584))), 42.353443 + 1/111.1),
Point(-71.076584 - 1/(111.1/COS(RADIANS(42.353443))), 42.353443 - 1/111.1))
, p)
)
LIMIT 100