iOS:高德地图的使用
本人花了点时间集成了高德地图的几乎所有的功能,包含:地图的显示、地图的绘制、地图的定位、地图的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:高德地图的使用的更多相关文章
- IOS高德地图逆地理编码定位+网络判断
先说下这功能的流程, 流程:判断用户是否联网--->获取用户地理位置经纬度--->通过经纬度去查询地理位置名称 //高德地图 @property (nonatomic, strong) ...
- iOS高德地图让指定区域或者点显示在屏幕中间
对于高德地图也是一个新手,很多功能看文档,问技术 或者高德群里讨论 群号:204668425 在我们需求中绘制的有 圆 折线 不规则图形 方式,打开地图指定的绘制图形置于屏幕中间 1.首先创建一个数 ...
- iOS 高德地图轨迹回放的 思路, 及方法
// 开始,公司要求制作一段跑步轨迹 在地图上的 动画回放, 传入一段经纬度, 开始一想,这不是很简单吗, 高德地图有可以把经纬度转换成坐标点的方法 /** * @brief 将经纬度转换为指定vie ...
- iOS - 高德地图步行线路规划多点多条线路
项目集成高德地图遇到的问题: 高德地图的官方步行导航只针对单个起始点单条线路,驾车导航才有途径点多线路.现在项目是要步行导航多个点多条线路
- iOS高德地图使用-搜索,路径规划
项目中想加入地图功能,使用高德地图第三方,想要实现确定一个位置,搜索路线并且显示的方法.耗了一番功夫,总算实现了. 效果 WeChat_1462507820.jpeg 一.配置工作 1.申请key 访 ...
- iOS高德地图自定义annotation添加不同图片
1.model类里面添加index #import <MAMapKit/MAMapKit.h> #import <AMapSearchKit/AMapCommonObj.h> ...
- iOS高德地图SDK定位和搜索附近信息的具体使用
1.显示地图.定位.显示当前位置. 导入你需要的功能的头文件,申明全局变量,代理方法等等. 初始化地图,在控制器即将显示额时候打开定位和跟踪用户,这里对参数不懂的话康忙进去都有注释. 对了.i ...
- iOS - 高德地图将地图的多点连线
@property (nonatomic, strong) MAPolyline *commonPoly; #pragma mark -- 将地图的点连线 - (void)createBrokenLi ...
- IOS原生地图与高德地图
原生地图 1.什么是LBS LBS: 基于位置的服务 Location Based Service 实际应用:大众点评,陌陌,微信,美团等需要用到地图或定位的App 2.定位方式 1.GPS定位 ...
随机推荐
- AngularJS进阶学习
参考:http://***/class/54f3ba65e564e50cfccbad4b 1. AJAX:Asynchronous JavaScript and XML(异步的 JavaScript ...
- Leetcode Unique Binary Search Trees
Given n, how many structurally unique BST's (binary search trees) that store values 1...n? For examp ...
- ACM: 限时训练题解-Street Lamps-贪心-字符串【超水】
Street Lamps Bahosain is walking in a street of N blocks. Each block is either empty or has one la ...
- [Codeforces] Round #320 (Div.2)
1.前言 虽然这次我依旧没有参加正式比赛,但是事后还是看了看题目的...一般不怎么刷Codeforces. A.Raising Bacteria You are a lover of bacteria ...
- jquery.autocomplete在火狐下的BUG解决
该插件在火狐下使用拼音输入法输入,回车后无法即使响应事件,需要再输入别的字母才会响应事件 主要原因: 该插件响应主要监听了keydown事件 其他浏览器在打开中文输入法的情况下输入的拼 ...
- ios推送:本地通知UILocalNotification
Notification是智能手机应用编程中非常常用的一种传递信息的机制,而且可以非常好的节省资源,不用消耗资源来不停地检查信息状态(Pooling),在iOS下应用分为两种不同的Notificati ...
- IOS 蓝牙相关-连接外设的代码实现(2)
我们具体说明一下中心模式的应用场景.主设备(手机去扫描连接外设,发现外设服务和属性,操作服务和属性的应用.一般来说,外设(蓝牙设备,比如智能手环之类的东西), 会由硬件工程师开发好,并定义好设备提供的 ...
- 20145330孙文馨 《Java程序设计》第二周学习总结
20145330孙文馨第二周学习总结 第二周相比于第一周对java语言有了深一点的了解,也意识到多敲代码才是学习计算机语言的最好方法. 教材内容总结 类型.变量与运算符 *基本类型 整数(short. ...
- SolrCloud-5.2.1 集群部署及测试
一. 说明 Solr5内置了Jetty服务,所以不用安装部署到Tomcat了,网上部署Tomcat的资料太泛滥了. 部署前的准备工作: 1. 将各主机IP配置为静态IP(保证各主机可以正常通信,为避免 ...
- Java中的super与this解析
好了,现在开始讨论this&super这两个关键字的意义和用法. 在Java中,this通常指当前对象,super则指父类的.当你想要引用当前对象的某种东西,比如当前对象的某个方法,或当前对象 ...