zoukankan      html  css  js  c++  java
  • 百度地图 IOS版开发经验分享

    最近刚完成app中地图的应用,感觉非常的曲折,折腾了很久,刚才开始一直不能成功使用百度地图api,报一大堆的错误,后来换到高德地图,又发现服务端使用的百度的经纬度,又从高德换回百度,泪奔。

    这里简单比较下高德地图和百度地图,个人觉得高德地图api导入真是非常简单,而且还分成几种版本;相比较百度地图api的导入就繁琐多了,主要是导入静态库文件,初次使用真的是繁琐,百度提供了三种导入方式,最后还是觉得合并静态库文件比较方便,不然要在xcode中作很多设置,而且还要根据各种情况更改,所以我建议还是选择第二种方式。

    使用百度地图的API时,最好去官方技术论坛下载两个pdf文件:IOS开发教程-第一部分和第二部分的pdf文件,这两个文件太有用了,不要去看demo,也不要去搜索教程,就用这个两个文件就够了,没事不要去论坛提问,很难得到回复,都是一堆官方的回复,几乎无用。

    iOS开发教程-第一部分.pdf 主要是如何申请key,和如何导入API到xcode工程。这里一定要按照pdf中的指示去做,否则问题多多。导入静态库的时候最好选择第二种方式,维护起来比较简单。有些配置(比如libary search paths和header search paths)在你导入的时候xcode已经为你设置好了,所以可以不用考虑

    如果导入过程完美,后面开发起来都是十分简单的事情,百度api介绍也比较完整,用起来很顺手。

    iOS开发教程-第二部分.pdf 主要就是对百度地图功能的各种介绍,这个你不会得到全部的可用的东西,需要结合demo一起用,先从pdf中找到你需要的功能,有个大体的了解,再去看demo中的代码,然后再实际应用到你的工程中。

    列几个遇到的问题

    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;

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

    -------------------------------------------------------------------------------------------------------------------------------

    由于实际并没有使用到百度地图太多复杂的功能,所以也只能总结到这里了。。。。 

  • 相关阅读:
    网上邻居无法打开的问题 客户端无法连接打印机问题
    今天一天下午到晚上都在研究如何刷手机,要是被领导知道我帮同学在刷手机系统,非开除我不可。还是贴出来,以后少走弯路吧
    “屏幕保护程序”没有出现“在恢复时使用密码保护”的解决方法
    NOD 32客户端安装时出现的问题
    [模板]二叉树的前、中、后序遍历
    [算法]浅谈求n范围以内的质数(素数)
    [模板]二叉搜索树
    [OI]Noip 2018 题解&总结(普及)
    Centos7.2安装git(源码安装)
    Centos7.2安装maven
  • 原文地址:https://www.cnblogs.com/Longkin/p/4130171.html
Copyright © 2011-2022 走看看