最近剛完成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;
保證在你要執行的其餘代碼前面就好
-------------------------------------------------------------------------------------------------------------------------------
因爲實際並無使用到百度地圖太多複雜的功能,因此也只能總結到這裏了。。。。