本人花了点时间集成了高德地图的几乎所有的功能,包含:地图的显示、地图的绘制、地图的定位、地图的POI数据检索、地图的线路规划、地图导航等下载地址如下https://github.com/xiayuanquan/AliMapKit.git,觉得有用就点个star吧!!!

一、介绍

地图定位技术越来越成熟,包括定位(地理编码和反编码)、跟踪(围栏和区域)、POI检索、导航、路线规划(出行)等等,极大的方便了人们的衣食住行。当然,做地图SDK的公司不在少数。其中最出名的当属百度的百度地图、阿里的高德地图,他们的SDK都做的很不错,封装性高,集成简单。做过百度地图,现在来搞搞高德地图,据说更灵敏性。

二、准备

(1)去高德地图开发网站注册账号并登陆:http://lbs.amap.com

(2)去控制台创建应用,获取AppKey,在代码中需要使用它激活SDK

(3)去开发文档中,找到iOS这块的地图相关技术,点进行按照文档步骤一步步集成即可(包含各种功能,绝对够你用)

三、在plist配置字段

定位权限

NSLocationAlwaysUsageDescription:一直定位
NSLocationWhenInUseUsageDescription:需要时定位

ATS设置:Https协议

四、下载SDK,开始集成

建议使用pod集成,安全快速,它会自动帮你添加各种依赖库

Podfile

platform :ios, '8.0' #手机的系统
target 'YourProjectTarget' do #工程名字
pod 'AMapLocation' #定位 SDK
end

teminal终端安装

$pod install  //安装

五、开始使用(文档写的相当具体,使用过程都差不多,手贱随便写了一个过程,看文档看文档。。。。。。。)

<1>单次定位(app启动后只会定位一次)

引入头文件

//引入AMapFoundationKit.h和AMapLocationKit.h这两个头文件:
#import <AMapFoundationKit/AMapFoundationKit.h>
#import <AMapLocationKit/AMapLocationKit.h>

配置Key

//在调用定位时,需要添加Key,需要注意的是请在 SDK 任何类的初始化以及方法调用之前设置正确的 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";

设置期望定位精度

//由于苹果系统的首次定位结果为粗定位,其可能无法满足需要高精度定位的场景。
//所以,高德提供了 kCLLocationAccuracyBest 参数,设置该参数可以获取到精度在10m左右的定位结果,但是相应的需要付出比较长的时间(10s左右),越高的精度需要持续定位时间越长。
//推荐:kCLLocationAccuracyHundredMeters,一次还不错的定位,偏差在百米左右,超时时间设置在2s-3s左右即可。 //高精度:kCLLocationAccuracyBest,可以获取精度很高的一次定位,偏差在十米左右,超时时间请设置到10s,如果到达10s时没有获取到足够精度的定位结果,会回调当前精度最高的结果。
//带逆地理信息的一次定位(返回坐标和地址信息)
[self.locationManager setDesiredAccuracy:kCLLocationAccuracyHundredMeters];
//定位超时时间,最低2s,此处设置为2s
self.locationManager.locationTimeout =;
//逆地理请求超时时间,最低2s,此处设置为2s
self.locationManager.reGeocodeTimeout = ;
//带逆地理信息的一次定位(返回坐标和地址信息)
[self.locationManager setDesiredAccuracy:kCLLocationAccuracyBest];
//定位超时时间,最低2s,此处设置为10s
self.locationManager.locationTimeout =;
//逆地理请求超时时间,最低2s,此处设置为10s
self.locationManager.reGeocodeTimeout = ;

请求定位并拿到结果

//调用 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);
}
}];

<2>后台定位(app在后台进行定位)

文档链接:http://lbs.amap.com/api/ios-location-sdk/guide/get-location/backgroundlocation/#header-file

<3>持续定位(app启动后会一直定位)

文档链接:http://lbs.amap.com/api/ios-location-sdk/guide/get-location/seriallocation/

<4>地理围栏(当设备进入、离开该区域时,可以接收到消息通知)

文档链接:http://lbs.amap.com/api/ios-location-sdk/guide/additional-func/local-geofence/

<5>位置区域判断(判断是否在大陆或以外区域)

文档链接:http://lbs.amap.com/api/ios-location-sdk/guide/additional-func/amap-calculate-tool/

...........

...........

...........等等

六、SDK中几个重要的头文件介绍

注意1:这里面介绍的POI是使用高德地图App自己的功能,在plist配置后,真机测试时会自动打开该app

注意2:这里面介绍的POI是自定义检索(一般都是用这个)

注意3:这里面介绍的是导航所用全部类文件

七、我在项目中用到的定位

给AppDelete创建了一个分类,运行时绑定属性。app启动后可以在需要的地方启动定位,然后通过block可以回传到任何需要经纬度位置的控制器中

.h文件

//
// AppDelegate+DDLocation.h
// BiaoJiePay
//
// Created by 夏远全 on 16/11/21.
// Copyright © 2016年 广州东德科技. All rights reserved.
// #import "AppDelegate.h" /**
* 声明block,传递经纬度、反编码、定位是否成功、显示框
*/
typedef void (^LocationPosition)(CLLocation *currentLocation,AMapLocationReGeocode *regeocode,BOOL isLocationSuccess,MBProgressHUD *hud); @interface AppDelegate (DDLocation) @property (copy,nonatomic)LocationPosition locationBlock; //定位到位置的block
@property (strong,nonatomic)AMapLocationManager *locationManager; //管理者 //启动定位服务
-(void)startLocation; //接收位置block
-(void)receiveLocationBlock:(LocationPosition)block; @end

.m文件

//
// AppDelegate+DDLocation.m
// BiaoJiePay
//
// Created by 夏远全 on 16/11/21.
// Copyright © 2016年 广州东德科技. All rights reserved.
// #import "AppDelegate+DDLocation.h" static const NSString *locationBlockKey = @"locationBlockKey";
static const NSString *locationManagerKey = @"locationManagerKey"; @implementation AppDelegate (DDLocation) /**
* 动态关联属性
*/
-(void)setLocationBlock:(LocationPosition)locationBlock{ objc_setAssociatedObject(self, &locationBlockKey , locationBlock, OBJC_ASSOCIATION_RETAIN);
} -(LocationPosition)locationBlock{ return objc_getAssociatedObject(self, &locationBlockKey);
} -(void)setLocationManager:(AMapLocationManager *)locationManager{ objc_setAssociatedObject(self, &locationManagerKey , locationManager, OBJC_ASSOCIATION_RETAIN);
} -(AMapLocationManager *)locationManager{ return objc_getAssociatedObject(self, &locationManagerKey);
} /**
* 启动定位服务
*/
-(void)startLocation{ //1、注册高德地图APPKey
[AMapServices sharedServices].apiKey = @"ff223cc0xxxxxxxxxxxx"; //2、设置定位精度
self.locationManager = [[AMapLocationManager alloc] init];
// 带逆地理信息的一次定位(返回坐标和地址信息)
[self.locationManager setDesiredAccuracy:kCLLocationAccuracyHundredMeters];
// 定位超时时间,最低2s,此处设置为2s
self.locationManager.locationTimeout = ;
// 逆地理请求超时时间,最低2s,此处设置为2s
self.locationManager.reGeocodeTimeout = ; //3.创建定位管理者
//带逆地理(返回坐标和地址信息。将下面代码中的 YES改成NO,则不会返回地址信息。
MBProgressHUD *hud = [MBProgressHUD showMessage:@"正在定位"];
[self.locationManager requestLocationWithReGeocode:YES completionBlock:^(CLLocation *location, AMapLocationReGeocode *regeocode, NSError *error) { if (error){
if (error.code == AMapLocationErrorLocateFailed){
self.locationBlock(nil, nil, NO, nil); return;
}
}
NSDDLog(@"经度longitude:%f",location.coordinate.longitude); //经度
NSLog(@"纬度latitude:%f",location.coordinate.latitude); //纬度
//逆向编码、传值(定位成功)
NSLog(@"位置:%@",regeocode);
if(regeocode){ self.locationBlock(location, regeocode, YES, nil); }
}];
} //接收block
-(void)receiveLocationBlock:(LocationPosition)block{
if (block) {
self.locationBlock = [block copy];
}
}
@end

在控制器获取位置

//获取当前城市和经纬度
[appdelegate receiveLocationBlock:^(CLLocation *currentLocation, AMapLocationReGeocode *regeocode, BOOL isLocationSuccess, XYQProgressHUD *hud) {
[hud hide:YES];
if(isLocationSuccess) {
[MBProgressHUD showSuccess:@"定位成功"];
if(regeocode.city){
[_leftItem setPulicTitle:[regeocode.city substringToIndex:]];//显示当前城市
}
}else{
[MBProgressHUD showError:@"定位失败"];//显示默认城市
}
self.currentLocation = currentLocation;
self.currentCity = [regeocode.city copy];
}];

注明:本人原创,希望有帮助

欢迎关注github:https://github.com/xiayuanquan

本人花了点时间集成了高德地图的几乎所有的功能,包含:地图的显示、地图的绘制、地图的定位、地图的POI数据检索、地图的线路规划、地图导航等下载地址如下:https://github.com/xiayuanquan/AliMapKit.git,觉得有用就点个star吧!!!

iOS:高德地图的使用的更多相关文章

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

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

  2. iOS高德地图让指定区域或者点显示在屏幕中间

    对于高德地图也是一个新手,很多功能看文档,问技术 或者高德群里讨论  群号:204668425 在我们需求中绘制的有 圆 折线 不规则图形 方式,打开地图指定的绘制图形置于屏幕中间 1.首先创建一个数 ...

  3. iOS 高德地图轨迹回放的 思路, 及方法

    // 开始,公司要求制作一段跑步轨迹 在地图上的 动画回放, 传入一段经纬度, 开始一想,这不是很简单吗, 高德地图有可以把经纬度转换成坐标点的方法 /** * @brief 将经纬度转换为指定vie ...

  4. iOS - 高德地图步行线路规划多点多条线路

    项目集成高德地图遇到的问题: 高德地图的官方步行导航只针对单个起始点单条线路,驾车导航才有途径点多线路.现在项目是要步行导航多个点多条线路

  5. iOS高德地图使用-搜索,路径规划

    项目中想加入地图功能,使用高德地图第三方,想要实现确定一个位置,搜索路线并且显示的方法.耗了一番功夫,总算实现了. 效果 WeChat_1462507820.jpeg 一.配置工作 1.申请key 访 ...

  6. iOS高德地图自定义annotation添加不同图片

    1.model类里面添加index #import <MAMapKit/MAMapKit.h> #import <AMapSearchKit/AMapCommonObj.h> ...

  7. iOS高德地图SDK定位和搜索附近信息的具体使用

    1.显示地图.定位.显示当前位置. 导入你需要的功能的头文件,申明全局变量,代理方法等等.   初始化地图,在控制器即将显示额时候打开定位和跟踪用户,这里对参数不懂的话康忙进去都有注释.   对了.i ...

  8. iOS - 高德地图将地图的多点连线

    @property (nonatomic, strong) MAPolyline *commonPoly; #pragma mark -- 将地图的点连线 - (void)createBrokenLi ...

  9. IOS原生地图与高德地图

    原生地图 1.什么是LBS LBS: 基于位置的服务   Location Based Service 实际应用:大众点评,陌陌,微信,美团等需要用到地图或定位的App 2.定位方式 1.GPS定位  ...

随机推荐

  1. AngularJS进阶学习

    参考:http://***/class/54f3ba65e564e50cfccbad4b 1. AJAX:Asynchronous JavaScript and XML(异步的 JavaScript ...

  2. Leetcode Unique Binary Search Trees

    Given n, how many structurally unique BST's (binary search trees) that store values 1...n? For examp ...

  3. ACM: 限时训练题解-Street Lamps-贪心-字符串【超水】

    Street Lamps   Bahosain is walking in a street of N blocks. Each block is either empty or has one la ...

  4. [Codeforces] Round #320 (Div.2)

    1.前言 虽然这次我依旧没有参加正式比赛,但是事后还是看了看题目的...一般不怎么刷Codeforces. A.Raising Bacteria You are a lover of bacteria ...

  5. jquery.autocomplete在火狐下的BUG解决

    该插件在火狐下使用拼音输入法输入,回车后无法即使响应事件,需要再输入别的字母才会响应事件     主要原因:   该插件响应主要监听了keydown事件   其他浏览器在打开中文输入法的情况下输入的拼 ...

  6. ios推送:本地通知UILocalNotification

    Notification是智能手机应用编程中非常常用的一种传递信息的机制,而且可以非常好的节省资源,不用消耗资源来不停地检查信息状态(Pooling),在iOS下应用分为两种不同的Notificati ...

  7. IOS 蓝牙相关-连接外设的代码实现(2)

    我们具体说明一下中心模式的应用场景.主设备(手机去扫描连接外设,发现外设服务和属性,操作服务和属性的应用.一般来说,外设(蓝牙设备,比如智能手环之类的东西), 会由硬件工程师开发好,并定义好设备提供的 ...

  8. 20145330孙文馨 《Java程序设计》第二周学习总结

    20145330孙文馨第二周学习总结 第二周相比于第一周对java语言有了深一点的了解,也意识到多敲代码才是学习计算机语言的最好方法. 教材内容总结 类型.变量与运算符 *基本类型 整数(short. ...

  9. SolrCloud-5.2.1 集群部署及测试

    一. 说明 Solr5内置了Jetty服务,所以不用安装部署到Tomcat了,网上部署Tomcat的资料太泛滥了. 部署前的准备工作: 1. 将各主机IP配置为静态IP(保证各主机可以正常通信,为避免 ...

  10. Java中的super与this解析

    好了,现在开始讨论this&super这两个关键字的意义和用法. 在Java中,this通常指当前对象,super则指父类的.当你想要引用当前对象的某种东西,比如当前对象的某个方法,或当前对象 ...