使用前的说明

高德地图开放平台的iOS定位模块网址--》http://lbs.amap.com/api/ios-location-sdk/summary/

高德地图有Web端、android平台、iOS平台和Web服务&其他四个部分。

iOS平台有地图、定位、导航等5个SDK。

准备:

  1. key是必须的:(官方文档 )控制台--》添加新Key 完成。Tip:

    如何获取 Bundle Identifier:1.代码获取:NSString *bundleIdentifier = [[NSBundle mainBundle] bundleIdentifier];2.Xcode ,target中的切换到 General 标签,查看 Bundle Identifier

  2. 添加到工程中去,有手动和自动部署
    1.  手动  (手动部署官方文档)

      第 1 步:添加依赖的库 :基础 SDK AMapFoundationKit.framework和定位 SDK AMapLocationKit.framework(TARGETS->Build Phases-> Link Binary With Libaries 中点击“+”按钮)  

      第 2 步:需要引入的系统库文件 :需要引入的系统库文件有:JavaScriptcore.framework, SystemConfiguration.framework, CoreTeleohony.framework, libz.dylib, libstdc++6.09.dylib, libc++.dylib。iOS9后,需要把libz.dylib、libstdc++6.09.dylib、libc++.dylib替换成libz.tbd、libstdc++6.09.tbd、libc++.tbd         (在 TARGETS-General-Linked Frameworks and Libraries 中点击“+”)

      第 3 步:需要申请的权限

      在项目的 Info.plist 添加 NSLocationWhenInUseUsageDescription 或 NSLocationAlwaysUsageDescription 字段,根据您的业务需求,任选其一即可。

      其中:

      • NSLocationWhenInUseUsageDescription 表示应用在前台的时候可以搜到更新的位置信息。
      • NSLocationAlwaysUsageDescription 表示应用在前台和后台(suspend 或 terminated)都可以获取到更新的位置数据。
    2.  自动  (自动部署官方文档) CocoaPods spod 'AMapLocation', '~>1.0'#此处是版本号 ,添加之后项目中多了AMapFoundation和AMapLocation库。

Tip:

  基础SDK介绍:(官方文档)

  1. 相关下载中可以看到我们提供了一个新的 SDK,这个基础 SDK 中包含了 高德 iOS 地图、定位、导航等 SDK 需要的基础核心,以及必要的公共资源,是使用其他 SDK 前必须引入的基础 SDK。
  2. 使用指南:a.添加了地图、定位和导航SDK之后需要引入基础 SDK;b.(官方文档):基础 SDK 自 V1.2.0 版本后集成了 IDFA 服务,如果您的 APP 中并没有使用到相关服务,请您务必查看提交AppStore必读。;c.设置key的使用方式:
    [AMapServices sharedServices].apiKey =@"您的key";

分割线-------------------------------------------------------------------------定位正题部分来临

定位部分的正题

说明:

  1. 高德 iOS 定位 SDK 提供了不依赖于地图定位的定位功能,开发者可以无地图显示的场景中便捷地为应用程序添加定位功能。
  2. iOS定位SDK提供了单次定位、连续定位、逆地理信息、地理围栏等功能。
  3. 获取定位有三种:单次定位、后台定位和持续定位。

单次定位模块:(官方文档)

说明:iOS定位SDK提供的单次定位方法基于苹果定位核心,苹果定位核心会在设备移动时连续返回定位结果,高德在此基础上封装了单次定位并适配了iOS 6到iOS 9系统。当设备可以正常联网时,还可以返回该定位点的位置信息(包括:省、市、区/县以及详细地址)。

四个步骤:引入头文件--》配置key--》设置期望定位精度--》获取定位结果

  • 第 1 步,引入头文件
#import <AMapFoundationKit/AMapFoundationKit.h>
#import <AMapLocationKit/AMapLocationKit.h>
  • 第 2 步,配置Key

在调用定位时,需要添加Key。

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

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

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

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

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

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

Tip:

  我把设置Key放到AppDelegate里面:

#import <AMapFoundationKit/AMapFoundationKit.h>

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
//高德
[AMapServices sharedServices].apiKey = @"XXXXXX";//可以将key 宏定义下
return YES;
}

  

  • 第 3 步,设置期望定位精度

由于苹果系统的首次定位结果为粗定位,其可能无法满足需要高精度定位的场景。

所以,高德提供了 kCLLocationAccuracyBest 参数,设置该参数可以获取到最优10m左右误差的定位结果(开启GPS情况下),但是相应的需要付出比较长的时间(10s左右),您需要对待实现场景所需定位精度有个系统的认知,才可以选择更适合您App使用的期望定位精度。

推荐:kCLLocationAccuracyHundredMeters,一次还不错的定位,偏差在100米以内,耗时在2s左右。

// 带逆地理信息的一次定位(返回坐标和地址信息)
[self.locationManager setDesiredAccuracy:kCLLocationAccuracyHundredMeters];
// 定位超时时间,最低2s,此处设置为2s
self.locationManager.locationTimeout =2;
// 逆地理请求超时时间,最低2s,此处设置为2s
self.locationManager.reGeocodeTimeout = 2;

高精度:kCLLocationAccuracyBest,精度很高的一次定位,偏差在10米以内,耗时在10s左右。

// 带逆地理信息的一次定位(返回坐标和地址信息)
[self.locationManager setDesiredAccuracy:kCLLocationAccuracyBest];
// 定位超时时间,最低2s,此处设置为10s
self.locationManager.locationTimeout =10;
// 逆地理请求超时时间,最低2s,此处设置为10s
self.locationManager.reGeocodeTimeout = 10;

