地图定位技术愈来愈成熟,包括定位(地理编码和反编码)、跟踪(围栏和区域)、POI检索、导航、路线规划(出行)等等,极大的方便了人们的衣食住行。固然,作地图SDK的公司不在少数。其中最出名的当属百度的百度地图、阿里的高德地图,他们的SDK都作的很不错,封装性高,集成简单。作过百度地图,如今来搞搞高德地图,听说更灵敏性。ios
(1)去高德地图开发网站注册帐号并登录:http://lbs.amap.comgit
(2)去控制台建立应用,获取AppKey,在代码中须要使用它激活SDKgithub
(3)去开发文档中,找到iOS这块的地图相关技术,点进行按照文档步骤一步步集成便可(包含各类功能,绝对够你用)api
NSLocationAlwaysUsageDescription:一直定位
NSLocationWhenInUseUsageDescription:须要时定位
建议使用pod集成,安全快速,它会自动帮你添加各类依赖库安全
Podfileapp
platform :ios, '8.0' #手机的系统 target 'YourProjectTarget' do #工程名字 pod 'AMapLocation' #定位 SDK end
teminal终端安装ide
$pod install //安装
<1>单次定位(app启动后只会定位一次)测试
//引入AMapFoundationKit.h和AMapLocationKit.h这两个头文件: #import <AMapFoundationKit/AMapFoundationKit.h> #import <AMapLocationKit/AMapLocationKit.h>
//在调用定位时,须要添加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 =2;
//逆地理请求超时时间,最低2s,此处设置为2s self.locationManager.reGeocodeTimeout = 2;
//带逆地理信息的一次定位(返回坐标和地址信息) [self.locationManager setDesiredAccuracy:kCLLocationAccuracyBest];
//定位超时时间,最低2s,此处设置为10s self.locationManager.locationTimeout =10;
//逆地理请求超时时间,最低2s,此处设置为10s self.locationManager.reGeocodeTimeout = 10;
//调用 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); } }];
文档连接:http://lbs.amap.com/api/ios-location-sdk/guide/get-location/backgroundlocation/#header-file网站
文档连接:http://lbs.amap.com/api/ios-location-sdk/guide/get-location/seriallocation/ui
<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/
...........
...........
...........等等
注意1:这里面介绍的POI是使用高德地图App本身的功能,在plist配置后,真机测试时会自动打开该app
注意2:这里面介绍的POI是自定义检索(通常都是用这个)
注意3:这里面介绍的是导航所用所有类文件
.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{ //一、注册高德地图APPKey [AMapServices sharedServices].apiKey = @"ff223cc0xxxxxxxxxxxx"; //二、设置定位精度 self.locationManager = [[AMapLocationManager alloc] init]; // 带逆地理信息的一次定位(返回坐标和地址信息) [self.locationManager setDesiredAccuracy:kCLLocationAccuracyHundredMeters]; // 定位超时时间,最低2s,此处设置为2s self.locationManager.locationTimeout = 2; // 逆地理请求超时时间,最低2s,此处设置为2s self.locationManager.reGeocodeTimeout = 2; //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:2]];//显示当前城市 } }else{ [MBProgressHUD showError:@"定位失败"];//显示默认城市 } self.currentLocation = currentLocation; self.currentCity = [regeocode.city copy]; }];
欢迎关注github:https://github.com/xiayuanquan
本人花了点时间集成了高德地图的几乎全部的功能,包含:地图的显示、地图的绘制、地图的定位、地图的POI数据检索、地图的线路规划、地图导航等下载地址以下:https://github.com/xiayuanquan/AliMapKit.git,以为有用就点个star吧!!!