iOS定位SDK
重要:为进一步采取加强对最终用户个人信息的安全保护措施,从定位SDK v2.0.2版本起,请开发者务必确保调用SDK任何接口前先调用隐私合规接口setAgreePrivacy,否则可能会无法正常使用相关功能。具体可参考开发指南-注册和获取秘钥-iOS定位SDK隐私合规接口。
产品简介
百度地图iOS定位SDK,是百度地图开放平台面向广大iOS端移动应用开发者全新推出的一款定位服务产品。开发者在自己的iOS移动应用中集成定位SDK,可轻松实现获取当前位置信息的功能。
百度地图iOS定位SDK以iOS系统定位能力为基础,在此基础之上,面向广大开发者提供了更多丰富功能,包括:地址解析、位置描述、移动热点识别、地理围栏、国内外位置判断等功能。
iOS定位SDK已适配iOS 15,开发者可放心使用。
iOS定位SDK在iOS14及之后对系统新推出的定位精度等级功能进行了适配,开发者可参照开发文档进行集成。
- 单次定位
简介百度地图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对非商业目的的开发者是不收取任何费用的,接口使用无次数限制。
如您以商业目的(包括但不限于对第三方用户收费、项目投标,以及其他直接或间接获取收益或利益)使用本平台服务,则用户须要事先获得本平台"商用授权"许可。 平台商用授权的授权对象为公司主体。授权成功后,您将会收到平台提供的书面版商用授权书(附带百度公司签章)。
商业目的产品使用前请参考使用须知。
在您使用百度地图iOS定位SDK之前,请先阅读并同意百度地图开放平台服务条款中的各项内容,并申请申请密钥(AK)才可使用。
开始使用