浏览器版本低!无法浏览完整内容,建议升级或更换浏览器。

iOS 地图SDK

百度地图SDK是一套应用程序接口, 通过调用地图SDK接口,开发者可以轻松访问百度地图的服务和数据,构建功能丰富、交互性强的地图类应用程序。

1、使用须知

百度地图移动版API 由可让您在接受使用条款约束的情况下,在您的移动应用中显示百度地图图片;进行地点搜索、路线查询和交通流量显示等操作。
您只可使用在百度地图移动版API文档中所列明开放的API功能来对API相关服务数据的结果进行展示,不得直接存取、使用内部数据、图片、程序、模块或是任何其他百度地图的服务或功能。在接受使用条款约束的情况下,您可以在向最终用户提供其他信息的同时,使用 API 获得API相关服务数据。

百度地图开放平台面向开发者开放的产品及服务均为免费,请严格遵循“百度地图开发者服务条款”进行使用,如您满足以下使用场景“2.5 本服务面向您网站或应用是免费的,但如您就本服务进行商业使用或以其他方式直接或间接获得收益,则您需要事先获得百度的书面许可。”需要说明的是如未获得授权,百度地图开放平台也不会随意终止或干扰您的正常使用。 如需要商用授权,可按照官网流程进行申请,申请地址

2、百度地图SDK使用什么坐标系?

1) 百度地图SDK在国内(包括港澳台),输入、输出默认使用BD09坐标;定位SDK默认输出是使用GCJ02坐标。 自iOS v3.3起,支持一次声明为GCJ02坐标类型,全应用支持输入GCJ02坐标,返回GCJ02坐标。

2) 海外地区,输入为WGS84坐标。

3、什么是国测局坐标、百度坐标、WGS84坐标?

三种坐标系说明如下:
(1)WGS84:表示GPS获取的坐标;
(2)GCJ02:是由中国国家测绘局制订的地理信息系统的坐标系统。由WGS84坐标系经加密后的坐标系。
(3)BD09:为百度坐标系,在GCJ02坐标系基础上再次加密。其中bd09ll表示百度经纬度坐标,bd09mc表示百度墨卡托米制坐标;

百度地图SDK在国内(包括港澳台)使用的是BD09坐标;在海外地区,统一使用WGS84坐标。开发者在使用百度地图相关服务时,请注意选择。

4、如何从其他体系的坐标迁移到百度坐标?

百度地图开放平台提供了官方的坐标转换接口,请开发者直接选择使用。开发者切勿从非官方渠道获得坐标转换方法。各平台坐标转换方法如下:
(1)Android地图SDK:http://lbsyun.baidu.com/index.php?title=androidsdk
(2)iOS地图SDK:http://lbsyun.baidu.com/index.php?title=iossdk
(3)Web API服务:http://lbsyun.baidu.com/index.php?title=webapi

5、引擎初始化失败,地图显示空白的问题

该问题是由bundle文件没有正确添加造成的,请按照开发指南正确添加后,卸载app重新运行即可解决.
添加方式:
1)framework形式包:
选中工程名,在右键菜单中选择Add Files to "工程名"…,从BaiduMapAPI.framework||Resources文件中选择mapapi.bundle文件,并勾选"Copy items if needed"复选框,单击"Add"按钮,将资源文件添加到工程中。
2).a形式包: 添加方式:将mapapi.bundle拷贝到您的工程目录,直接将该bundle文件托拽至Xcode工程左侧的Groups&Files中即可。

6、地图只显示网格

显示网格是由地图数据没有正常获取造成的,请检查网络是否正常,鉴权是否通过

7、地图进去后显示的是天安门,怎么设置显示其它地方

设置地图中心经纬度即可

8、在BMKMapView中添加subView时,不会显示

SDK会控制BMKMapView各个子view的压盖顺序,所以不能直接将view添加到BMKMapView上,可以添加到BMKMapView的superview里,这样就可以显示了

9、在BMKMapView中添加自己的手势后,地图不能正常操作了

添加自己的手势后,SDK无法正常处理手势事件造成的。添加自定义手势时,必须设置UIGestureRecognizer的属性cancelsTouchesInView 和 delaysTouchesEnded 为NO,否则影响地图内部的手势处理

