PHP通过经纬度计算距离

SQL语句查询并计算距离

复制代码
$lat = 40.003661; // 当前纬度 纬度最高90
$lng = 116.326510; // 当前经度
// latitude 纬度
// longitude 经度
$page= $page> 0 ? $page - 1 : $page;
$distance = "(2 * 6378.137* ASIN(SQRT(POW(SIN(3.1415926535898*(" . $lat . "-latitude)/360),2)+COS(3.1415926535898*" . $lat . "/180)* COS(latitude * 3.1415926535898/180)*POW(SIN(3.1415926535898*(" . $lng . "-longitude)/360),2))))*1000";
$sql = "select *," . $distance . " as juli from About where " . $where . " order by juli ASC, addtime DESC limit " . $page. "," . $limit;
$arr = Db::query($sql);
$count = count($arr);
复制代码

php自定义函数计算距离

复制代码
/*
 * 地图计算距离
 *  $lat1:起点纬度
 *  $lng1:起点经度
 *
 *  $lat2:终点纬度
 *  $lng2:终点经度
 * */
function TX_Map_Api_distance($lat1, $lng1, $lat2, $lng2)
{
    // 将角度转为狐度
    $radLat1 = deg2rad($lat1); // deg2rad()函数将角度转换为弧度
    $radLat2 = deg2rad($lat2);
    $radLng1 = deg2rad($lng1);
    $radLng2 = deg2rad($lng2);
    $a = $radLat1 - $radLat2;
    $b = $radLng1 - $radLng2;
    $s = 2 * asin(sqrt(pow(sin($a / 2), 2) + cos($radLat1) * cos($radLat2) * pow(sin($b / 2), 2))) * 6378.137;
    return bcadd($s, 0, 2);
}
复制代码

 

posted @   MldyFre  阅读(1273)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
点击右上角即可分享
微信分享提示