高德地图SDK:5-定位SDK
高德定位SDK提供了不依赖于地图定位的定位功能,开发者可以无地图显示的场景中便捷地为应用程序添加定位功能。定位SDK提供了单次定位、连续定位、逆地理信息、地理围栏等功能。
本节以单次定位为例介绍一下高德定位SDK的使用方法。定位SDK提供的单次定位方法基于苹果定位核心,苹果定位核心会在设备移动时连续返回定位结果,高德在此基础上封装了单次定位。当设备可以正常联网时,还可以返回该定位点的对应的中国境内位置信息(包括:省、市、区/县以及详细地址)。
- 引入头文件。在调用定位功能的类中引入AMapFoundationKit.h和AMapLocationKit.h这两个头文件。
#import <AMapFoundationKit/AMapFoundationKit.h>
#import <AMapLocationKit/AMapLocationKit.h>
- 配置Key。在AppDelegate.m文件中,登记提前申请的Key。
[AMapServices sharedServices].apiKey =@"您的key";
- 设置期望定位精度。由于苹果系统的首次定位结果为粗定位,其可能无法满足需要高精度定位的场景。所以,高德提供了 kCLLocationAccuracyBest 参数,设置该参数可以获取到精度在10m左右的定位结果,但是相应的需要付出比较长的时间(10s左右),越高的精度需要持续定位时间越长。推荐使用kCLLocationAccuracyHundredMeters,偏差在百米左右,基本满足绝大多数应用的精度要求,超时时间设置在2s-3s左右即可。
-(AMapLocationManager *)locationManager{
if (_locationManager == nil) {
_locationManager = [[AMapLocationManager alloc] init];
// 带逆地理信息的一次定位(返回坐标和地址信息)
[_locationManager setDesiredAccuracy:kCLLocationAccuracyHundredMeters];
// 定位超时时间,最低2s,此处设置为2s
_locationManager.locationTimeout =2;
// 逆地理请求超时时间,最低2s,此处设置为2s
_locationManager.reGeocodeTimeout = 2;
}
return _locationManager;
}
- 请求定位并拿到结果
调用AMapLocationManager类的requestLocationWithReGeocode:completionBlock: 方法,请求一次定位。另外,在联网条件下,还可以选择在一次定位时是否返回地址信息。以下是请求带逆地理信息的一次定位,代码如下:
-(void)viewDidAppear:(BOOL)animated{
[super viewDidAppear:animated];
// 带逆地理(返回坐标和地址信息)。将下面代码中的 YES 改成 NO ,则不会返回地址信息。
[self.locationManager requestLocationWithReGeocode:YES completionBlock:^(CLLocation *location, AMapLocationReGeocode *regeocode, NSError *error) {
if (error)
{
NSLog(@"locError:{%ld - %@};", (long)error.code, error.localizedDescription);
if (error.code == AMapLocationErrorLocateFailed)
{
return;
}
}
NSLog(@"location:%@", location);
if (regeocode)
{
NSLog(@"reGeocode:%@", regeocode);
}
}];
}
文章发布时间为: August 11th , 2017 at 12:01 pm
最后编辑时间为: September 22nd , 2017 at 01:21 am
本文由 99ios 创作,转载请注明出处
最后编辑时间为: September 22nd , 2017 at 01:21 am
本文由 99ios 创作,转载请注明出处