Задать вопрос
ShelestovAnt
@ShelestovAnt
Верстаю и программирую

Поиск ближайших точек в mysql?

Всем привет.

Народ, подскажите пожалуйста как можно найти ближайшие точки на карте в заданном радиусе средствами mysql?

Есть таблица в бд станций метро с полем типа point.
Есть входные координаты lat, lng и радиус radius в метрах.

Вот что хочу сделать: joxi.ru/8AnoWo4FjDkezr
То что на скрине реализовано через формулу с синусами и косинусами без поля point(в интернете и тут ее легко найти), но я хочу попробовать сделать именно с использованием поля point.

Пытался сделать так:
\DB::raw("ST_Length(ST_GeomFromText('LineString(48.713863164838116 44.497622953881574,48.71494233380111 44.51217125557791)')) as distance")

Если координаты явно указывать то длину линии находит, но в базе же координаты в другом виде(в бинарном либо POINT(x,y)).

Кто-нибудь сталкивался с такой задачей?

Добавлено:
Расстояние понял как вычислить:
\DB::raw('ST_Distance_Sphere(point,POINT(' . $res['lat'] . ', ' . $res['lng'] . ')) as distance')

Но вычисляет не корректно.
Если в точках координаты поменять местами то вычисляет точно.
Трансформацию точки как-то можно сделать в запросе?

Спасибо!
  • Вопрос задан
  • 830 просмотров
Подписаться 3 Средний Комментировать
Пригласить эксперта
Ответы на вопрос 1
@OM1
"SELECT id, lan, lon, name, type, text, ( 6371 * acos( cos( radians('%s') ) * cos( radians( lan ) ) * cos( radians( lon ) - radians('%s') ) + sin( radians('%s') ) * sin( radians( lan ) ) ) ) AS distance FROM table HAVING distance < '%s' ORDER BY distance LIMIT 0, 200
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы