全部服务产品
开发者频道
定价
登录
显示定位
下载开发文档
展示定位

定位的展示与定位的获取方式无关。展示定位功能位于“基础地图(Map)”功能模块。 控制定位展示的核心代码如下:

//以下_mapView为BMKMapView对象
//显示定位图层
_mapView.showsUserLocation = YES;

效果图如下:

xsdw001.png
获取定位信息

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文档

注意:iOS定位SDK返回纬度默认为国测局坐标系BMKLocationCoordinateTypeGCJ02,iOS地图SDK默认全局坐标系为百度坐标系BMKLocationCoordinateTypeBMK09LL
定位模式设置

BMKMapView的定位模式(userTrackingMode)有4种。

普通定位模式

显示我的位置,我的位置图标和地图都不会旋转

_mapView.userTrackingMode = BMKUserTrackingModeNone;

效果如下图:

IMG_0287.png

定位方向模式

显示我的位置,我的位置图标会旋转,地图不会旋转

_mapView.userTrackingMode = BMKUserTrackingModeHeading;

效果如下图:

xsdw003.png

定位跟随模式

我的位置始终在地图中心,我的位置图标会旋转,地图不会旋转

_mapView.userTrackingMode = BMKUserTrackingModeFollow;

效果如下图:

IMG_0288.png

定位罗盘模式

我的位置始终在地图中心,我的位置图标和地图都会跟着旋转

_mapView.userTrackingMode = BMKUserTrackingModeFollowWithHeading;

效果如下图:

IMG_0289.png
定位图标和精度圈自定义设置

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"];

效果图如下:

xsdw006.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;
1.整体自定义图标
param.locationViewImageNew = [UIImage imageNamed:@"icon_car"];

运行效果:

2.整体自定义GIF
param.locationViewGifImageFilePath = [NSString stringWithFormat:@"%@/6.gif", [NSBundle mainBundle].resourcePath];
param.locationViewImageSizeScale = 2;

运行效果:

3.箭头模式图标(注:1.剪头模式不适合普通定位方式(只展示中心自定义图片,不展示箭头),仅适用于方向、跟随、罗盘方式 2.中心图片不旋转 3.默认有向内呼吸效果)
param.isLocationArrowModeCustom = YES;
param.locationViewCenterImage = [UIImageimageNamed:@"icon_car"];
param.locationViewCenterImageSizeScale = 1.5;
param.locationViewAroundArrowsImageScale = 3;
param.locationViewAroundArrowsImage = [UIImageimageNamed:@"loc_cur_outdot"];

运行效果:

4.箭头模式GIF(注:1.剪头模式不适合普通定位方式(只展示中心自定义图片,不展示箭头),仅适用于方向、跟随、罗盘方式 2.中心GIF不旋转 3.默认有向内呼吸效果)
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"];

运行效果:

5.无呼吸效果(默认YES,不适合普通定位方式,仅适用于方向、跟随、罗盘方式 )
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;

运行效果:

精度圈设置

//设置显示精度圈,默认YES
param.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];

效果如下图:

IMG_0290.png

上一篇

切换地图类型

下一篇

室内地图

本篇文章对您是否有帮助?