咱们公司可是有300大洋的到勤奖金的,仔细一算,一年下来3600,都赶上年终了呀!话说这到勤奖金不拿也就算了,要是每天迟到,扣个10块20的,也心疼呢。大冬天起床多不容易,然而夏天上班也不会太舒服。成都已经连着下了一个月的雨了,看样子还没有打算停的意思。这雨天挤公交挤地铁难免迟个到,扣点钱。自从同事们玩远距离打卡成了习惯之后,我们的管理员把钉钉的打卡距离直接缩短到0.1倍,迟到尴尬得很咯!
我就直接一口气解决了这个问题吧,用手机能解决的问题那还是问题,我不管,我在家就要打卡上班了!
github地址:https://github.com/Soldoros/SSVirtualLocation
12.png大家有苹果电脑的自己下载安装吧,步骤参考此文即可!
在地图开发中:我们会接触到3中类型的地图坐标系:
WGS-84原始坐标系,一般用国际GPS纪录仪记录下来的经纬度,通过GPS定位拿到的原始经纬度,Google和高德地图定位的的经纬度(国外)都是基于WGS-84坐标系的;但是在国内是不允许直接用WGS84坐标系标注的,必须经过加密后才能使用;
GCJ-02坐标系,又名“火星坐标系”,是我国国测局独创的坐标体系,由WGS-84加密而成,在国内,必须至少使用GCJ-02坐标系,或者使用在GCJ-02加密后再进行加密的坐标系,如百度坐标系。高德和Google在国内都是使用GCJ-02坐标系,可以说,GCJ-02是国内最广泛使用的坐标系;
百度坐标系:bd-09,百度坐标系是在GCJ-02坐标系的基础上再次加密偏移后形成的坐标系,只适用于百度地图。(目前百度API提供了从其它坐标系转换为百度坐标系的API,但却没有从百度坐标系转为其他坐标系的API)
而我们iOS端采用的定位坐标系是WGS-84,我们可以直接通过定位代码拿到当前位置的经纬度。
_manager = [[CLLocationManager alloc] init];
_manager.delegate = self;
[_manager requestWhenInUseAuthorization];
_manager.desiredAccuracy = kCLLocationAccuracyBest;
_manager.distanceFilter = 1.0;
[_manager startUpdatingLocation];
-
(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray<CLLocation *> *)locations {
[_manager stopUpdatingLocation];CLLocation *currentLocation = [locations lastObject];
_titleLab.text = [NSString stringWithFormat:@"纬度:%f,经度:%f",currentLocation.coordinate.latitude,currentLocation.coordinate.longitude];
//地理反编码 可以根据坐标(经纬度)确定位置信息(街道 门牌等)
CLGeocoder *geoCoder = [[CLGeocoder alloc]init];
[geoCoder reverseGeocodeLocation:currentLocation completionHandler:^(NSArray<CLPlacemark *> * _Nullable placemarks, NSError * _Nullable error) {
if (placemarks.count >0) {
CLPlacemark *placeMark = placemarks[0];
NSString *currentCity = placeMark.locality;
if (!currentCity) {
currentCity = @"无法定位当前城市";
}
//看需求定义一个全局变量来接收赋值
NSLog(@"当前国家 - %@",placeMark.country);//当前国家
NSLog(@"当前城市 - %@",currentCity);//当前城市
NSLog(@"当前位置 - %@",placeMark.subLocality);//当前位置
NSLog(@"当前街道 - %@",placeMark.thoroughfare);//当前街道
NSLog(@"具体地址 - %@",placeMark.name);//具体地址
NSString *string = [NSString stringWithFormat:@"%@,%@,%@,%@,%@,%@",placeMark.country,currentCity,placeMark.subLocality,placeMark.thoroughfare,placeMark.name,@"定位完成,确认无误后请开启钉钉或微信打卡吧!"];
self.detLab.text = string;
[self.detLab sizeToFit];
self.detLab.center = CGPointMake(self.view.frame.size.width*0.5, 320);
}
}];
}
新建一个项目,新建一个gpx文件。gpx是一种用于存储坐标数据的 XML 文件格式。它可以储存在一条路上的路点,轨迹,路线,且易于处理和转换到其他格式。OpenStreetMap 使用的所有 GPS 数据要转换为 GPX 格式才能上传。之于下面的经纬度是哪家公司,你别问我,我也不知道,你是哪家就定位到哪家。给你个地址自己查去,高德地图 http://lbs.amap.com/console/show/picker
<?xml version="1.0"?>
<gpx version="1.1" creator="Xcode">
<!-- XXXX科技 103.970942, 30.631744 -->
<wpt lat="30.631744" lon="103.970942">
<name>Cupertino</name>
<time>2014-09-24T14:55:37Z</time>
</wpt>
</gpx>
好的。项目完成了!就这么简单,开始调试,必须连接上真机。然后运行。运行后,点击Debug--->Simulate Location --> Location1(这个是你创建gpx的文件名哦)
33.png这时你会发现手机当前的定位已经切换到你的经纬度。
这个时候,你打开手机的其他软件,包括自带的地图,微信,钉钉。。。你会发现所有的当前定位都是你设置的位置了。然后,你想怎么弄就怎么弄咯
你要修改另一个位置,只需要重新修改gpx中的参数,然后重新运行,发现还是上次的位置。这个时候只需要再点Location1,就可以更新到最新位置。
如果要恢复原来的定位怎么办?第一感觉,我选了Don't Simulate Location,发现当时没反应(原来只需要重新运行一遍就好(iphone6 10.3版本)),但后面发现来回操作多次,原生地图的定位一直在刷新(干脆也重启手机吧)。
已经远程测试过 放心使用吧,无毒无公害!!!好用请关注我的简书,请给soldoros的github打星!!!
网友评论
能加个好友 在你闲暇时间帮忙看看嘛