定位地理位置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判断员工打卡签到经纬度是否在打卡之内,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!