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

iOS 定位SDK

开发者在自己的iOS移动应用中集成定位SDK,可轻松实现获取当前位置信息的功能。获取当前位置信息,即我们常说的定位。其中位置信息主要包括经纬度、地址、位置描述、周边POI等

产品简介

百度地图iOS定位SDK,是百度地图开放平台面向广大iOS端移动应用开发者全新推出的一款定位服务产品。开发者在自己的iOS移动应用中集成定位SDK,可轻松实现获取当前位置信息的功能。

百度地图iOS定位SDK以iOS系统定位能力为基础,在此基础之上,面向广大开发者提供了更多丰富功能,包括:地址解析、位置描述、移动热点识别、地理围栏、国内外位置判断等功能。

  • 单次定位
    简介
    百度地图iOS定位SDK提供的单次定位方法是基于iOS系统定位,iOS系统定位会在设备移动时连续返回定位结果,百度在此基础上做了单次定位的封装。当设备可以正常联网时,定位获取经纬度信息同时,还可以获取该定位点对应的位置信息,包括省、市、区/县、详细地址、位置描述,周边POI等信息,海外同步支持。
    功能展示
    #import <BMKLocationKit/BMKLocationComponent.h>
    
    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    	// 需要注意的是请在 SDK 任何类的初始化以及方法调用之前设置正确的 AK
        [[BMKLocationAuth sharedInstance] checkPermisionWithKey:@"您的AK" authDelegate:self];
        return YES;
    }
    
    BMKLocationManager  *locationManager = [[BMKLocationManager alloc] init];
    locationManager.delegate = self;
    locationManager.coordinateType = BMKLocationCoordinateTypeBMK09LL;
    locationManager.distanceFilter = kCLDistanceFilterNone;
    locationManager.desiredAccuracy = kCLLocationAccuracyBest;
    locationManager.activityType = CLActivityTypeAutomotiveNavigation;
    locationManager.pausesLocationUpdatesAutomatically = NO;
    locationManager.allowsBackgroundLocationUpdates = YES;
    locationManager.locationTimeout = 10;
    locationManager.reGeocodeTimeout = 10;
    
    [locationManager requestLocationWithReGeocode:YES withNetworkState:YES completionBlock:^(BMKLocation * _Nullable location, BMKLocationNetworkState state, NSError * _Nullable error) {
             //获取经纬度和该定位点对应的位置信息
    }];
    
                            
    http://mapopen-pub-iossdk.cdn.bcebos.com/locsdk/video/SingleLocation.mp4
  • 连续定位
    简介
    百度地图iOS定位SDK提供了连续定位的能力,百度定位SDK在此基础上做了封装与优化。
    功能展示
    #import <BMKLocationKit/BMKLocationComponent.h>
    
    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    	// 需要注意的是请在 SDK 任何类的初始化以及方法调用之前设置正确的 AK
        [[BMKLocationAuth sharedInstance] checkPermisionWithKey:@"您的AK" authDelegate:self];
        return YES;
    }
    
    
    BMKLocationManager *locationManager = [[BMKLocationManager alloc] init];
    locationManager.delegate = self;
    locationManager.coordinateType = BMKLocationCoordinateTypeBMK09LL;
    locationManager.distanceFilter = kCLLocationAccuracyBestForNavigation;
    locationManager.desiredAccuracy = kCLLocationAccuracyBest;
    locationManager.activityType = CLActivityTypeAutomotiveNavigation;
    locationManager.pausesLocationUpdatesAutomatically = NO;
    locationManager.allowsBackgroundLocationUpdates = NO;// YES的话是可以进行后台定位的,但需要项目配置,否则会报错,具体参考开发文档
    locationManager.locationTimeout = 10;
    locationManager.reGeocodeTimeout = 10;
    
    //开始定位
    [locationManager startUpdatingLocation];
    //结束定位
    //[locationManager stopUpdatingLocation];
    
    #pragma mark - BMKLocationManagerDelegate
    /**
    *  @brief 连续定位回调函数。
    *  @param manager 定位 BMKLocationManager 类。
    *  @param location 定位结果,参考BMKLocation。
    *  @param error 错误信息。
    */
    - (void)BMKLocationManager:(BMKLocationManager * _Nonnull)manager didUpdateLocation:(BMKLocation * _Nullable)location orError:(NSError * _Nullable)error{
    
    }
    
    
    /**
    * @brief 该方法为BMKLocationManager提供设备朝向的回调方法。
    * @param manager 提供该定位结果的BMKLocationManager类的实例
    * @param heading 设备的朝向结果
    */
    - (void)BMKLocationManager:(BMKLocationManager * _Nonnull)manager
    didUpdateHeading:(CLHeading * _Nullable)heading{
    
    }
                     
    http://mapopen-pub-iossdk.cdn.bcebos.com/locsdk/video/SerialLocation.mp4
  • 后台定位
    简介
    百度iOS定位SDK提供后台持续定位的能力,可在应用退至后台的状态下,持续记录位置信息。
    功能展示
    #import <BMKLocationKit/BMKLocationComponent.h>
    
    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    	// 需要注意的是请在 SDK 任何类的初始化以及方法调用之前设置正确的 AK
        [[BMKLocationAuth sharedInstance] checkPermisionWithKey:@"您的AK" authDelegate:self];
        return YES;
    }
    
    BMKLocationManager *locationManager = [[BMKLocationManager alloc] init];
    locationManager.delegate = self;
    locationManager.coordinateType = BMKLocationCoordinateTypeBMK09LL;
    locationManager.distanceFilter = kCLLocationAccuracyBestForNavigation;
    locationManager.desiredAccuracy = kCLLocationAccuracyBest;
    locationManager.activityType = CLActivityTypeAutomotiveNavigation;
    locationManager.pausesLocationUpdatesAutomatically = NO;
    locationManager.allowsBackgroundLocationUpdates = YES;// YES的话是可以进行后台定位的,但需要项目配置,否则会报错,具体参考开发文档
    locationManager.locationTimeout = 10;
    locationManager.reGeocodeTimeout = 10;
    
    //开始定位
    [locationManager startUpdatingLocation];
    //结束定位
    //[locationManager stopUpdatingLocation];
    
    #pragma mark - BMKLocationManagerDelegate
    /**
    *  @brief 连续定位回调函数。
    *  @param manager 定位 BMKLocationManager 类。
    *  @param location 定位结果,参考BMKLocation。
    *  @param error 错误信息。
    */
    - (void)BMKLocationManager:(BMKLocationManager * _Nonnull)manager didUpdateLocation:(BMKLocation * _Nullable)location orError:(NSError * _Nullable)error{
    
    }
    
    /**
    * @brief 该方法为BMKLocationManager提供设备朝向的回调方法。
    * @param manager 提供该定位结果的BMKLocationManager类的实例
    * @param heading 设备的朝向结果
    */
    - (void)BMKLocationManager:(BMKLocationManager * _Nonnull)manager
    didUpdateHeading:(CLHeading * _Nullable)heading{
    
    }
    
    http://mapopen-pub-iossdk.cdn.bcebos.com/locsdk/video/BackgroundLoc.mp4
  • 海外定位
    简介
    百度地图iOS定位SDK提供的定位方法是基于iOS系统定位,iOS系统定位会在设备移动时连续返回定位结果。当设备可以正常联网时,定位获取经纬度信息同时,还可以获取该定位点对应的位置信息,包括省、市、区/县、详细地址、位置描述,周边POI等信息。海外同步支持。
    功能展示
    #import <BMKLocationKit/BMKLocationComponent.h>
    
    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    	// 需要注意的是请在 SDK 任何类的初始化以及方法调用之前设置正确的 AK
        [[BMKLocationAuth sharedInstance] checkPermisionWithKey:@"您的AK" authDelegate:self];
        return YES;
    }
    
    BMKLocationManager  *locationManager = [[BMKLocationManager alloc] init];
    locationManager.delegate = self;
    locationManager.coordinateType = BMKLocationCoordinateTypeBMK09LL;
    locationManager.distanceFilter = kCLDistanceFilterNone;
    locationManager.desiredAccuracy = kCLLocationAccuracyBest;
    locationManager.activityType = CLActivityTypeAutomotiveNavigation;
    locationManager.pausesLocationUpdatesAutomatically = NO;
    locationManager.allowsBackgroundLocationUpdates = YES;
    locationManager.locationTimeout = 10;
    locationManager.reGeocodeTimeout = 10;
    
    [locationManager requestLocationWithReGeocode:YES withNetworkState:YES completionBlock:^(BMKLocation * _Nullable location, BMKLocationNetworkState state, NSError * _Nullable error) {
    
    }];
    
    http://mapopen-pub-iossdk.cdn.bcebos.com/locsdk/video/OverseasLocation.mp4
  • 地理围栏
    简介
    百度地图iOS定位SDK提供的地理围栏能力,除了基本的圆形围栏外,还扩展了多边形围栏,帮助开发者实现更多灵活的地理围栏应用。
    功能展示
    #import <BMKLocationKit/BMKLocationComponent.h>
    
    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    	// 需要注意的是请在 SDK 任何类的初始化以及方法调用之前设置正确的 AK
        [[BMKLocationAuth sharedInstance] checkPermisionWithKey:@"您的AK" authDelegate:self];
        return YES;
    }
    
    #import <BaiduMapAPI_Base/BMKBaseComponent.h>
    #import <BaiduMapAPI_Map/BMKMapComponent.h>
    
    BMKMapView *mapView = [[BMKMapView alloc] initWithFrame:self.view.bounds];
    //设置mapView的代理
    mapView.delegate = self;
    //将mapView添加到当前视图中
    [self.view addSubview:mapView];
    
    
    BMKGeoFenceManager *geofenceManager = [[BMKGeoFenceManager alloc] init];
    geofenceManager.delegate = self;
    geofenceManager.pausesLocationUpdatesAutomatically = NO;
    geofenceManager.allowsBackgroundLocationUpdates = YES;
    CLLocationCoordinate2D centerGeofence =  CLLocationCoordinate2DMake(39.914682, 116.403898); //天安门
    BMKPointAnnotation *pointAnnotation = [[BMKPointAnnotation alloc]init];
    pointAnnotation.coordinate = centerGeofence;
    pointAnnotation.title = @"圆形地理围栏";
    [mapView removeAnnotations:mapView.annotations];
    [mapView addAnnotation:pointAnnotation];
    BMKCircle* circle = [BMKCircle circleWithCenterCoordinate:_ centerGeofence radius: 100];
    [mapView addOverlay:circle];
    geofenceManager.activeAction = BMKGeoFenceActiveActionStayed | BMKGeoFenceActiveActionInside | BMKGeoFenceActiveActionOutside;
    
    [geofenceManager addCircleRegionForMonitoringWithCenter:centerGeofence radius:100 coorType:BMKLocationCoordinateTypeBMK09LL customID:@"circle_1"];
    
    #pragma mark - BMKMapViewDelegate
    /**
     *根据anntation生成对应的View
     *@param mapView 地图View
     *@param annotation 指定的标注
     *@return 生成的标注View
     */
    - (BMKAnnotationView *)mapView:(BMKMapView *)mapView viewForAnnotation:(id <BMKAnnotation>)annotation
    {
        //普通annotation
        NSString *AnnotationViewID = @"renameMark";
        BMKPinAnnotationView *annotationView = (BMKPinAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:AnnotationViewID];
        if (annotationView == nil) {
            annotationView = [[BMKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:AnnotationViewID];
            // 设置颜色
            annotationView.pinColor = BMKPinAnnotationColorPurple;
            // 从天上掉下效果
            annotationView.animatesDrop = YES;
            // 设置可拖拽
            annotationView.draggable = YES;
        }
        return annotationView;
    }
    
    /**
     *根据overlay生成对应的View
     *@param mapView 地图View
     *@param overlay 指定的overlay
     *@return 生成的覆盖物View
     */
    - (BMKOverlayView *)mapView:(BMKMapView *)mapView viewForOverlay:(id <BMKOverlay>)overlay
    {
        if ([overlay isKindOfClass:[BMKCircle class]])
        {
            BMKCircleView* circleView = [[BMKCircleView alloc] initWithOverlay:overlay];
            circleView.fillColor = [[UIColor alloc] initWithRed:1 green:0 blue:0 alpha:0.1];
            circleView.strokeColor = [[UIColor alloc] initWithRed:0 green:0 blue:1 alpha:0.5];
            circleView.lineWidth = 2.0;
            return circleView;
        }
        return nil;
    }
    
    http://mapopen-pub-iossdk.cdn.bcebos.com/locsdk/video/PolyGonGeofence.mp4
使用须知

百度地图iOS定位SDK免费对外开放,接口使用无次数限制。您在使用前,需先申请密钥(AK)才可使用。
在您使用百度地图iOS定位SDK之前,请先阅读并同意百度地图开放平台服务条款中的各项内容。

开始使用