iOS基於百度地圖的開發 (百度地圖BMKSearch問題) (做者不容許轉載 我也沒辦法 ...

當前爲iOS提供的SKD版本爲1.2.1,這裏主要講一下這個版本存在的一些問題,以及開發注意事項。 api

1. BMKMapView是百度地圖類,當建立多個BMKMapView對象時,這些對象會共享一些數據(沒有仔細研究具體共享哪些數據),所以會產生如下問題: app

    A. 當對其中一個BMKMapView經過手勢來進行放大、縮小、移動等操做時,其餘的BMKMapView對象會自動進行放大、縮小、移動。 函數

    B. 啓動應用程序時,首先顯示出來的BMKMapView能夠獲得用戶的當前位置,其餘的BMKMapView可能要等一段時間或者徹底沒法獲得用戶當前的位置。 spa

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接口不足之處是沒有步行路線,聽說還在開發中,相信之後會支持的。

相關文章
相關標籤/搜索