Haversine и Laravel

Я пытаюсь сравнить местоположение пользователя (отправлено с помощью параметров в URL-адресе) с offer.offer_lat и offer.offer_long (в моей БД) по аргументу расстояния (в милях)

Сейчас я схожу с ума, многие решения, которые я нашел в Интернете, с трудом переносятся на конструктор запросов laravels с использованием DB :: raw, в настоящее время у меня есть функция в области запросов, поскольку пользователь будет фильтровать результаты API с помощью расстояние, не повезло, хотя!

Я нашел некоторые функции в Интернете для расчета haversine, но я не знаю, как их использовать. Вот пример:
https://gist.github.com/fhferreira/9081607

Любая помощь будет высоко ценится! 🙂

Спасибо

1

Решение

Таким образом, вам не нужно все наворот, который находится в этой сути, вместо этого вы можете использовать следующие формулы:

public function get_offers_near($latitude, $longitude, $radius = 1){

$offers = Offer::select('offers.*')
->selectRaw('( 3959 * acos( cos( radians(?) ) *
cos( radians( offer_lat ) )
* cos( radians( offer_long ) - radians(?)
) + sin( radians(?) ) *
sin( radians( offer_lat ) ) )
) AS distance', [$latitude, $longitude, $latitude])
->havingRaw("distance < ?", [$radius])
->get();

return $offers;
}

Это предполагает, что вы передаете в latitude а также longitude от вашего пользователя. Кроме того, если вы не хотите, чтобы радиус был равен 1, вы можете передать третий аргумент и указать собственный радиус.

И, конечно, мы предполагаем, что это для модели Offer, При необходимости измените соглашение об именах.

5

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]