定位地理位置PHP判断员工打卡签到经纬度是否在打卡之内
具体代码如下所述:
/*计算两组经纬度坐标之间的距离
*@param$lat1纬度1
*@param$lng1经度1
*@param$lat2纬度2
*@param$lng2经度2
*@paramint$len_type返回值类型(1-m2-km)
*@paramint$decimal保留小数位数
*@returnfloat
*/
publicfunctiongetDistance($lat1,$lng1,$lat2,$lng2,$len_type=1,$decimal=2)
{
$radLat1=$lat1*3.1415926/180.0;
$radLat2=$lat2*3.1415926/180.0;
$a=$radLat1-$radLat2;
$b=($lng1*3.1415926/180.0)-($lng2*3.1415926/180.0);
$s=2*asin(sqrt(pow(sin($a/2),2)+cos($radLat1)*cos($radLat2)*pow(sin($b/2),2)));
$s=$s*6378.137;
$s=round($s*1000);
if($len_type>1){
$s/=1000;
}
returnround($s,$decimal);
}
ps:下面看下根据经纬度判断签到范围是否在指定范围内
/**
*将角度换算为弧度
*@paramd角度
*@return弧度
*/
privatestaticdoublerad(doubled){
returnd*Math.PI/180.0;
}
/**
*先通过经纬度获取距离(单位:米),再判断一个点是否在圆形区域内(根据所给的半径坐比较)
*@paramn1=>app
*@paramn2=>仓库
*@paramradius
*@return
*/
publicstaticbooleanisInCircle(ZJPointn1,ZJPointn2,Stringradius){
finaldoubleEARTH_RADIUS=6378.137;////地球半径(千米)
doubleradLat1=rad(n1.getX()!=null?n1.getX().doubleValue():0);
doubleradLat2=rad(n2.getX()!=null?n2.getX().doubleValue():0);
doubleradLon1=rad(n1.getY()!=null?n1.getY().doubleValue():0);
doubleradLon2=rad(n2.getY()!=null?n2.getY().doubleValue():0);
//两点之间的差值
doublejdDistance=radLat1-radLat2;
doublewdDistance=radLon1-radLon2;
doubledistance=2*Math.asin(Math.sqrt(Math.pow(Math.sin(jdDistance/2),2)+
Math.cos(radLat1)*Math.cos(radLat2)*Math.pow(Math.sin(wdDistance/2),2)));
distance=distance*EARTH_RADIUS;
distance=Math.round(distance*10000d)/10000d;
distance=distance*1000;//将计算出来的距离千米转为米
doubler=Double.parseDouble(radius);
//判断一个点是否在圆形区域内
if(distance>r){
returnfalse;
}
returntrue;
}
总结
以上所述是小编给大家介绍的定位地理位置PHP判断员工打卡签到经纬度是否在打卡之内,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!