У меня есть столбец JSON в моей базе данных, в котором хранятся координаты долготы и широты, настроенные как:
_geoloc:{lat: 33.6556324, lng: -117.7015161}.
Я пытаюсь запросить базу данных с координатами долготы и широты пользователя, чтобы получить все записи, которые попадают на определенное расстояние. Ниже приведена функция, которую я использую, однако все результаты возвращают одно и то же расстояние 7797,5012454514 для каждой модели. Я хотел бы передать параметр $distance
в милях.
protected function get_locations( $latitude, $longitude, $distance = 8000 ) {
$results= my_table::select( 'my_table.*' )
->selectRaw( '(3959 * (acos( cos( radians(?) )
* cos( radians( "_geoloc->lat" ) )
* cos( radians( "_geoloc->lng" ) - radians(?))
+ sin( radians( ? ) )
* sin( radians( "_geoloc->lat" ) ) ) ) )
AS distance', [ $latitude, $longitude, $latitude ] )
->havingRaw( "distance< ?", [ $distance ] )
->groupBy( 'first_name' )
->get();
return $results;
}