10、指南针没有显示

当地图处于正北方向时,指南针是默认隐藏的,旋转地图看看是否显示,如果还不显示,看下CompassPosition是否设置在地图frame范围内

11、获取的地图中心点经纬度为(0,0) ,屏幕坐标转经纬度时,结果为(0,0)

在下边的回调执行完后,再获取(转换)试一下
/**

  • 地图初始化完毕时会调用此接口
  • @param mapview 地图View
  • /

- (void)mapViewDidFinishLoading:(BMKMapView *)mapView;

12、如何判断地图是在执行放大缩小操作还是移动操作

通过下边两个接口,比较下地图区域改变的状态,来区分是缩放还是移动
//地图区域即将改变时会调用此接口
- (void)mapView:(BMKMapView *)mapView regionWillChangeAnimated:(BOOL)animated;
//地图区域改变完成后会调用此接口 - (void)mapView:(BMKMapView *)mapView regionDidChangeAnimated:(BOOL)animated;

13、地图截屏显示黑屏

1)地图初始化后直接截图,地图还没有准备好绘制,所以黑屏,需要在下边的回调执行完后 /**

  • 地图初始化完毕时会调用此接口
  • @param mapview 地图View
  • /

- (void)mapViewDidFinishLoading:(BMKMapView *)mapView;

2)需要放到主线程中

14、如何显示多个气泡

SDK目前的策略是,在同一时间只有一个标注处于选中状态,即显示气泡。如果想显示多个气泡,可以自定义BMKAnnotationView,将气泡做为标注的一部分进行显示即可

15、如何一直显示Annotation的气泡、泡泡、弹出层

如果想一直显示,需要自定义annotationview,将泡泡作为annotationview的一部分,一直显示

16、如何隐藏Annotation的气泡

取消选中该annotation就会隐藏起泡,BMKMapView中有相关方法:
- (void)deselectAnnotation:(id <BMKAnnotation>)annotation animated:(BOOL)animated;

17、标注点击事件只会响应一次,再次点击无法回调didSelectAnnotationView

标注在选中状态时不能被再次选中,所以就不会回调didSelectAnnotationView,取消选中后才可以被选中 取消选中方法,BMKMapView中有相关方法: - (void)deselectAnnotation:(id <BMKAnnotation>)annotation animated:(BOOL)animated;

18、如何判断点击了哪个大头针

在下边这个回调方法里,通过view来判断
- (void)mapView:(BMKMapView *)mapView didSelectAnnotationView:(BMKAnnotationView *)view;

19、如何在地图中心添加一个view,不随地图移动,类似uber的效果

可以将这个view,添加到 mapView.superview 中,view的坐标设在中心即可

20、如何选中一个标注

BMKMapView中提供的有选中标注的方法:
- (void)selectAnnotation:(id <BMKAnnotation>)annotation animated:(BOOL)animated;

21、如何实现自适应地图层级,将所有Marker放入屏幕内显示

在 BMKMapView类 中 - (void) showAnnotations: (NSArray *) annotations animated: (BOOL) animated 详细请查找BMKMapView类参考

22、定位失败、定位不准确

定位结果是由系统决定的,SDK只是封装了系统定位的结果,定位的结果和准确度sdk无法左右
另外,模拟器需要手动设置我的位置

23、地图中无法显示我的位置

首先要确定定位成功,然后需要在定位成功的回调里updateLocationData,麻烦参考下demo定位部分
/**

  • 用户位置更新后,会调用此函数
  • @param userLocation 新的用户位置
  • /


- (void)didUpdateBMKUserLocation:(BMKUserLocation *)userLocation
{
[_mapView updateLocationData:userLocation];
}

24、隐藏定位精度圈、蓝圈

参考下下边接口
/**

  • 动态定制我的位置样式
  • @param [in] locationViewDisplayParam 样式参数
  • /


- (void)updateLocationViewWithParam:(BMKLocationViewDisplayParam*)locationViewDisplayParam;

25、定位 拖动之后就又变回普通态了

v3.1.0之前版本:SDK自带定位的显示策略就是这样的,拖动后会变回普通态。可以自己使用annotation显示我的位置,这样就可以自己控制定位的显示了 v3.1.0 及之后版本: BMKUserTrackingModeHeading:在普通定位模式的基础上显示方向,即地图不会旋转,我的位置图标旋转,显示我的位置和方向(2016年10月14日 iOS 地图 SDK v 3.1.0发布)

26、定位4种模式

BMKMapView的定位模式(userTrackingMode)有4种:
BMKUserTrackingModeNone :普通定位模式,显示我的位置,我的位置图标和地图都不会旋转
BMKUserTrackingModeFollow : 定位跟随模式,我的位置始终在地图中心,我的位置图标会旋转,地图不会旋转
BMKUserTrackingModeFollowWithHeading : 定位罗盘模式,我的位置始终在地图中心,我的位置图标和地图都会跟着旋转
BMKUserTrackingModeHeading:在普通定位模式的基础上显示方向,即地图不会旋转,我的位置图标旋转,显示我的位置和方向(2016年10月14日 iOS 地图 SDK v 3.1.0发布)

27、点击定位点时,不显示 "我的位置"的气泡

隐藏我的位置气泡,设置 userLocation.title = nil; 即可

28、如何只定位一次

在成功获取定位信息后,停止定位就可以了

29、检索发送失败

检查下发起检索时鉴权完成了没有,发起检索必须是在鉴权完成后,否则会发送失败

30、检索连续发送多次请求,只收到最后一个请求的结果

一个search对象,同一时间只能进行一次检索,要同时进行多个检索,需要使用多个search对象,在回调中通过search对象来区分是哪个检索

31、驾车路径规划的途经点过多时,检索无结果

途经点过多时,服务端算路的过程比较慢,可能会造成超时,所以途经点不宜设置过多

32、定位信息怎么样定位到周围的建筑物,而不是街道信息

使用反地理编码检索,其检索结果中有poilist

33、如何得到 一个坐标点周边的主要poi点

使用反地理编码检索,其检索结果中有poilist
iOS 类参考
BMKReverseGeoCodeResult类
NSArray * _poiList

34、iOS 获取城市编码

使用BMKOfflineMap:返回的对象中有城市编码
/**

  • 根据城市名搜索该城市离线地图记录
  • @param cityName 城市名
  • @return 该城市离线地图记录,用户需要显示释放该数组,数组元素为BMKOLSearchRecord
  • /

- (NSArray*)searchCity:(NSString*)cityName;
或者:
http://lbsyun.baidu.com/index.php?title=open/dev-res 百度地图城市名称-城市代码(cityCode)关系对照文本

35、SDK提示:组件的版本和base组件的版本不一致,请保持一致,否则不能正常使用

2.9.0以后,地图SDK采取了分包的形式,再使用时要确保组件的版本和base组件的版本一致。
每个组件都有一个BMK***Version.h文件,可以查看当前组件的版本号

36、如何将其他坐标转换成百度坐标

使用BMKConvertBaiduCoorFrom()方法获取加密后的坐标,然后使用BMKCoorDictionaryDecode()方法解密

37、官方demo不显示地图,只显示网格

demo中没有ak,需要将demo中的ak和bundle id都改成在控制台申请的就可以了

38、Archive时,提示不支持bitcode (*** was built without full bitcode)

请到下载页面,下载支持bitcode的SDK版本即可(http://lbsyun.baidu.com/index.php?title=iossdk/sdkiosdev-download)

39、cocopods中SDK不是最新的

这是由于cocopods有缓存导致的,将缓存清一下就可以了
请开发者 更新一下 自己的cocopads的 本地库
pod setup //更新CocoPods的本地库
pod search BaiduMapKit //下载 地图SDK

40、iOS SDK 在ipad模式下编译的问题

目前我们还没有做关于 iPad 方面的适配,这里指的不是不能用 iOS SDK 进行 iPad 应用开发。
指的是,如果开放相应的 iPad 应用需要做相应的设置才行。
具体方式如下
14110413305bb0f99021c102f3.png