定位的展示与定位的获取方式无关。展示定位功能位于“基础地图(Map)”功能模块。 控制定位展示的核心代码如下:
//以下_mapView为BMKMapView对象//显示定位图层_mapView.showsUserLocation = YES;
效果图如下:
iOS地图SDK 4.2.0版本后不再提供Location定位组件,百度地图开放平台在系统定位基础之上,为广大开发者全新提供了iOS端独立的定位SDK产品, 欢迎广大开发者的使用。 在定位SDK的定位结果回调方法中,调用地图SDK的相应方法,更新地图上展示的定位图标的位置和朝向等显示效果,具体核心代码如下:(完整代码请参考Demo中的BMKLocationModePage)
@property (nonatomic, strong) BMKUserLocation *userLocation; //当前位置对象//由于以下代理方法中分别且仅只返回heading或location信息,请开发者务必将该对象定义为全局类型,避免在以下回调用使用局部的BMKUserLocation对象,导致出现定位显示错误位置的情况。// 定位SDK中,方向变更的回调- (void)BMKLocationManager:(BMKLocationManager *)manager didUpdateHeading:(CLHeading *)heading {if (!heading) {return;}if (!self.userLocation) {self.userLocation = [[BMKUserLocation alloc] init];}self.userLocation.heading = heading;[self.mapView updateLocationData:self.userLocation];}// 定位SDK中,位置变更的回调- (void)BMKLocationManager:(BMKLocationManager *)manager didUpdateLocation:(BMKLocation *)location orError:(NSError *)error {if (error) {NSLog(@"locError:{%ld - %@};", (long)error.code, error.localizedDescription);}if (!location) {return;}if (!self.userLocation) {self.userLocation = [[BMKUserLocation alloc] init];}self.userLocation.location = location.location;[self.mapView updateLocationData:self.userLocation];}
其他定位相关的开发指南,请参考iOS定位SDK文档。
BMKMapView的定位模式(userTrackingMode)有4种。
普通定位模式
显示我的位置,我的位置图标和地图都不会旋转
_mapView.userTrackingMode = BMKUserTrackingModeNone;
效果如下图:
定位方向模式
显示我的位置,我的位置图标会旋转,地图不会旋转
_mapView.userTrackingMode = BMKUserTrackingModeHeading;
效果如下图:
定位跟随模式
我的位置始终在地图中心,我的位置图标会旋转,地图不会旋转
_mapView.userTrackingMode = BMKUserTrackingModeFollow;
效果如下图:
定位罗盘模式
我的位置始终在地图中心,我的位置图标和地图都会跟着旋转
_mapView.userTrackingMode = BMKUserTrackingModeFollowWithHeading;
效果如下图:
BMKLocationViewDisplayParam类提供了定位图层的配置项,可以通过BMKMapView的updateLocationViewWithParam方法自定义定位图层,代码示例如下:
// self.mapView是BMKMapView对象BMKLocationViewDisplayParam *param = [[BMKLocationViewDisplayParam alloc] init];//根据配置参数更新定位图层样式[self.mapView updateLocationViewWithParam:param];
定位图标设置
//定位图标名称,需要将该图片放到 mapapi.bundle/images 目录下param.locationViewImgName = @"icon_nav_bus";//用户自定义定位图标,V4.2.1以后支持param.locationViewImage = [UIImage imageNamed:@"location.png"];
效果图如下:
Since 6.5.7 iOS地图SDK新增整体自定义和箭头模式自定义,支持gif动画。
新增接口:
旧接口:只支持全局整体设置图标/// 用户自定义定位图标,V4.2.1以后支持@property (nonatomic, strong) UIImage *locationViewImage;新增接口:///是否是定位图标箭头模式自定义,YES:箭头模式自定义, NO:整体自定义,默认NO@property (nonatomic, assign) BOOL isLocationArrowModeCustom;/* 以下为定位图标整体自定义,自定义图片和gif图二选一,Gif图优先级大于图片*////新版用户自定义定位图标,since 6.5.7@property (nonatomic, strong) UIImage *locationViewImageNew;///定位图标整体自定义gif图文件路径,since 6.5.7@property (nonatomic, copy) NSString *locationViewGifImageFilePath;///定位图标整体自定义大小缩放系数,默认为1,可设置范围0.5~2.0,基于固定尺寸CGSizeMake(30, 30)缩放,since 6.5.7@property (nonatomic, assign) CGFloat locationViewImageSizeScale;/// 定位图标整体样式自定义呼吸效果,默认为NO,since 6.5.7@property (nonatomic, assign) BOOL breatheEffectOpenForWholeStyle;/* 以下为箭头模式定位图标自定义,可分别自定义中心圆点图片和箭头图片,中心图标自定义图片和gif图二选一,Gif图优先级大于图片*////箭头模式定位图标中心图片,无方向,since 6.5.7@property (nonatomic, strong) UIImage *locationViewCenterImage;///箭头模式定位图标中心圆点gif图文件路径,无方向,since 6.5.7@property (nonatomic, copy) NSString *locationViewCenterGifImageFilePath;///箭头模式定位图标中心圆点图片大小缩放系数,默认为1,可设置范围0.5~2.0,基于固定尺寸CGSizeMake(30, 30)缩放,since 6.5.7@property (nonatomic, assign) CGFloat locationViewCenterImageSizeScale;///箭头模式定位图标周边箭头轮廓图片,箭头向上为正,since 6.5.7@property (nonatomic, strong) UIImage *locationViewAroundArrowsImage;///箭头模式定位图标周边箭头轮廓图片大小缩放系数,默认为1,可设置范围0.2~3.0,基于图片大小缩放,since 6.5.7@property (nonatomic, assign) CGFloat locationViewAroundArrowsImageSizeScale;/// 箭头样式定位图标呼吸效果,默认为YES,since 6.5.7@property (nonatomic, assign) BOOL breatheEffectOpenForArrowsStyle;
param.locationViewImageNew = [UIImage imageNamed:@"icon_car"];
运行效果:
param.locationViewGifImageFilePath = [NSString stringWithFormat:@"%@/6.gif", [NSBundle mainBundle].resourcePath];param.locationViewImageSizeScale = 2;
运行效果:
param.isLocationArrowModeCustom = YES;param.locationViewCenterImage = [UIImageimageNamed:@"icon_car"];param.locationViewCenterImageSizeScale = 1.5;param.locationViewAroundArrowsImageScale = 3;param.locationViewAroundArrowsImage = [UIImageimageNamed:@"loc_cur_outdot"];
运行效果:
param.isLocationArrowModeCustom = YES;param.locationViewCenterGifImageFilePath = [NSString stringWithFormat:@"%@/6.gif", [NSBundle mainBundle].resourcePath];param.locationViewCenterImageSizeScale = 1.5;param.locationViewAroundArrowsImageScale = 3;param.locationViewAroundArrowsImage = [UIImageimageNamed:@"loc_cur_outdot"];
运行效果:
param.isLocationArrowModeCustom = YES;param.locationViewCenterGifImageFilePath = [NSString stringWithFormat:@"%@/6.gif", [NSBundle mainBundle].resourcePath];param.locationViewCenterImageSizeScale = 1.5;param.locationViewAroundArrowsImageScale = 3;param.locationViewAroundArrowsImage = [UIImageimageNamed:@"loc_cur_outdot"];param.breatheEffectOpenForArrowsStyle = NO;
运行效果:
精度圈设置
//设置显示精度圈,默认YESparam.isAccuracyCircleShow = YES;//精度圈 边框颜色param.accuracyCircleStrokeColor = [UIColor colorWithRed:1 green:0 blue:0 alpha:0.5];//精度圈 填充颜色param.accuracyCircleFillColor = [UIColor colorWithRed:0 green:1 blue:0 alpha:0.3];
效果如下图:
上一篇
下一篇
本篇文章对您是否有帮助?