Home > Article > Backend Development > 【微信企业号考勤】用什么方法来判断员工在常驻办公室签到签退
新手一枚,在此请教各位前辈一个问题。
最近在做微信企业号的考勤签到签退功能,现在服务器后台已经可以接收到微信用户发送过来的地理位置(经纬度),我的需求是用户只允许在常驻办公室区域(假设办公室很大,几百个平方,在这区域内都可签到签退,区域外则不允许)的地理位置进行签到签退。
获取到用户返回的经纬度后用什么办法判断其是否允许签到签退??
如果采用在数据库存储员工的办公地点地理位置信息然后与其返回的经纬度进行比较的方法判断,可这办公地点很大,地理位置信息如何存储?判断又如何判断?
首先!目前的地图定位误差也不算太准,好在是在公司,不管是wifi,gps定位还算准确,一般误差在100米之内,姑且最好达到50米。
1:
数据库中存储公司人员半年办公地点所处中心位置经纬度。且以改点为圆心,存储改点到所允许最大办公距离之间的距离,也就是半径了。每次用户签到或则签退,假如A,B两点,A点经度,纬度分别为λA和ΦA,B点的经度、纬度分别为λB和ΦB,d为距离。
利用如下方法:
d=111.12cos{1/[sinΦAsinΦB十 cosΦAcosΦBcos(λB-λA)]}
计算之间距离与数据库中对应用户所允许的距离(半径)比较。在半径发范围内,则允许签到签退。
2:和1类似。问题转化为,已知一个点坐标,求以该点位圆心,半径为r,圆上的所有点的坐标。
2.1:
选取工作人员经常办公地点中心存入数据库,计算改点距离最大允许范围的所有经纬度,存入数据库(不建议,也不科学,数据量大了吃不消。)。
2.2:
。求得是矩形的四个点存入数据库。用户在签到签退的时候比较数据库中的值。
希望这篇文章帮得到你 http://digdeeply.org/archives/06152067.html
建议2.2方法。
误差肯定是有的。
给点分吧
范围小就定个中心点,判断半径呗.
不过有时候不准,不好解决啊
想问的是除了经纬度能搞到网络状态么?
或者提交时候的ip是公司外网/内网ip就可以签到之类
首先!目前的地图定位误差也不算太准,好在是在公司,不管是wifi,gps定位还算准确,一般误差在100米之内,姑且最好达到50米。
1:
数据库中存储公司人员半年办公地点所处中心位置经纬度。且以改点为圆心,存储改点到所允许最大办公距离之间的距离,也就是半径了。每次用户签到或则签退,假如A,B两点,A点经度,纬度分别为λA和ΦA,B点的经度、纬度分别为λB和ΦB,d为距离。
利用如下方法:
d=111.12cos{1/[sinΦAsinΦB十 cosΦAcosΦBcos(λB-λA)]}
计算之间距离与数据库中对应用户所允许的距离(半径)比较。在半径发范围内,则允许签到签退。
2:和1类似。问题转化为,已知一个点坐标,求以该点位圆心,半径为r,圆上的所有点的坐标。
2.1:
选取工作人员经常办公地点中心存入数据库,计算改点距离最大允许范围的所有经纬度,存入数据库(不建议,也不科学,数据量大了吃不消。)。
2.2:
。求得是矩形的四个点存入数据库。用户在签到签退的时候比较数据库中的值。
希望这篇文章帮得到你 http://digdeeply.org/archives/06152067.html
建议2.2方法。
误差肯定是有的。
给点分吧
新手一枚,在此请教各位前辈一个问题。
最近在做微信企业号的考勤签到签退功能,现在服务器后台已经可以接收到微信用户发送过来的地理位置(经纬度),我的需求是用户只允许在常驻办公室区域(假设办公室很大,几百个平方,在这区域内都可签到签退,区域外则不允许)的地理位置进行签到签退。
获取到用户返回的经纬度后用什么办法判断其是否允许签到签退??
如果采用在数据库存储员工的办公地点地理位置信息然后与其返回的经纬度进行比较的方法判断,可这办公地点很大,地理位置信息如何存储?判断又如何判断?