当前位置:首页 > PHP教程 > php应用 > 列表

定位地理位置PHP判断员工打卡签到经纬度是否在打卡之内

发布:smiling 来源: PHP粉丝网  添加日期:2021-11-23 10:40:31 浏览: 评论:0 

这篇文章主要介绍了定位地理位置PHP判断员工打卡签到经纬度是否在打卡之内,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下。

具体代码如下所述:

  1. /* 计算两组经纬度坐标之间的距离 
  2.  * @param $lat1 纬度1 
  3.  * @param $lng1 经度1 
  4.  * @param $lat2 纬度2 
  5.  * @param $lng2 经度2 
  6.  * @param int $len_type 返回值类型(1-m 2-km) 
  7.  * @param int $decimal 保留小数位数 
  8.  * @return float 
  9.  */ 
  10.  public function getDistance($lat1$lng1$lat2$lng2$len_type = 1, $decimal = 2) 
  11.  { 
  12.    $radLat1 = $lat1 * 3.1415926 / 180.0; 
  13.    $radLat2 = $lat2 * 3.1415926 / 180.0; 
  14.    $a = $radLat1 - $radLat2
  15.    $b = ($lng1 * 3.1415926 / 180.0) - ($lng2 * 3.1415926 / 180.0); 
  16.    $s = 2 * asin(sqrt(pow(sin($a / 2), 2) + cos($radLat1) * cos($radLat2) * pow(sin($b / 2), 2))); 
  17.    $s = $s * 6378.137; 
  18.    $s = round($s * 1000); 
  19.    if ($len_type > 1) { 
  20.      $s /= 1000; 
  21.    } 
  22.    return round($s$decimal); 
  23.  } 

ps:下面看下根据经纬度判断签到范围是否在指定范围内

  1. /** 
  2.   * 将角度换算为弧度 
  3.   * @param d 角度 
  4.   * @return 弧度 
  5.   */ 
  6.  private static double rad(double d) { 
  7.      return d * Math.PI / 180.0; 
  8.  } 
  9.    
  10.  /** 
  11.   * 先通过经纬度获取距离(单位:米),再判断一个点是否在圆形区域内(根据所给的半径坐比较) 
  12.   * @param n1=>app 
  13.    * @param n2=>仓库 
  14.   * @param radius 
  15.   * @return 
  16.   */ 
  17.  public static boolean isInCircle(ZJPoint n1 ,ZJPoint n2,String radius){ 
  18.   final double EARTH_RADIUS = 6378.137;////地球半径 (千米) 
  19.   double radLat1 = rad(n1.getX()!=null ? n1.getX().doubleValue():0); 
  20.    double radLat2 = rad(n2.getX()!=null ? n2.getX().doubleValue():0); 
  21.    double radLon1 = rad(n1.getY()!=null ? n1.getY().doubleValue():0); 
  22.    double radLon2 = rad(n2.getY()!=null ? n2.getY().doubleValue():0); 
  23.    //两点之间的差值 
  24.    double jdDistance = radLat1 - radLat2; 
  25.    double wdDistance = radLon1 - radLon2; 
  26.    double distance = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(jdDistance / 2), 2) + 
  27.          Math.cos(radLat1) * Math.cos(radLat2) * Math.pow(Math.sin(wdDistance / 2), 2))); 
  28.    distance = distance * EARTH_RADIUS; 
  29.    distance = Math.round(distance * 10000d) / 10000d; 
  30.    distance = distance*1000;//将计算出来的距离千米转为米 
  31.    double r = Double.parseDouble(radius); 
  32.    //判断一个点是否在圆形区域内 
  33.    if (distance > r) { 
  34.        return false; 
  35.     } 
  36.   return true; 
  37.  }

Tags: PHP定位地理位置 PHP签到经纬度

分享到: