百度地图的使用

作者: 寒桥 | 来源:发表于2015-03-18 10:27 被阅读2219次

    最新百度地图使用注意事项(在使用中出现了引擎失败的家在错误,下边是注意事项)

    第一步、引入BaiduMapAPI.framework

    第二步、引入所需的系统

    在Xcode工程中引入CoreLocation.framework和QuartzCore.framework、 OpenGLES.framework、SystemConfiguration.framework、CoreGraphics.framework、 Security.framework。添加方式:在Xcode的Project -> Active Target ->Build Phases ->Link Binary With Libraries,添加这几个framework即可。

    第三步、环境配置

    在TARGETS->Build Settings->Other Linker Flags 中添加-ObjC。

    第四步、引入mapapi.bundle资源文件

    如果使用了基础地图功能,需要添加该资源,否则地图不能正常显示

    mapapi.bundle中存储了定位、默认大头针标注View及路线关键点的资源图片,还存储了矢量地图绘制必需的资源文件。如果您不需要使用 内置的图片显示功能,则可以删除bundle文件中的image文件夹。您也可以根据具体需求任意替换或删除该bundle中image文件夹的图片文 件。

    方法:选中工程名,在右键菜单中选择Add Files to “工程名”…,从BaiduMapAPI.framework||Resources文件中选择mapapi.bundle文件,并勾选“Copy items if needed”复选框,单击“Add”按钮,将资源文件添加到工程中。

    第五步、引入头文件

    在使用SDK的类引入头文件:

    #import <baidumapapi bmapkit.h="">//引入所有的头文件 #import <baidumapapi bmkmapview.h="">//只引入所需的单个头文件</baidumapapi></baidumapapi>

    上面都是引用百度地图文档上的内容,这里要注意第四条,.framework中居然有这些,但还是需要单独add到项目里。

    还需要在info.plist里添加(以下二选一,两个都添加默认使用NSLocationWhenInUseUsageDescription):

    NSLocationWhenInUseUsageDescription ,允许在前台使用时获取GPS的描述

    NSLocationAlwaysUsageDescription ,允许永久使用GPS的描述

    在使用时由于没有操作第4步,导致引擎初始化失败,百度的文档写的是真心不方便。写下这篇希望能给将要使用百度地图的朋友提供点帮助。

    一、使用百度地图需要注意的事项

    1、静态库中采用ObjectC++实现,因此需要您保证您工程中至少有一个.mm后缀的源文件(您可以将任意一个.m后缀的文件改名为.mm),或者在工程属性中指定编译方式,即将Xcode的Project -> Edit Active Target -> Build-> GCC4.2 - Language -> Compile Sources As设置为"Objective-C++"

    2、如果您只在Xib文件中使用了BMKMapView,没有在代码中使用BMKMapView,编译器在链接时不会链接对应符号,需要在工程属性中显式设定:在Xcode的Project -> Edit Active Target -> Build ->Linking -> Other Linker Flags中添加-ObjC

    3、授权Key的申请:新、旧Key之间不可通用,即新Key只可以使用在v2.0.2及后续版本的SDK中,旧的Key只适用于v2.0.1及之前版本的SDK;如果还没有授权Key,请申请密钥

    4、管理地图的生命周期:自2.0.0起,BMKMapView新增viewWillAppear、viewWillDisappear方法来控制BMKMapView的生命周期,并且在一个时刻只能有一个BMKMapView接受回调消息,因此在使用BMKMapView的viewController中需要在viewWillAppear、viewWillDisappear方法中调用BMKMapView的对应的方法,并处理delegate,代码如下:

    -(void)viewWillAppear:(BOOL)animated{[_mapView viewWillAppear];_mapView.delegate=self;// 此处记得不用的时候需要置nil,否则影响内存的释放}-(void)viewWillDisappear:

    -(BOOL)animated{[_mapView viewWillDisappear];_mapView.delegate=nil;// 不用时,置nil}

    5、自iOS SDK v2.5.0起,为了对iOS8的定位能力做兼容,做了相应的修改,开发者在使用过程中注意事项如下:需要在info.plist里添加(以下二选一,两个都添加默认使用NSLocationWhenInUseUsageDescription):NSLocationWhenInUseUsageDescription  ,允许在前台使用时获取GPS的描述NSLocationAlwaysUsageDescription  ,允许永久使用GPS的描述

    6、在使用Xcode6进行SDK开发过程中,需要在info.plist中添加:Bundle display name ,且其值不能为空(Xcode6新建的项目没有此配置,若没有会造成manager start failed)

    7、百度地图iOS SDK v2.5.0起,对arm64进行了支持适配,开发包体积有所增加。但根据开发者在研发过程中的选择,最终生成的APP体积并不会发生较大的变化。

    8、确认项目中添加mapapi.bundle文件以及添加方法正确,不能删除或随意更改其中files文件夹下的内容:

    注:mapapi.bundle中存储了定位、默认大头针标注View及路线关键点的资源图片,还存储了矢量地图绘制必需的资源文件。如果您不需要使用内置的图片显示功能,则可以删除bundle文件中的image文件夹。您也可以根据具体需求任意替换或删除该bundle中image文件夹的图片文件。添加方式:将mapapi.bundle拷贝到您的工程目录,直接将该bundle文件托拽至Xcode工程左侧的Groups&Files中即可。若您需要替换定位、指南针的图标,请保留原文件名称,否则不显示替换的新图片,默认大头针标注与路线关键点的新图片名称可自定义名称。

    9、注意BMKManager对象的生命周期管理,在使用地图SDK期间不能释放该对象,尤其在arc情况下注意避免提前被自动释放,否则,该对象一旦被释放,网络模块将不可用,地图无法加载,检索失败。

    10、app在前后台切换时,需要使用下面的代码停止地图的渲染和openGL的绘制:

    -(void)applicationWillResignActive:(UIApplication*)application{[BMKMapViewwillBackGround];//当应用即将后台时调用,停止一切调用opengl相关的操作}-(void)applicationDidBecomeActive:(UIApplication*)application{[BMKMapViewdidForeGround];//当应用恢复前台状态时调用,回复地图的渲染和opengl相关的操作}

    二、使用百度地图需要引进的库

    (1)引入头文件

    首先将百度MapAPI提供的头文件和静态库(.a)文件拷贝到您的工程目录下,在Xcode中添加新的文件Group,引入百度MapAPI提供的头文件(请使用Xcode 4.X以上平台)。在您需要使用百度MapAPI的文件中添加以下代码 #import"BMapKit.h"

    (2)引入静态库文件

    百度地图SDK提供了模拟器和真机两中环境所使用的静态库文件,分别存放在libs/Release-iphonesimulator和libs/Release-iphoneos文件夹下。有三种方式可以引入静态库文件:

    第一种方式:直接将对应平台的.a文件拖拽至Xcode工程左侧的Groups&Files中,缺点是每次在真机和模拟器编译时都需要重新添加.a文件;

    第二种方式:使用lipo命令将设备和模拟器的.a合并成一个通用的.a文件,将合并后的通用.a文件拖拽至工程中即可,具体命令如下:lipo -create Release-iphoneos/libbaidumapapi.a Release-iphonesimulator/libbaidumapapi.a -output libbaidumapapi.a

    第三种方式:

    1. 将API的libs文件夹拷贝到您的Application工程根目录下

    2. 在Xcode的Project -> Edit Active Target -> Build -> Linking -> Other Linker Flags中添加-ObjC

    3. 设置静态库的链接路径,在Xcode的Project -> Edit Active Target -> Build -> Search Path -> Library Search Paths中添加您的静态库目录,比如"$(SRCROOT)/../libs/Release$(EFFECTIVE_PLATFORM_NAME)",$(SRCROOT)宏代表您的工程文件目录,$(EFFECTIVE_PLATFORM_NAME)宏代表当前配置是OS还是simulator

    注:静态库中采用ObjectC++实现,因此需要您保证您工程中至少有一个.mm后缀的源文件(您可以将任意一个.m后缀的文件改名为.mm),或者在工程属性中指定编译方式,即将Xcode的Project -> Edit Active Target ->Build -> GCC4.2 - Language -> Compile Sources As设置为"Objective-C++"

    (3)引入系统framework

    百度地图SDK中提供了定位功能和动画效果,v2.0.0版本开始使用OpenGL渲染,因此您需要在您的Xcode工程中引入CoreLocation.framework和QuartzCore.framework、OpenGLES.framework、SystemConfiguration.framework、CoreGraphics.framework、Security.framework。添加方式:在Xcode的Project -> Active Target ->Build Phases ->LinkBinary With Libraries,添加这几个framework即可。

    (4)引入mapapi.bundle资源文件

    mapapi.bundle中存储了定位、默认大头针标注View及路线关键点的资源图片,还存储了矢量地图绘制必需的资源文件。如果您不需要使用内置的图片显示功能,则可以删除bundle文件中的image文件夹。您也可以根据具体需求任意替换或删除该bundle中image文件夹的图片文件。

    添加方式:将mapapi.bundle拷贝到您的工程目录,直接将该bundle文件托拽至Xcode工程左侧的Groups&Files中即

    可。若您需要替换定位、指南针的图标,请保留原文件名称,否则不显示替换的新图片,默认大头针标注与路线关键点的新图片名称可自定义名称。

    SDK资源文件里存放的有:

    资源文件

    相关文章

      网友评论

      • hrscy:请问作者,为什么我使用百度地图sdk定位的时候,在iOS9.1上,前台和后台定位都没有问题,但是在iOS88上定位就有问题,后台不能定位.请问这个问题应该怎么解决呢?
        白牛桑:@hrscy 我刚开始也是改成.mm可是还是一直崩,不过刚刚我发现不用理那段文字也没事,代码也能实现我要的功能,哈哈
        hrscy:@白牛桑 我在有地图的文件都改成.mm了
        白牛桑:@hrscy 请问你这个“1.静态库中如果有采用ObjectC++实现,那么需要您保证您工程中至少有一个.mm后缀的源文件(您可以将任意一 个.m后缀的文件改名为.mm),或者在工程属性中指定编译方式,即将XCode的Project -> Edit Active Target -> Build Setting-> GCC4.2 - Language -> Compile Sources As设置为"Objective-C++" ”是怎么解决的呢

      本文标题:百度地图的使用

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