• 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 =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);
            }
        }];

    <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 = 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吧!!!

  • 相关阅读:
    linux下一步一步安装禅道项目管理工具
    tfw格式图解
    yaourt: a pacman frontend(pacman前端,翻译)
    OpenGL官方教程——着色器语言概述
    [翻译]opengl扩展教程2
    [翻译]opengl扩展教程1
    Git-it字典翻译
    解决 QtCreator 3.5(4.0)无法输入中文的问题
    Valgrind 3.11.0编译安装
    ubuntu linux 下wine的使用
  • 原文地址:https://www.cnblogs.com/XYQ-208910/p/6128915.html
Copyright © 2020-2023  润新知