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中关键字,一定要使用反单引号来进行转义。

在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章