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

重要:为进一步采取加强对最终用户个人信息的安全保护措施,从定位SDK v2.0.2版本起,请开发者务必确保调用SDK任何接口前先调用隐私合规接口setAgreePrivacy,否则可能会无法正常使用相关功能。具体可参考开发指南-注册和获取秘钥-iOS定位SDK隐私合规接口。

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

iOS定位SDK已适配iOS 16,开发者可放心使用。

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) {
//获取经纬度和该定位点对应的位置信息
}];
连续定位
简介
百度地图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{
}
后台定位
简介
百度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{
}
全球定位
简介
百度地图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) {
}];
地理围栏
简介
百度地图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;
}
使用须知
百度地图iOS定位SDK对非商业目的的开发者是不收取任何费用的,接口使用无次数限制。
如您以商业目的(包括但不限于对第三方用户收费、项目投标,以及其他直接或间接获取收益或利益)使用本平台服务,则用户须要事先获得本平台"商用授权"许可。 平台商用授权的授权对象为公司主体。授权成功后,您将会收到平台提供的书面版商用授权书(附带百度公司签章)。

商业目的产品使用前请参考使用须知
在您使用百度地图iOS定位SDK之前,请先阅读并同意百度地图开放平台服务条款中的各项内容,并申请申请密钥(AK)才可使用。

下一篇

获取密钥

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