持续定位 最后更新时间: 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()