定位地理位置PHP判斷員工打卡簽到經(jīng)緯度是否在打卡之內(nèi)
具體代碼如下所述:
/* 計(jì)算兩組經(jīng)緯度坐標(biāo)之間的距離
* @param $lat1 緯度1
* @param $lng1 經(jīng)度1
* @param $lat2 緯度2
* @param $lng2 經(jīng)度2
* @param int $len_type 返回值類型(1-m 2-km)
* @param int $decimal 保留小數(shù)位數(shù)
* @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:下面看下根據(jù)經(jīng)緯度判斷簽到范圍是否在指定范圍內(nèi)
/**
* 將角度換算為弧度
* @param d 角度
* @return 弧度
*/
private static double rad(double d) {
return d * Math.PI / 180.0;
}
/**
* 先通過(guò)經(jīng)緯度獲取距離(單位:米),再判斷一個(gè)點(diǎn)是否在圓形區(qū)域內(nèi)(根據(jù)所給的半徑坐比較)
* @param n1=>app
* @param n2=>倉(cāng)庫(kù)
* @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);
//兩點(diǎn)之間的差值
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;//將計(jì)算出來(lái)的距離千米轉(zhuǎn)為米
double r = Double.parseDouble(radius);
//判斷一個(gè)點(diǎn)是否在圓形區(qū)域內(nèi)
if (distance > r) {
return false;
}
return true;
}
總結(jié)
以上所述是小編給大家介紹的定位地理位置PHP判斷員工打卡簽到經(jīng)緯度是否在打卡之內(nèi),希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
- PHP實(shí)現(xiàn)的7組經(jīng)緯度與距離的計(jì)算函數(shù)demo
- golang與php實(shí)現(xiàn)計(jì)算兩個(gè)經(jīng)緯度之間距離的方法
- PHP計(jì)算當(dāng)前坐標(biāo)3公里內(nèi)4個(gè)角落的最大最小經(jīng)緯度實(shí)例
- PHP根據(jù)兩點(diǎn)間的經(jīng)緯度計(jì)算距離
- PHP計(jì)算2點(diǎn)經(jīng)緯度之間的距離代碼
- php根據(jù)地址獲取百度地圖經(jīng)緯度的實(shí)例方法
- PHP/Laravel如何通過(guò)經(jīng)緯度計(jì)算距離獲取附近商家
相關(guān)文章
php中實(shí)現(xiàn)用數(shù)組嫵媚地生成要執(zhí)行的sql語(yǔ)句
這篇文章主要介紹了php中實(shí)現(xiàn)用數(shù)組嫵媚地生成要執(zhí)行的sql語(yǔ)句,本文直接給出代碼示例,需要的朋友可以參考下2015-07-07
thinkphp制作404跳轉(zhuǎn)頁(yè)的簡(jiǎn)單實(shí)現(xiàn)方法
下面小編就為大家?guī)?lái)一篇thinkphp制作404跳轉(zhuǎn)頁(yè)的簡(jiǎn)單實(shí)現(xiàn)方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-09-09
PHP實(shí)現(xiàn)圖片旋轉(zhuǎn)效果實(shí)例代碼
這篇文章主要介紹了PHP實(shí)現(xiàn)圖片旋轉(zhuǎn)效果實(shí)例代碼,本文給出代碼示例,代碼中包含一些說(shuō)明注釋,需要的朋友可以參考下2014-10-10
thinkPHP5分頁(yè)功能實(shí)現(xiàn)方法分析
這篇文章主要介紹了thinkPHP5分頁(yè)功能實(shí)現(xiàn)方法,結(jié)合實(shí)例形式較為詳細(xì)的分析了thinkPHP5實(shí)現(xiàn)分頁(yè)功能的具體步驟與相關(guān)操作技巧,需要的朋友可以參考下2017-10-10
PHP封裝curl的調(diào)用接口及常用函數(shù)詳解
今天小編就為大家分享一篇PHP封裝curl的調(diào)用接口及常用函數(shù)詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-05-05
PHP時(shí)間戳與日期之間轉(zhuǎn)換的實(shí)例介紹
本篇文章小編為大家介紹,PHP時(shí)間戳與日期之間轉(zhuǎn)換的實(shí)例介紹。需要的朋友參考下2013-04-04

