1.首先本次开发是基于微擎2.0框架开发的。
2.需要认证服务号,因为是获取微信的定位
{php echo register_jssdk();}
3.将上面的代码插入到前端的html中,尽量在js前。
4.然后通过getLocation接口获取用户的定位。
<script>wx.getLocation({type: 'wgs84',success: function (res) {var latitude = res.latitude; // 纬度,浮点数,范围为90 ~ -90var longitude = res.longitude; // 经度,浮点数,范围为180 ~ -180。var speed = res.speed; // 速度,以米/每秒计var accuracy = res.accuracy; // 位置精度},});
</script>
4.获取到定位后传到后端,然后通过一个计算方法,计算获取到的定位和打卡的定位。
/*** 计算当前商家位置是否在范围内* @param 当前位置经度 $lat_a* @param 计算经度 $lng_a* @param 当前位置维度 $lat_b* @param 计算纬度 $lng_b* @author bieanju* @return number 距离 */public function getDistance_map($lat_a, $lng_a, $lat_b, $lng_b) {//R是地球半径(米)$R = 6366000;$pk = doubleval(180 / 3.1416);$a1 = doubleval($lat_a / $pk);$a2 = doubleval($lng_a / $pk);$b1 = doubleval($lat_b / $pk);$b2 = doubleval($lng_b / $pk);$t1 = doubleval(cos($a1) * cos($a2) * cos($b1) * cos($b2));$t2 = doubleval(cos($a1) * sin($a2) * cos($b1) * sin($b2));$t3 = doubleval(sin($a1) * sin($b1));$tt = doubleval(acos($t1 + $t2 + $t3));return round($R * $tt);}
- 然后再进行个判断,判断是否小于规定的值,也就是范围。
if($dingwei > $meta_dingwei){message('您不在活动范围内,请前往活动点进行打卡!', $this->createMobileUrl('item',array('id'=>$id)), 'error');
}
6.以上就是获取定位,然后计算距离的方法,计算那块是搜别人的,然后做个记录,留着以后用得到。