最近刚完成app中地图的应用,感受很是的曲折,折腾了好久,刚才开始一直不能成功使用百度地图api,报一大堆的错误,后来换到高德地图,又发现服务端使用的百度的经纬度,又从高德换回百度,泪奔。api
这里简单比较下高德地图和百度地图,我的以为高德地图api导入真是很是简单,并且还分红几种版本;相比较百度地图api的导入就繁琐多了,主要是导入静态库文件,初次使用真的是繁琐,百度提供了三种导入方式,最后仍是以为合并静态库文件比较方便,否则要在xcode中做不少设置,并且还要根据各类状况更改,因此我建议仍是选择第二种方式。xcode
使用百度地图的API时,最好去官方技术论坛下载两个pdf文件:IOS开发教程-第一部分和第二部分的pdf文件,这两个文件太有用了,不要去看demo,也不要去搜索教程,就用这个两个文件就够了,没事不要去论坛提问,很可贵到回复,都是一堆官方的回复,几乎无用。app
iOS开发教程-第一部分.pdf 主要是如何申请key,和如何导入API到xcode工程。这里必定要按照pdf中的指示去作,不然问题多多。导入静态库的时候最好选择第二种方式,维护起来比较简单。有些配置(好比libary search paths和header search paths)在你导入的时候xcode已经为你设置好了,因此能够不用考虑函数
若是导入过程完美,后面开发起来都是十分简单的事情,百度api介绍也比较完整,用起来很顺手。code
iOS开发教程-第二部分.pdf 主要就是对百度地图功能的各类介绍,这个你不会获得所有的可用的东西,须要结合demo一块儿用,先从pdf中找到你须要的功能,有个大致的了解,再去看demo中的代码,而后再实际应用到你的工程中。教程
列几个遇到的问题开发
1.百度读取CLLocationCoordinate2D的问题,最新版本(V2.5)CLLocationCoordinate2DMake的两个参数与以前函数的相反,这个困扰了我好久,之前版本跟如今版本的程序,用同一个经纬度,旧版的能够显示标注,新版的却不能够。it
例如:旧版是这样子io
[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;
保证在你要执行的其余代码前面就好
-------------------------------------------------------------------------------------------------------------------------------
因为实际并无使用到百度地图太多复杂的功能,因此也只能总结到这里了。。。。