生活指南——让生活变得更简单

ios位置定位_ios开发地图定位

课程:

iOS地图定位器怎么修改

首先讲一下原理,我们通过修改备份数据里的地图数据来,来使自带地图增加一个虚拟定位的按钮来实现的。本方法支持iOS7-iOS10所有设备。虚拟定位完了后位置是固定死的,不会随手机移动而移动的。若要恢复真实定位重启手机即可;此定位支持任何第三方App。

操作方法:

1、下载并安装爱思助手,将手机连接爱思助手之后,点击“设备信息”中的“备份/恢复”,点击“全备份”将手机备份(什么是全备份?);

2、备份完成后,点击上图“备份恢复”界面的“全备份文件管理”,找到刚才备份的的数据,选择之后点击“立即查看”;

3、在备份查看器打开后,往下拉找到AppDomain-com.apple.Maps这个文件夹,双击打开;

4、然后依次打开Library/Preferences,可以看到里面的com.apple.Maps.plist文件,双击打开;

5、弹出如下界面,页面拖到最下方,看到两行代码和,把以下代码写在这两行上面:

__internal__PlaceCardLocationSimulation

以上代码可以直接复制粘贴,如下图对齐;修改完毕之后点击左上角“保存”;

6、接下来只要把修改后的备份还原到手机就可以了;点击“备份/恢复”界面的“全恢复数据”,选择刚才修改的备份,点击“立即恢复”,等待进度条完成,手机重启,大功告成;

7、打开手机的地图搜索你想要的地址查看,最下方会出现Simulate Location这个选项,点击以后即完成伪装;之后打开所有APP的定位都将是此虚拟位置。

ios 百度地图开发怎么定位当前地图

百度地图js版,在Androids上面目前只能支持滑动,在IOS上支持滑动和双指缩放。 这不是百度地图的问题,而是Android设备上的浏览器,对多点触控的支持不够完善。

ios开发中百度地图在4g网的情况下定位不准是怎么回事

(一)关于定位的一些设置

--------------------------------------------------------------------------------------------------------

//初始化定位服务

_locService = [[BMKLocationService alloc] init];

//设置距离过滤器(默认距离是米)

_locService.distanceFilter = 10;

//设置定位精度

_locService.desiredAccuracy = kCLLocationAccuracyBest;

//开启定位服务

[_locService startUserLocationService];

//指定定位:是否允许后台定位更新。默认为NO。只在iOS 9.0之后起作用

if ([[UIDevice currentDevice].systemVersion doubleValue] = 9) {

_locService.allowsBackgroundLocationUpdates = YES;

}

//设置定位的状态

_mapView.userTrackingMode = BMKUserTrackingModeNone;

//显示定位图层

_mapView.showsUserLocation = YES;

//设置定位图层自定义样式

BMKLocationViewDisplayParam *userlocationStyle = [[BMKLocationViewDisplayParam alloc] init];

//精度圈是否显示

userlocationStyle.isRotateAngleValid = YES;

//跟随态旋转角度是否生效

userlocationStyle.isAccuracyCircleShow = NO;

//定位图标

userlocationStyle.locationViewImgName = [UIImage imageNamed:@"图标名称"];

//更新参样式信息

[_mapView updateLocationViewWithParam:userlocationStyle];

--------------------------------------------------------------------------------------------------------

(二)关于当前定位位置

首先,显示当前位置,百度地图提供了三种模式:

typedef enum {

BMKUserTrackingModeNone = 0, /// 普通定位模式

BMKUserTrackingModeFollow, /// 定位跟随模式

BMKUserTrackingModeFollowWithHeading, /// 定位罗盘模式

} BMKUserTrackingMode;

使用下面代码就能设置定位状态:

//设置定位的状态

_mapView.userTrackingMode = BMKUserTrackingModeNone;

普通定位模式没有问题,但是如果设置定位跟随或定位罗盘模式,运行app,你会发现定位点确实是对应的状态,但是当你拖动地图的时候,你就会发现后两种模式,又变回了普通定位模式.

我问了百度地图的工程师,他们说这是当前的策略...

所以我感觉设置跟随模式和罗盘模式没有什么卵用...

关于用户方向更新后的设置

如上面(一)所述,定位点可是设置样式参数,当你自定义了定位图标后,你会发现定位图标确实换为了自己定义的图标,而且当用户方向更新后,定位图标是回发生旋转的,但是当你点击触摸屏幕后,定位图标马上变为初始的情况,并且用户方向更新,定位图标不在发生变化.

