php通过当前用户的经纬度算出与数据表中每个用户之间的距离

数据表

其中long,lat分别为经度和纬度:
在这里插入图片描述

实现代码

模型中的方法:
	public function get_all_byid($id,$page,$row,$long,$lat){
        $data = $this->where("fid",$id)
            ->field("id,name,image,address,`long`,lat,".$this->byLonLat($long,$lat))
            ->order("distance")
            ->page($page,$row)
            ->select();
        return $data;
    }
计算距离的方法:

lng:经度
lat:纬度

public function byLonLat($lng,$lat) {
        return <<<EOT
        6378.138 * 2 * ASIN(
            SQRT(
                POW(
                    SIN(
                        (
                            {$lat} * PI() / 180 - lat * PI() / 180
                        ) / 2
                    ),
                    2
                ) + COS({$lat} * PI() / 180) * COS(lat * PI() / 180) * POW(
                    SIN(
                        (
                            {$lng} * PI() / 180 - `long` * PI() / 180
                        ) / 2
                    ),
                    2
                )
            )
        ) * 1000
     AS distance
EOT;
    }
返回结果

distance:两个经纬度之间的距离(单位米)
在这里插入图片描述

采坑小结

long属于mysql中关键字,一定要使用反单引号来进行转义。

在这里插入图片描述

©️2020 CSDN 皮肤主题: 酷酷鲨 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值