在开发中经常会遇到把数据库已有经纬度的地方进行距离排序然后返回给用户
例如一些外卖app打开会返回附近的商店,这个是怎么做到的呢?
计算距离附近门店
思路一:
根据用户当前的位置,用计算经纬度距离的算法逐一计算比对距离,然后进行排序。这里可以参考下面这个算法:
/**
-
查找两个经纬度之间的距离
-
@param $latitude1 float 起始纬度
-
@param $longitude1 float 起始经度
-
@param $latitude2 float 目标纬度
-
@param $longitude2 float 目标经度
-
@return array(miles=>英里,feet=>英尺,yards=>码,kilometers=>公里,meters=>米)
-
@example
**/function getDistanceBetweenPointsNew($latitude1, $longitude1, $latitude2, $longitude2) { $theta = $longitude1 - $longitude2; $miles = (sin(deg2rad($latitude1)) * sin(deg2rad($latitude2))) + (cos(deg2rad($latitude1)) * cos(deg2rad($latitude2)) * cos(deg2rad($theta))); $miles = acos($miles); $miles = rad2deg($miles); $miles = $miles * 60 * 1.1515; $feet = $miles * 5280; $yards = $feet / 3; $kilometers = $miles * 1.609344; $meters = $kilometers * 1000; return compact('miles', 'feet', 'yards', 'kilometers', 'meters'); }