[iOS]高德地图SDK开发--准备篇

作者: 流火绯瞳 | 来源:发表于2016-08-07 18:12 被阅读2236次

    本文是对高德地图SDK使用的总结,对于高德地图不做过多介绍,可直接登录其官网开放平台进行了解;

    PS: 这里主要是讲解地图使用的准备工作,最后,以显示地图并定位到当前位置来验证;对于其他的使用,可参看官方API进行设置.

    一. 准备资料

    要想使用高德地图SDK,首先需要注册成为高德地图的开发者,可到其官网开放平台进行注册,并创建一个应用,获取到开发所需的APPKey,具体步骤可参考其官方的介绍申请key

    二. 开发环境配置

    2.1 使用cocoapods集成

    对于使用cocoa pods的项目,可直接在其Podfile文件中添加如下命令:

    pod 'AMap3DMap' #3D地图SDK
    pod 'AMap2DMap' #2D地图SDK(2D地图和3D地图不能同时使用)
    pod 'AMapSearch' #搜索服务SDK
    

    根据需要添加,其中的2D和3D地图只能导入使用一个;
    然后重新执行一遍pod install即可;

    PS:如果你没有使用cocoa pods,对其感兴趣的话,可参考这篇博客学习:[iOS]CocoaPods使用小结

    2.2 手动配置
    • 导入地图文件
      在高德的官网开放平台下载地图的SDK,这里我下载了基础framework,2D地图的framework和搜索的framework:
    高德地图SDK

    将这三个文件拖入工程即可;

    • 引入AMap.bundle资源文件
      如果需要使用高德默认的大头针等图片资源,需要手动进行添加:
      在项目工程右键,选择Add Files to ...

    在MAMapKit.framework文件下有AMap.bundle文件,选择后,add...

    添加AMap.bundle

    到此,高德地图的相关文件即添加到项目中,最终的文件目录,大概如下所示:

    红框内即新加的相关SDK
    • 引入系统库
      下面就开始添加相关的系统依赖库,具体各依赖库的作用可到官网介绍查看,这里只给出所需要添加的依赖库:
    SDK相关系统依赖库

    在工程设置的Build Phases下的Link Binary With Libraries添加以下系统依赖库

    UIKit.framework
    Foundation,framework
    CoreGraphics.framework
    QuartzCore.framework
    CoreLocation.framework
    CoreTelephony.framework
    SystemConfiguration.framework
    Security.framework
    libz.tbd
    libstdc++.6.0.9.tbd
    libc++.tbd

    添加完成后的文件目录大概如下:


    添加系统依赖库
    • 配置文件
      申请访问用户位置权限
      在info.plist文件中添加以下字段:

    NSLocationAlwaysUsageDescription 永远访问用户位置
    NSLocationWhenInUseUsageDescription 在应用使用期间访问用户位置
    设置其中一个即可!类型为String;

    设置位置权限

    iOS9之后,需要配置网络请求方式才能正常使用地图,在info.plist文件中,添加以下字段:

    <key>NSAppTransportSecurity</key>
    <dict>
        <key>NSAllowsArbitraryLoads</key>
        <true/>
    </dict>
    

    使之可以使用HTTP请求;

    PS:如果需要吊起高德APP,需要在"Info.plist"中将高德地图App的URL scheme列为白名单,否则无法调起,配置如下:

    <key>LSApplicationQueriesSchemes</key>
    <array>
        <string>iosamap</string>
    </array>
    

    (这里不需要吊起高德APP,不用添加此字段)
    到此,相关的文件添加完毕,接下来,就可以直接使用相关的API了.

    三. 相关API的使用

    在需要使用地图的地方引入以下头文件:

    #import <AMapFoundationKit/AMapFoundationKit.h>
    #import <MAMapKit/MAMapKit.h>
    #import <AMapSearchKit/AMapSearchKit.h>//搜索使用
    

    然后设置一个全局的地图对象指针:

    {
        MAMapView *_mapView;
    }
    

    添加如下初始化代码:

    // 验证APPKey
    [AMapServices sharedServices].apiKey = APIKey;
        // 实例化地图对象
        _mapView = [[MAMapView alloc]initWithFrame:self.view.bounds];
        _mapView.delegate = self;
        // 不显示罗盘
        _mapView.showsCompass = NO;
        //    // 显示比例尺
        _mapView.showsScale = YES;
        // 地图缩放等级
        _mapView.zoomLevel = 16;
        // 开启定位
        _mapView.showsUserLocation = YES;
        
        [self.view addSubview:_mapView];
    
    

    这样就显示了一个2D地图
    设置代理后,实现如下代理方法,并添加如下代码,则地图会定位到当前的位置:

    #pragma mark - MAMapViewDelegate
    - (void)mapView:(MAMapView *)mapView didUpdateUserLocation:(MAUserLocation *)userLocation updatingLocation:(BOOL)updatingLocation
    {
        [_mapView setCenterCoordinate:CLLocationCoordinate2DMake(userLocation.location.coordinate.latitude, userLocation.location.coordinate.longitude)];
    }
    

    如果,能够正常显示地图,且能定位到当前位置,说明地图已能正常使用,根据自己的需求添加相应的功能即可!!

    相关文章

      网友评论

      • 缪雨轩:您好,按着您的步骤我在app中成功调用并显示了地图,但是在设置代理后并没有定位到当前位置。
        缪雨轩:@流火绯瞳 现在的状态是第一次进app会询问一下是否可以获取当前位置,点击allow之后确实获取了但是背景是空的,不显示地图
        缪雨轩:@流火绯瞳 @interface ViewController ()<MAMapViewDelegate>
        {
        MAMapView *_mapView;
        }
        @end
        添加了代理但是这样是不是定义的全局的变量
        流火绯瞳:代理走了么?还有,要用全局的变量
      • 少年_如他:楼主 我使用cocopods导入的时候出现如下问题,请问是怎么回事呢?
        用的coocpods集成的高德定位的SDK,有个问题,当我在AppDelegate 导入头文件的时候,系统不报错,但是当我是用高德代码: [AMapLocationServices sharedServices].apiKey = @"xxxxxxxxxx"; 这句话的时候,也不报错。但是编译的时候报错。


        错误为:Undefined symbols for architecture x86_64:
        "_OBJC_CLASS_$_AMapServices", referenced from:
        objc-class-ref in AppDelegate.o
        ld: symbol(s) not found for architecture x86_64
        clang: error: linker command failed with exit code 1 (use -v to see invocation)

        流火绯瞳:@少年_如他 不知道你具体是什么情况, 你可以看看这个http://blog.csdn.net/lqq200912408/article/details/51193327 能不能解决
        少年_如他:@流火绯瞳 是真机
        流火绯瞳:@少年_如他 用真机试试
      • 不可以被嘲笑的大树:可以咨询下楼主怎样能提高德地图画线速度么 就像摩拜单车那种 画线速度快的惊人 比正常的画线快太多 不知道该怎样做?
        贾梦阳:@不可以被嘲笑的大树 viewDidLoad中添加标记点annotation, 在viewDidAppear进行路径规划,别放按钮划线就很快,
        流火绯瞳:@不可以被嘲笑的大树 抱歉,这个没有研究过

      本文标题:[iOS]高德地图SDK开发--准备篇

      本文链接:https://www.haomeiwen.com/subject/pnelsttx.html