先来一个算经纬度的网站,可以对比结果
https://www.hhlink.com/经纬度/
后台PHP:
public function gwz()
{
$lon1=$this->request->post('lon');
$lat1=$this->request->post('lng');
$table=$this->request->post('table');//需要查询的表
$sql = $this->distance_sql($lon1,$lat1);
$row = Db::query("select * ,".$sql."as distance from cd_".$table." HAVING distance <= '100000'");
return json($row);
}
根据对比经纬度网站结果,相差无几,大致位置就行,都是算的直线距离
网上例子太多了,都可以看到
更改
//$lon1 用户当前经度 $lat1用户当前纬度 $lon2数据库经度的字段名 $lat2数据库纬度的字段名
public function distance_sql($lon1='',$lat1='',$lon2='lon',$lat2='lng')
{
$PI = 3.1415926;
//这里 /1000 可去可不去,看需要
$sql = "round(6378.138*2*asin(sqrt(pow(sin( ({
$lat1}*$PI/180-{
$lat2}*$PI/180)/2),2)+cos({
$lat1}*$PI/180)*cos({
$lat2}*$PI/180)* pow(sin( ({
$lon1}*$PI/180-{
$lon2}*$PI/180)/2),2)))*1000 / 1000) ";
return $sql;
}
最后的/1000 ,必须放进括号里面去,不然会当作字段去查询而报错没有这个字段,多细心点(对我自己说的)