对于这种情况,我想了一个办法,就是使用系统的定位,在地图界面添加一个方向的图标,

- (void)viewDidLoad {

//版本号

if ([[UIDevice currentDevice].systemVersion doubleValue] = 8.0) {

//主动请求权限

[self.mgr requestAlwaysAuthorization];

}

if ([[UIDevice currentDevice].systemVersion doubleValue] = 9) {

self.mgr.allowsBackgroundLocationUpdates = YES;

}

//对系统定位进行设置

self.mgr.delegate = self;

[self.mgr startUpdatingLocation];

//开始监听(开始获取位置)

[self.mgr startUpdatingHeading];

}

//pragma mark -用户方向更新后,会调用此函数

- (void)locationManager:(CLLocationManager *)manager didUpdateHeading:(CLHeading *)newHeading {

// 将获取到的角度转为弧度 = (角度 * π) / 180;

CGFloat angle = newHeading.magneticHeading * M_PI / 180;

// 旋转图片

self.compasspointer.transform = CGAffineTransformMakeRotation(-angle);

}

//pragma mark - 懒加载

- (CLLocationManager *)mgr

{

if (!_mgr) {

_mgr = [[CLLocationManager alloc] init];

}

return _mgr;

}(四)关于app切换到后台产生的问题

当app切换到后台再切换回前台,`mapView`可能会产生黑屏的情况,此时只需在

`AppDelegate.m`中的`applicationWillResignActive:(UIApplication

*)application`和`applicationDidBecomeActive:(UIApplication

*)application`添加如下代码:

- (void)applicationWillResignActive:(UIApplication *)application {

//程序将要进入后台

[BMKMapView willBackGround];

}

- (void)applicationDidBecomeActive:(UIApplication *)application {

//程序进入前台

[BMKMapView didForeGround];

}

(五)关于BMKLocationServiceDelegate

设置定位的委托有如下两种方式:

- 方式1:

- (void)viewDidLoad {

[super viewDidLoad];

_mapView.delegate = self;

_locService.delegate = self;

}

-(void)viewWillDisappear:(BOOL)animated {

[super viewWillDisappear:animated];

_locService.delegate = nil;

}

- 方式2

-(void)viewWillDisappear:(BOOL)animated {

[super viewWillDisappear:animated];

_locService.delegate = nil;

}

- (void)viewWillAppear:(BOOL)animated {

[super viewWillAppear:animated];

_locService.delegate = self;

}

上面两种方式的区别:

果在viewDidLoad里写定位委托的话,加载完mapView后,定位当前位置是可以正常显示,并且可以随着位置的变化,定位点也随之发生变化.如

果切换到后台,然后再切换回mapView界面,定位点还是会变化.但是会产生一个问题,当点击别的tabbar,切换到别的界面后,再切换回

mapView界面,定位点就不再随着位置的变化而发生变化了.

如果采用方式2的话,就会避免这种问题.

  • 评论列表:
  •  访客
     发布于 2022-07-16 08:54:17  回复该评论
  • cService.distanceFilter = 10;//设置定位精度_locService.desiredAccuracy = kCLLocationAccuracyBest;//开启定位服务[_locService sta
  •  访客
     发布于 2022-07-16 16:09:43  回复该评论
  • UIApplication *)application {//程序将要进入后台 [BMKMapView willBackGround];}- (void)applicationDidBecomeActive:(UIApp
  •  访客
     发布于 2022-07-16 08:10:44  回复该评论
  • dLocationUpdates = YES;}//设置定位的状态_mapView.userTrackingMode = BMKUserTrackingModeNone;//显示定位图层_mapView.showsUserLocation
  •  访客
     发布于 2022-07-16 11:25:07  回复该评论
  • 果切换到后台,然后再切换回mapView界面,定位点还是会变化.但是会产生一个问题,当点击别的tabbar,切换到别的界面后,再切换回mapView界面,定位点就不再随着位置的变化而发生变化了.如果采用方式2的话,就会避免这种问题.
  •  访客
     发布于 2022-07-16 15:16:53  回复该评论
  • artUpdatingHeading];}//pragma mark -用户方向更新后,会调用此函数- (void)locationManager:(CLLocationManager *)manager didUpdateHeading:(CLHead

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

Copyright Your WebSite.Some Rights Reserved.