Суть вопроса в чем , у нас есть массив точек координат(маршрут пользователя в формате Point(lat, lng)), и нужно забрать из бд сохраненные точки которые лежат недалеко от нашего маршрута (условно 100м).
в бд точки имеют поля (lat,lng, name...).
Забрать точки недалеко от одной не проблема делал так(
"SELECT
*,
(
6371 *
acos(cos(radians($lat)) *
cos(radians(dots.lat)) *
cos(radians(dots.lng) -
radians($lng)) +
sin(radians($lat)) *
sin(radians(dots.lat)))
) AS distance,
FROM dots
HAVING distance < 0.1
ORDER BY distance LIMIT 0, 20
;"
)
но в стал вопрос как забрать много точек сразу одним запросом?
единственное что пришло пока что в голову , это делать выборку по квадрату
кр точки - точки нашего маршрута
зел точки - нужные из бд
прямоугольник собственно область выборки
условно как здесь. искать верхние и нижние точки , и делать выборку точек которые подходят.
только вопрос как определить углы квадрата для выборки и как написать саму выборку?
или может есть какой-то способ эффективнее и точнее ?
буду благодарен любой помощи