在您接受使用条款约束的情况下,百度地图移动端SDK在您的移动应用中开放显示百度地图底图、进行地点搜索、路线查询和路况显示等功能。
您只可使用在百度地图移动端SDK文档中所列明开放的SDK功能来对SDK相关服务数据的结果进行展示,不得直接存取、使用内部数据、图片、程序、模块或是任何其他百度地图的服务或功能。在接受使用条款约束的情况下,您可以在向最终用户提供其他信息的同时,使用SDK接口获得相关服务数据。
在您使用上述服务时,请严格遵循“百度地图开发者服务条款”,一般情况下,非商业目的使用的用户可以直接使用百度地图开放平台对外的开放服务。 但如果用户以商业目的(包括但不限于对第三方用户收费、项目投标,以及其他直接或间接获取收益或利益)使用本平台服务,则用户须要事先获得本平台"商用授权"许可。需要说明的是如未获得授权,百度地图开放平台也不会随意终止或干扰您的正常使用。 如需要商用授权,可按照官网流程进行申请,申请地址
1)百度地图SDK在国内(包括港澳台),输入、输出默认使用BD09坐标;定位SDK默认输出是使用GCJ02坐标。 自iOS地图SDK V3.3起,支持一次声明为GCJ02坐标类型,全应用支持输入GCJ02坐标,返回GCJ02坐标。
2)海外地区,输入为WGS84坐标。
三种坐标系说明如下:
(1)WGS84:表示GPS获取的坐标;
(2)GCJ02:是由中国国家测绘局制订的地理信息系统的坐标系统。由WGS84坐标系经加密后的坐标系。
(3)BD09:为百度坐标系,在GCJ02坐标系基础上再次加密。其中bd09ll表示百度经纬度坐标,bd09mc表示百度墨卡托米制坐标;
百度地图SDK在国内(包括港澳台)使用的是BD09坐标;在海外地区,统一使用WGS84坐标。开发者在使用百度地图相关服务时,请注意选择。
百度地图开放平台提供了官方的坐标转换接口,请开发者直接选择使用。开发者切勿从非官方渠道获得坐标转换方法。各平台坐标转换方法如下:
(1)Android地图SDK:androidsdk
(2)iOS地图SDK:iossdk
(3)Web API服务:webapi
该问题是由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中即可。
显示网格是由地图数据没有正常获取造成的,请检查网络是否正常,鉴权是否通过
设置地图中心经纬度即可
SDK会控制BMKMapView各个子view的压盖顺序,所以不能直接将view添加到BMKMapView上,可以添加到BMKMapView的superview里,这样就可以显示了
添加自己的手势后,SDK无法正常处理手势事件造成的。添加自定义手势时,必须设置UIGestureRecognizer的属性cancelsTouchesInView 和 delaysTouchesEnded 为NO,否则影响地图内部的手势处理
当地图处于正北方向时,指南针是默认隐藏的,旋转地图看看是否显示,如果还不显示,看下CompassPosition是否设置在地图frame范围内
在下边的回调执行完后,再获取(转换)试一下
/**地图初始化完毕时会调用此接口@param mapview 地图View*/- (void)mapViewDidFinishLoading:(BMKMapView *)mapView;
通过下边两个接口,比较下地图区域改变的状态,来区分是缩放还是移动
//地图区域即将改变时会调用此接口- (void)mapView:(BMKMapView *)mapView regionWillChangeAnimated:(BOOL)animated;//地图区域改变完成后会调用此接口 - (void)mapView:(BMKMapView *)mapView regionDidChangeAnimated:(BOOL)animated;
1)地图初始化后直接截图,地图还没有准备好绘制,所以黑屏,需要在下边的回调执行完后
/**地图初始化完毕时会调用此接口@param mapview 地图View*/- (void)mapViewDidFinishLoading:(BMKMapView *)mapView;
2)需要放到主线程中
SDK目前的策略是,在同一时间只有一个标注处于选中状态,即显示气泡。如果想显示多个气泡,可以自定义BMKAnnotationView,将气泡做为标注的一部分进行显示即可
如果想一直显示,需要自定义annotationview,将泡泡作为annotationview的一部分,一直显示
取消选中该annotation就会隐藏起泡,BMKMapView中有相关方法:
- (void)deselectAnnotation:(id <BMKAnnotation>)annotation animated:(BOOL)animated;
标注在选中状态时不能被再次选中,所以就不会回调didSelectAnnotationView,取消选中后才可以被选中 取消选中方法,BMKMapView中有相关方法:
- (void)deselectAnnotation:(id <BMKAnnotation>)annotation animated:(BOOL)animated;
在下边这个回调方法里,通过view来判断
- (void)mapView:(BMKMapView *)mapView didSelectAnnotationView:(BMKAnnotationView *)view;
可以将这个view,添加到 mapView.superview 中,view的坐标设在中心即可
BMKMapView中提供的有选中标注的方法:
- (void)selectAnnotation:(id <BMKAnnotation>)annotation animated:(BOOL)animated;
在 BMKMapView类 中 - (void) showAnnotations: (NSArray *) annotations animated: (BOOL) animated 详细请查找BMKMapView类参考
定位结果是由系统决定的,SDK只是封装了系统定位的结果,定位的结果和准确度sdk无法左右
另外,模拟器需要手动设置我的位置
首先要确定定位成功,然后需要在定位成功的回调里updateLocationData,麻烦参考下demo定位部分
/**用户位置更新后,会调用此函数@param userLocation 新的用户位置*/- (void)didUpdateBMKUserLocation:(BMKUserLocation *)userLocation{[_mapView updateLocationData:userLocation];}
参考下下边接口
/**动态定制我的位置样式@param [in] locationViewDisplayParam 样式参数*/- (void)updateLocationViewWithParam:(BMKLocationViewDisplayParam*)locationViewDisplayParam;
V3.1.0之前版本:SDK自带定位的显示策略就是这样的,拖动后会变回普通态。可以自己使用annotation显示我的位置,这样就可以自己控制定位的显示了 V3.1.0 及之后版本: BMKUserTrackingModeHeading:在普通定位模式的基础上显示方向,即地图不会旋转,我的位置图标旋转,显示我的位置和方向(2016年10月14日 iOS 地图 SDK V3.1.0发布)
BMKMapView的定位模式(userTrackingMode)有4种:
BMKUserTrackingModeNone :普通定位模式,显示我的位置,我的位置图标和地图都不会旋转
BMKUserTrackingModeFollow : 定位跟随模式,我的位置始终在地图中心,我的位置图标会旋转,地图不会旋转
BMKUserTrackingModeFollowWithHeading : 定位罗盘模式,我的位置始终在地图中心,我的位置图标和地图都会跟着旋转
BMKUserTrackingModeHeading:在普通定位模式的基础上显示方向,即地图不会旋转,我的位置图标旋转,显示我的位置和方向(2016年10月14日 iOS 地图 SDK V3.1.0发布)
隐藏我的位置气泡,设置 userLocation.title = nil; 即可
在成功获取定位信息后,停止定位就可以了
检查下发起检索时鉴权完成了没有,发起检索必须是在鉴权完成后,否则会发送失败
一个search对象,同一时间只能进行一次检索,要同时进行多个检索,需要使用多个search对象,在回调中通过search对象来区分是哪个检索
途经点过多时,服务端算路的过程比较慢,可能会造成超时,所以途经点不宜设置过多
使用反地理编码检索,其检索结果中有poilist
使用反地理编码检索,其检索结果中有poilist
iOS 类参考
BMKReverseGeoCodeResult类
NSArray * _poiList
使用BMKOfflineMap:返回的对象中有城市编码
/**根据城市名搜索该城市离线地图记录@param cityName 城市名@return 该城市离线地图记录,用户需要显示释放该数组,数组元素为BMKOLSearchRecord*/- (NSArray*)searchCity:(NSString*)cityName;
或者:
https://lbs.baidu.com/index.php?title=open/dev-res 百度地图城市名称-城市代码(cityCode)关系对照文本
2.9.0以后,地图SDK采取了分包的形式,再使用时要确保组件的版本和base组件的版本一致。
每个组件都有一个BMK***Version.h文件,可以查看当前组件的版本号
使用BMKConvertBaiduCoorFrom()方法获取加密后的坐标,然后使用BMKCoorDictionaryDecode()方法解密
demo中没有ak,需要将demo中的ak和bundle id都改成在控制台申请的就可以了
请到下载页面,下载支持bitcode的SDK版本即可(下载页面)
这是由于cocopods有缓存导致的,将缓存清一下就可以了
请开发者 更新一下 自己的cocopads的 本地库
pod setup //更新CocoPods的本地库
pod search BaiduMapKit //下载 地图SDK
目前我们还没有做关于 iPad 方面的适配,这里指的不是不能用 iOS SDK 进行 iPad 应用开发。
指的是,如果开放相应的 iPad 应用需要做相应的设置才行。
具体方式如下:
由于地图SDK 6.0及之后版本移除i386架构,如果使用模拟器编译,请将Build Settings-> Build Active Architecture Only 设置为Yes。
上一篇
下一篇
本篇文章对您是否有帮助?