美文网首页程序设计
iOS百度SDK的使用

iOS百度SDK的使用

作者: CMD独白 | 来源:发表于2016-05-16 22:59 被阅读528次

    百度地图 iOS SDK是一套基于iOS 5.0及以上版本设备的应用程序接口,不仅提供展示地图的基本接口,还提供POI检索、路径规划、地图标注、离线地图、定位、周边雷达等丰富的LBS能力 。
    您可以使用百度地图iOS SDK开发适用于移动设备的地图应用,通过接口,您可以轻松访问百度服务和数据,构建功能丰富、交互性强的地图应用程序。

    使用百度地图的时候,首先要做好准备工作,到百度地图开发平台下载要使用的SDK,使用百度地图的API时,最好去官方技术论坛下载两个pdf文件:IOS开发教程-第一部分和第二部分的pdf文件,然后获取密钥,如下图所示,官方文档: http://developer.baidu.com/map/sdkiosdev-2.htm

    Paste_Image.png

    接下来按照步骤使用百度地图:

    (1)引入BaiduMapAPI.framework
    (2)引入所需的系统
    在Xcode工程中引入CoreLocation.framework和QuartzCore.framework、OpenGLES.framework、SystemConfiguration.framework、CoreGraphics.framework、Security.framework。添加方式:在Xcode的Project -> Active Target ->Build Phases ->Link Binary With Libraries,添加这几个framework即可。
    (3)环境配置
    在TARGETS->Build Settings->Other Linker Flags 中添加-ObjC。
    (4)引入mapapi.bundle资源文件
    如果使用了基础地图功能,需要添加该资源,否则地图不能正常显示
    mapapi.bundle中存储了定位、默认大头针标注View及路线关键点的资源图片,还存储了矢量地图绘制必需的资源文件。如果您不需要使用内置的图片显示功能,则可以删除bundle文件中的image文件夹。您也可以根据具体需求任意替换或删除该bundle中image文件夹的图片文件。
    方法:选中工程名,在右键菜单中选择Add Files to “工程名”…,从BaiduMapAPI.framework||Resources文件中选择mapapi.bundle文件,并勾选“Copy items if needed”复选框,单击“Add”按钮,将资源文件添加到工程中。

    (5)引入头文件

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

    #import//引入所有的头文件
     #import//只引入所需的单个头文件
    

    上面都是引用百度地图文档上的内容,这里要注意第四条,.framework中居然有这些,但还是需要单独add到项目里。
    注意:还需要在info.plist里添加(以下二选一,两个都添加默认使用NSLocationWhenInUseUsageDescription):
    NSLocationWhenInUseUsageDescription ,允许在前台使用时获取GPS的描述
    NSLocationAlwaysUsageDescription ,允许永久使用GPS的描述

    列几个遇到的问题:

    (1)百度读取CLLocationCoordinate2D的问题,最新版本(V2.5)CLLocationCoordinate2DMake的两个参数与之前函数的相反,这个困扰了我很久,以前版本跟现在版本的程序,用同一个经纬度,旧版的可以显示标注,新版的却不可以。

    例如:旧版是这样子

    [self.mapView setCenterCoordinate:CLLocationCoordinate2DMake(118.144992,24.497386)];
    

    新版要这样才行

    [self.mapView setCenterCoordinate:CLLocationCoordinate2DMake(24.497386,118.144992)];
    

    不知道为什么百度要这样做

    (2)BMKMapViewDelegate 的方法

    - (void)mapView:(BMKMapView *)mapView didSelectAnnotationView:(BMKAnnotationView *)view
    

    这个在点击同一个标注以后只会执行一次,要点击其他的标注再来点击才会执行

    后来发现可以在每次执行的时候调用一下这个

     [mapView deselectAnnotation:view.annotation animated:YES];
    

    这样同一个标注可以一致执行了,别问我为什么需要这个功能,因为我把标注的气泡隐藏了,只能通过点击标注来实现了。

    (3)计算屏幕内的标注方法,这里直接上代码了,实验过是可用的

    首先将经纬度转化为屏幕内坐标

    CGPoint point = [self.mapView convertCoordinate:annotationitem.coordinate toPointToView:self.mapView];
    

    然后判断坐标是否在地图可见范围内

    CGRectContainsPoint(CGRectMake(0, 44, self.mapView.frame.size.width, self.mapView.frame.size.height-44-49), point)
    

    (4)BMKMapViewDelegate 的方法

    - (BMKAnnotationView *)mapView:(BMKMapView *)view viewForAnnotation:(id<BMKAnnotation>)annotation
    

    使用此方法时,都可能会用到自定义的BMKAnnotationView类,但是请在给自定义类BMKAnnotationView,调用新定义的方法或属性时,先执行

    annotationView.annotation = annotation;
    

    保证在你要执行的其他代码前面就好

    相关文章

      网友评论

        本文标题:iOS百度SDK的使用

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