【发布时间】:2019-04-12 17:38:19
【问题描述】:
我有一个 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 参数内并将其推送到数组中。
有没有更有效的方法来做到这一点?
【问题讨论】:
标签: php geolocation distance