У меня есть API (PHP), который будет принимать долготу, широту и расстояние.
У меня также есть таблица shops
, в которой есть записи местоположений
id, longitude, latitude
Теперь,Мой API будет принимать входные данные longitude, latitude
и distance
Моя цель - найти в базе данных ближайший магазин к входным данным latitude
и longitude
и distance
, которые являются областью поиска,скажем, в пределах distance = 20km
У меня уже есть функция, которая будет определять расстояние между двумя точками:
private function computeDistance($lat1, $lng1, $lat2, $lng2, $radius = 6378137)
{
static $x = M_PI / 180;
$lat1 *= $x; $lng1 *= $x;
$lat2 *= $x; $lng2 *= $x;
$distance = 2 * asin(sqrt(pow(sin(($lat1 - $lat2) / 2), 2) + cos($lat1) * cos($lat2) * pow(sin(($lng1 - $lng2) / 2), 2)));
$meters = $distance * $radius;
return $meters * (1 / 1000); // Return Kilometers
}
Теперь, каков наилучший подход для этого?Мой первоначальный план состоит в том, чтобы получить все записи в базе данных, а затем перейти к ним, сравнить входной параметр в API и проверить его расстояние, если оно находится внутри параметра distance
, и вставить его в массив.
Есть либолее эффективный способ сделать это?