博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[OC][地图] 高德地图之定位初探(一)
阅读量:7113 次
发布时间:2019-06-28

本文共 4033 字,大约阅读时间需要 13 分钟。

使用前的说明

高德地图开放平台的iOS定位模块网址--》

高德地图有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 中并没有使用到相关服务,请您务必查看。;c.设置key的使用方式:
    [AMapServices sharedServices].apiKey =@"您的key";

     

 

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

定位部分的正题

说明:

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

单次定位模块:()

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

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

  • 第 1 步,引入头文件
#import 
#import
  • 第 2 步,配置Key

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

如果您使用的是定位SDK v2.x版本需要引入基础 SDK  ,设置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 
- (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,此处设置为2sself.locationManager.locationTimeout =2;//   逆地理请求超时时间,最低2s,此处设置为2sself.locationManager.reGeocodeTimeout = 2;

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

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

  

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

 

转载于:https://www.cnblogs.com/blogwithstudyofwyn/p/5983648.html

你可能感兴趣的文章
兵家必争大数据,争来争去是大数据时代的话语权
查看>>
中国医疗大数据“痛点” :孤岛怎么破
查看>>
亚信安全联合国家计算机病毒应急处理中心 发起病毒疫情调查
查看>>
当Gartner说OpenStack内外交困时,我的内心是不要不要的
查看>>
快易省智:数据中心UPS四大演进方向
查看>>
框架设计之菜鸟漫漫江湖路系列 二:自学求索
查看>>
非洲一国遭攻击断网 或是黑客组织在练手
查看>>
2020年,1000亿个智能终端驱动嵌入式闪存高速发展
查看>>
黑马程序员--------Java多线程讲解笔记
查看>>
前端性能分析优化
查看>>
即将分拆为独立迈克菲的英特尔安全推出策略和架构产品
查看>>
弃Win7!教你这几招让Windows 10更加顺手好用
查看>>
苹果回应FBI:若因错因开发软件将有害于数百万人
查看>>
互联网+时代的APP医生:云智慧解读APM市场生态
查看>>
索尼PS Networks服务全球范围内宕机
查看>>
SD-WAN助力物联网,让生活更智慧
查看>>
软件测试管理工具—JIRA使用初体验
查看>>
AMD狂打鸡血逼Intel“觉醒” Zen 2架构首曝光
查看>>
成功的MES应用案例需要做好哪些项目前期工作?
查看>>
网络安全从业者的福音:思科1000万美元奖学金计划培养安全人才
查看>>