开发 iOS 定位SDK 开发指南 获取位置 持续定位

持续定位 最后更新时间: 2021年01月22日

iOS定位SDK提供的持续定位功能获取定位数据(地图SDK可以将获取的数据进行展示),与CLLocationManager的使用方法类似。

实现持续定位的步骤如下:

第 1 步,引入头文件

在调用定位功能的类中引入AMapFoundationKit.h和AMapLocationKit.h这两个头文件,注意Swift需要在桥接文件中引入头文件:

#import <AMapFoundationKit/AMapFoundationKit.h>

#import <AMapLocationKit/AMapLocationKit.h>
//在桥接文件中引入头文件
#import <AMapFoundationKit/AMapFoundationKit.h>

#import <AMapLocationKit/AMapLocationKit.h>

第 2 步,配置Key

在调用定位时,需要添加Key,需要注意的是请在 SDK 任何类的初始化以及方法调用之前设置正确的 Key。

如果您使用的是定位SDK v2.x版本需要引入基础 SDK AMapLocationKit.framework ,设置apiKey的方式如下:

iOS 定位SDK v2.x版本设置 Key:

[AMapServices sharedServices].apiKey =@"您的key";
AMapServices.shared().apiKey = "您的key"

如果您使用的是定位SDK v1.x版本,请您尽快更新。

iOS 定位SDK v1.x版本设置 Key:

[AMapLocationServices sharedServices].apiKey =@"您的key";
AMapLocationServices.shared().apiKey = "您的key"

第 3 步,初始化

初始化AMapLocationManager对象,设置代理。代码如下:

- (void)viewDidLoad
{
    self.locationManager = [[AMapLocationManager alloc] init];
    self.locationManager.delegate = self;
}
override func viewDidLoad() {
	locationManager = AMapLocationManager()
    locationManager.delegate = self
}

设置定位最小更新距离方法如下,单位米。当两次定位距离满足设置的最小更新距离时,SDK会返回符合要求的定位结果。

self.locationManager.distanceFilter = 200;
locationManager.distanceFilter = 200

设置持续定位开启地址描述返回:

注意:在海外地区是没有地址描述返回的,地址描述只在中国国内返回。

/**
 *  持续定位是否返回逆地理信息,默认NO。
 */
@property (nonatomic, assign) BOOL locatingWithReGeocode;

第 4 步,开启持续定位

调用AMapLocationManager提供的startUpdatingLocation方法实现。

代码如下:

[self.locationManager startUpdatingLocation];
locationManager.startUpdatingLocation()

如果需要持续定位返回逆地理编码信息,(自 V2.2.0版本起支持)需要做如下设置:

[self.locationManager setLocatingWithReGeocode:YES];
[self.locationManager startUpdatingLocation];
locationManager.locatingWithReGeocode = true
locationManager.startUpdatingLocation()

第 5 步,接收位置更新

实现AMapLocationManagerDelegate代理的amapLocationManager:didUpdateLocation: 方法,处理位置更新。

代码如下:

- (void)amapLocationManager:(AMapLocationManager *)manager didUpdateLocation:(CLLocation *)location
{
    NSLog(@"location:{lat:%f; lon:%f; accuracy:%f}", location.coordinate.latitude, location.coordinate.longitude, location.horizontalAccuracy);
}
func amapLocationManager(_ manager: AMapLocationManager!, didUpdate location: CLLocation!) {
    NSLog("location:{lat:\(location.coordinate.latitude); lon:\(location.coordinate.longitude); accuracy:\(location.horizontalAccuracy)};");
}

自 V2.2.0 版本起amapLocationManager:didUpdateLocation:reGeocode:方法可以在回调位置的同时回调逆地理编码信息。请注意,如果实现了amapLocationManager:didUpdateLocation:reGeocode: 回调,将不会再回调amapLocationManager:didUpdateLocation: 方法。

代码如下:

- (void)amapLocationManager:(AMapLocationManager *)manager didUpdateLocation:(CLLocation *)location reGeocode:(AMapLocationReGeocode *)reGeocode
{
    NSLog(@"location:{lat:%f; lon:%f; accuracy:%f}", location.coordinate.latitude, location.coordinate.longitude, location.horizontalAccuracy);
    if (regeocode)
      {
          NSLog(@"reGeocode:%@", regeocode);
      }
}

最后一步,停止持续定位

当不再需要定位时,调用AMapLocationManager提供的stopUpdatingLocation方法停止定位。代码如下:

[self.locationManager stopUpdatingLocation];
locationManager.stopUpdatingLocation()
返回顶部 示例中心 常见问题 智能客服 公众号
二维码