浏览器版本低!无法浏览完整内容,建议升级或更换浏览器。

iOS 地图SDK

百度地图SDK是一套应用程序接口, 通过调用地图SDK接口,开发者可以轻松访问百度地图的服务和数据,构建功能丰富、交互性强的地图类应用程序。

定位产品简介

由于系统原因,iOS不允许使用第三方定位,因此地图SDK中的定位方法,本质上是对原生定位的二次封装。通过封装,开发者可更便捷的使用。此外,地图SDK中还提供了相应的定位图层(支持定位三态效果),帮助开发者显示当前位置信息。

百度地图开放平台在系统定位基础之上,为广大开发者全新提供了iOS端独立的定位SDK产品,欢迎广大开发者的使用。

获取定位信息

推荐使用iOS端独立的定位SDK产品来获取定位信息。在定位SDK的定位结果回调方法中,调用地图SDK的相应方法,更新地图上展示的定位图标的位置和朝向等显示效果。

展示定位

定位的展示与定位的获取方式无关。展示定位功能位于“基础地图(Map)”功能模块。

控制定位展示的核心代码如下:(完整信息请参考Demo)

//以下mapView为BMKMapView对象
//显示定位图层
mapView.showsUserLocation = YES;
//设置定位的状态为普通定位模式
mapView.userTrackingMode = BMKUserTrackingModeNone;

在定位SDK的定位结果回调中,更新地图SDK的定位展示的核心代码如下:(完成信息请参考Demo)

// self.userLocation为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];
}
定位模式

目前为止,BMKMapView的定位模式(userTrackingMode)有4种分别是:

BMKUserTrackingModeNone:

普通定位模式,显示我的位置,我的位置图标和地图都不会旋转

BMKUserTrackingModeFollow :

定位跟随模式,我的位置始终在地图中心,我的位置图标会旋转,地图不会旋转

BMKUserTrackingModeFollowWithHeading :

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

定位精度圈的自定义设置

BMKLocationViewDisplayParam类提供了定位精度圈的配置项,可以通过BMKMapView的updateLocationViewWithParam方法自定义定位精度圈,代码示例如下:

// self.mapView是BMKMapView对象
BMKLocationViewDisplayParam *param = [[BMKLocationViewDisplayParam alloc] init];
param.accuracyCircleStrokeColor = [UIColor colorWithRed:1 green:0 blue:0 alpha:0.5];
param.accuracyCircleFillColor = [UIColor colorWithRed:0 green:1 blue:0 alpha:0.3];
[self.mapView updateLocationViewWithParam:param];