當前為iOS提供的SKD版本為1.2.1,這裡主要講一下這個版本存在的一些問題,以及開發注意事項。
1. BMKMapView是百度地圖類,當建立多個BMKMapView對象時,這些對象會共用一些資料(沒有仔細研究具體共用哪些資料),因此會產生以下問題:
A. 當對其中一個BMKMapView通過手勢來進行放大、縮小、移動等操作時,其他的BMKMapView對象會自動進行放大、縮小、移動。
B. 啟動應用程式時,首先顯示出來的BMKMapView可以得到使用者的當前位置,其他的BMKMapView可能要等一段時間或者完全無法得到使用者當前的位置。
2. 為瞭解決1.B中的問題,可以只使用一個BMKMapView對象,比如在兩個不同的UIView中共用同一個BMKMapView對象。此外,有一個方法可以基本上解決1.A的問題。假設UIView A和UIView B均有BMKMapView(可以為不同或同一個對象),在UIView A和UIVIew B之間進行切換時,記錄下各自當前BMKMapView的Frame,然後在顯示的時候再通過設定Frame來恢複到切換前的狀態。這個方法的缺點是,在切換很快的時候,ViewDidAppear不一定會被調用,ViewWillDisapper的調用順序不確定,不過可以滿足普通操作的要求。
3. BMKSearch提供了搜尋、位址解析等功能。百度通過回調來響應搜尋結果,關鍵的問題是,有時回調並不會被調用(個人感覺是BMKSearch之後,百度的SDK無法正確找到回呼函數,比如處於不同的線程等等)。為了能讓百度SDK正確找到回調,建議如下:
A. 在沒有得到回調之前,不要釋放BMKSearch對象,最好做成全域對象。(必須)
B. 在搜尋路線時,如果起始位置是通過經緯度來表示的,那麼節點資訊中除了設定經緯度pt資訊外,一定要設定name資訊(不可為空字串)。(必須)
C. 不能同時進行多個搜尋。(必須)
D. 在每次通過BMKSearch對象進行搜尋之前,最好是將其delegate設定為nil,然後進行release,然後再alloc,然後再進行搜尋。(強烈建議)
E. 所有的搜尋的操作均不要通過委託或其他線程的回調等等來發起,應該是由本對象主動發起,並且本對象作為搜尋代理,這樣百度SDK才能正確找到回呼函數。(強烈建議)
4. 有時需要判斷目前使用者經緯度是否是在國內,可以通過BMKSearch的地址反解析之後的回調來判斷,如果返回的錯誤碼為BMKErrorResultNotFound,那麼有可能不在國內,因為其他的原因也可能導致返回此錯誤碼。
5. 其實,最好的解決方案是採用AutoNavi高德地圖api,如果是iOS6,那麼直接可以直接使用MKMapView,其採用的就是AutoNavi介面。目前AutoNavi介面不足之處是沒有步行路線,據說還在開發中,相信以後會支援的。
[未經作者許可 不得轉載]
http://blog.csdn.net/donhao/article/details/7823843
iOS基於百度地圖的開發(1)——使用者當前位置
iOS基於百度地圖的開發(2)——擷取POI
iOS基於百度地圖的開發(3)——地址搜尋
iOS基於百度地圖的開發(4)——路徑搜尋
iOS基於百度地圖的開發(5)——核心問題匯總
iOS基於百度地圖的開發(6)——google座標轉換成百度座標
iOS基於百度地圖的開發(7)——百度座標轉換成Google座標