其余精度阈值可以通过查看参考手册得到。

  • 第 4 步,请求定位并拿到结果

调用 AMapLocationManager 的 requestLocationWithReGeocode:completionBlock: 方法,请求一次定位。

您可以选择在一次定位时是否返回地址信息(需要联网)。以下是请求带逆地理信息的一次定位,代码如下:

// 带逆地理(返回坐标和地址信息)。将下面代码中的 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);
}
}];

  

下面是正式在项目中使用:

[OC][地图] 高德地图之定位初探(一)的更多相关文章

  1. iOS判断并使用百度地图 高德地图 导航 (使用URI,不集成sdk)

    [objc] view plaincopy  1. BOOL hasBaiduMap = NO;   2.         BOOL hasGaodeMap = NO;   3.            ...

  2. iOS-调用百度地图,苹果自带地图,高德地图,谷歌地图导航方法

    - (void)actionSheet : (ServiceNetworkModel *)model{ __block NSString *urlScheme = @"demoURI://& ...

  3. IOS高德地图逆地理编码定位+网络判断

    先说下这功能的流程,  流程:判断用户是否联网--->获取用户地理位置经纬度--->通过经纬度去查询地理位置名称 //高德地图 @property (nonatomic, strong) ...

  4. (高德地图)marker定位 bug 解决总结

    项目背景: 一个项目bug,项目中用到高德地图,默认打开页面会生成一个marker(下图红色icon),然后用户拖动marker到想要的位置,并且保存. 用户反映定位不准确,在当前页面编辑的位置,到后 ...

  5. objective-c高德地图时时定位

    这篇随笔是对上一遍servlet接口的实现. 一.项目集成高德地图 应为我这个项目使用了cocopods这个第三方库管理工具,所以只需要很简单的步骤,就能将高德地图集成到项目中,如果你没使用过这工具, ...

  6. GPS定位为什么要转换处理?高德地图和百度地图坐标处理有什么不一样?

    GPS定位为什么要转换处理?高德地图和百度地图坐标处理有什么不一样? 先了解一下 高德地图 采用: GCJ-02 (不可逆) 百度百科: http://baike.baidu.com/link?url ...

  7. 使用高德地图SDK获取定位信息

    使用高德地图SDK获取定位信息 第一步: 在高德官网下载SDK,如我这里需要获取定位信息,故仅下载"定位功能" 第二步: 注册成为开发者,并创建应用获取相应的key.其中,在使用A ...

  8. android 高德地图出现【定位失败key鉴权失败】

    如题:android 高德地图出现[定位失败key鉴权失败] 原因:使用的是debug模式下的SHA1,发布的版本正确获取SHA1的方式见: 方法二使用 keytool(jdk自带工具),按照如下步骤 ...

  9. 【高德地图API】从零开始学高德JS API(七)——定位方式大揭秘

    原文:[高德地图API]从零开始学高德JS API(七)——定位方式大揭秘 摘要:关于定位,分为GPS定位和网络定位2种.GPS定位,精度较高,可达到10米,但室内不可用,且超级费电.网络定位,分为w ...

随机推荐

  1. vim - save current file with a new name but keep editing current file

    http://superuser.com/questions/414110/vim-save-a-file-as-a-different-filename-but-keep-w-as-the-curr ...

  2. Peter Norvig:自学编程,十年磨一剑

    若要在某一领域内达到专家级的水平,其关键在于"审慎地重复",也就是说,并非是机械地,一遍又一遍地练习,而是要不断地挑战自我,试图超越自身当前的水平,通过不断的尝试挑战,并在尝试的过 ...

  3. asp.net 自带的缓存

    本文导读:在.NET运用中经常用到缓存(Cache)对象.有HttpContext.Current.Cache以及HttpRuntime.Cache,HttpRuntime.Cache是应用程序级别的 ...

  4. lucence.net+盘古分词

    第一步: 添加盘古和lucence的dll引用 第二步: 拷贝Dict文件夹到项目  demo里面是Dictionaries 不过官方建议改成Dict 然后把所有项右击属性 改为“如果较新则复制” 第 ...

  5. freemarker 数据做加减计算

    controller的部分: @Controller@RequestMapping("/ContactsFrameIndex")public class ContactsFrame ...

  6. JSP中文乱码总结

    大家在JSP的开发过程中,经常出现中文乱码的问题,可能一至困扰着大家,现把JSP开发中遇到的中文乱码的问题及解决办法写出来供大家参考.首先了解一下Java中文问题的由来: Java的内核和class文 ...

  7. Android -- 常见控件的小效果

    1,EditText控件 ① 修改光标颜色 自定义drawable 创建cursor.xml文件 <?xml version="1.0" encoding="utf ...

  8. 基于webpack使用ES6新特性(转载)

    本文转载自: http://www.tuicool.com/articles/vye2ea6

  9. WCF学习目的

    WCF,window communication Foundation,是微软推出的面向服务应用的一款产品. 近来为一个WEB app前端项目写后台接口.涉及到跨域访问,服务代理等方面的内容.项目的需 ...

  10. 走进spring之springmvc实战篇(二)

    本篇继篇一之后加入了jdbc并使用了注解 篇一进行了对spingmvc的基础配置http://www.cnblogs.com/liuyanhao/p/4798989.html 首先让我们先了解下注解的 ...