求助,该怎么用百度地图的API写一个地图

 我来答
元小翠044
2016-11-09 · TA获得超过8.2万个赞
知道大有可为答主
回答量:2.4万
采纳率:89%
帮助的人:3173万
展开全部
最新百度地图使用注意事项(在使用中出现了引擎失败的家在错误,下边是注意事项)
第一步、引入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中即
可。若您需要替换定位、指南针的图标,请保留原文件名称,否则不显示替换的新图片,默认大头针标注与路线关键点的新图片名称可自定义名称。
景联文科技
2024-06-11 广告
景联文科技为全球数千家人工智能从业公司和高校科研机构提供安全合规的人工智能训练数据国家高新技术企业、浙江省软件企业、杭州市“青蓝计划”企业、浙江省科技型中小企业、杭州市“雏鹰计划”企业、互联网金融身份认证联盟会员单位、全国信标委生物特征识别... 点击进入详情页
本回答由景联文科技提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式