php地理位置打卡,定位地理位置PHP判断员工打卡签到经纬度是否在打卡之内
具體代碼如下所述:
/* 計算兩組經緯度坐標之間的距離
* @param $lat1 緯度1
* @param $lng1 經度1
* @param $lat2 緯度2
* @param $lng2 經度2
* @param int $len_type 返回值類型(1-m 2-km)
* @param int $decimal 保留小數位數
* @return float
*/
public function getdistance($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;
}
return round($s, $decimal);
}
ps:下面看下根據經緯度判斷簽到范圍是否在指定范圍內
/**
* 將角度換算為弧度
* @param d 角度
* @return 弧度
*/
private static double rad(double d) {
return d * math.pi / 180.0;
}
/**
* 先通過經緯度獲取距離(單位:米),再判斷一個點是否在圓形區域內(根據所給的半徑坐比較)
* @param n1=>app
* @param n2=>倉庫
* @param radius
* @return
*/
public static boolean isincircle(zjpoint n1 ,zjpoint n2,string radius){
final double earth_radius = 6378.137;地球半徑 (千米)
double radlat1 = rad(n1.getx()!=null ? n1.getx().doublevalue():0);
double radlat2 = rad(n2.getx()!=null ? n2.getx().doublevalue():0);
double radlon1 = rad(n1.gety()!=null ? n1.gety().doublevalue():0);
double radlon2 = rad(n2.gety()!=null ? n2.gety().doublevalue():0);
//兩點之間的差值
double jddistance = radlat1 - radlat2;
double wddistance = radlon1 - radlon2;
double distance = 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;//將計算出來的距離千米轉為米
double r = double.parsedouble(radius);
//判斷一個點是否在圓形區域內
if (distance > r) {
return false;
}
return true;
}
總結
以上所述是小編給大家介紹的定位地理位置php判斷員工打卡簽到經緯度是否在打卡之內,希望對大家有所幫助
希望與廣大網友互動??
點此進行留言吧!
總結
以上是生活随笔為你收集整理的php地理位置打卡,定位地理位置PHP判断员工打卡签到经纬度是否在打卡之内的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JavaEE笔记——快递管理系统架构
- 下一篇: php学习日志(5)-解决Windows