新聞中心
本文將向大家介紹如何使用百度地圖API提供的駕車導航服務進行開發(fā)。

一個簡單的示例
駕車導航服務根據傳入的起點和終點信息給出從起點到終點的駕車路線,我們先從一個最簡單的示例看起:
- varmap = newBMap.Map('container');
- map.centerAndZoom(newBMap.Point(116.404, 39.915), 11);
- vardriving = newBMap.DrivingRoute(map, {
- renderOptions: {
- map: map
- }
- });
- driving.search('圓明園', '西單');
上面代碼很簡單,先初始化地圖(地圖容器的html代碼省略),接著實例化一個DrivingRoute類,并配置好參數(參數具體含義后續(xù)再說)。最后調用該實例的search方法進行駕車方案查詢。我們會在瀏覽器看到如下效果:
DrivingRoute的構造函數的第一個參數制定檢索的范圍,這里我們傳遞的是map實例,也就是說駕車導航的位置會根據當前地圖中心點所在的城市進行檢索。當然你也可以傳遞一個城市名稱的字符串:
- vardriving = newBMap.DrivingRoute("北京", {
- renderOptions: {
- map: map
- }
- });
DrivingRoute的構造函數第二個參數是可選的配置,類型為DrivingRouteOptions。這里我們只使用了renderOptions屬性,這個屬性值的類型為DrivingRenderOptions類,它是用來控制檢索結果的呈現的,比如是否將結果線路呈現在地圖上,是否將詳細方案描述呈現在頁面的某個位置等等。這里我們使用了map屬性,即讓檢索結果自動展現在地圖上,這樣我們就會看到地圖上有起點、終點以及它們之間的線路了。
呈現設置
除了設置展現的地圖以外,呈現設置中還有很多其他功能,最常用的就是將詳細方案描述顯示在頁面上:
駕車導航
這里我們增加一個div,id為panel,接著在renderOptions中增加panel屬性,把div的id傳遞進去。我們會看到如下效果:
API會將詳細的駕車方案描述填充到id為panel的div容器中。此時點擊panel中的具體方案會在圖區(qū)產生交互效果。
另外,呈現設置的enableDragging如果設置為true的畫,則用戶可以在地圖上拖拽起點、終點改變駕車方案,也可以任意拖拽修改途徑點:
- vardriving = newBMap.DrivingRoute(map, {
- renderOptions: {
- map: map,
- panel: 'panel',
- enableDragging: true
- }
- });
highlightMode屬性可以控制點擊panel中的方案描述時展示點位置還是展示一段路線,它支持如下兩個值:
BMAP_HIGHLIGHT_STEP:展現關鍵點
BMAP_HIGHLIGHT_ROUTE:展現路段
默認為展現關鍵點,如下圖:
點擊描述的第三項,顯示一個關鍵點信息(根據描述,這個點就是在中關村一橋左轉的位置點),也可以顯示路線:
這時,再選中第三步的時候,地圖展現的是一段線路(即“沿中關村北大街行駛1.6公里”這段路)。
駕車策略配置
在DrivingRouteOptions還有一個控制策略的屬性drivingPolicy,它的屬性值可以為以下幾種:
BMAP_DRIVING_POLICY_LEAST_TIME:最少時間,默認
BMAP_DRIVING_POLICY_LEAST_DISTANCE:最短距離
BMAP_DRIVING_POLICY_AVOID_HIGHWAYS:避開高速
通過配置策略可獲得不同的駕車方案。
回調函數
在DrivingRouteOptions里面還有很多回調函數屬性,比如:onSearchComplete、onMarkersSet、onInfoHtmlSet、onPolylinesSet和onResultsHtmlSet。在DrivingRoute類上也有對應的設置回調的方法:setSearchCompleteCallback、setMarkersSetCallback等等。實際上不論通過配置參數傳遞還是通過接口設置回調,其作用都是一樣的。這些回調到底有什么用處呢?
通過回調函數,開發(fā)者可獲得更多的數據資源,可以利用這些數據資源更好、更靈活的進行二次開發(fā)。下面這個示例就是利用onSearchComplete獲取數據自行添加覆蓋物和描述信息:
駕車導航
在上面的代碼中,我們初始化DrivingRoute實例時沒有設置renderOptions,也就是說駕車導航的結果不會自動添加到地圖上,描述信息也不會展現在頁面中,我們通過onSearchComplete獲取數據自行添加。onSearchComplete回調函數的參數為一個DrivingRouteResult對象,通過它可以獲取數據信息。在回調函數中我們首先判斷一下檢索是否成功,如果成功則添加覆蓋物和描述信息。在添加覆蓋物完成后,我們調用了Map的setViewport方法來設置視野,以便讓結果完整展示在地圖當中。在獲取方案的時候我們調用getPlan方法并給定索引0,這表示獲取第一條駕車方案(實際上目前僅有一條駕車方案,但是以后可能會同時給出多條方案)。每個方案通過RoutePlan描述,方案中會包含若干Route對象,它表示兩點間的線路(在只有一個目的地的情況下,Route對象數量總為1),Route對象又包含若干Step,通過getStep方法可獲得,Step對象描述了每一個關鍵點的信息。
以上代碼在瀏覽器中的效果如下:
通過接口,你還可以進一步豐富這個功能,比如增加一些點擊交互。
需要注意的問題
搜索沒有結果
如果檢索關鍵字過于模糊,比如從“麥當勞”到“肯德基”,這樣API不知道從哪個麥當勞到哪個肯德基,所以此時將無法獲取導航線路。為了讓導航返回更準確的結果,建議使用坐標發(fā)起檢索。
發(fā)起新檢索后地圖沒有清除上一次結果
在一般情況下,你只需要一個DrivingRoute實例做檢索,同一個實例在檢索的時候會自動清除上一次檢索的結果(包括地圖覆蓋物和描述)。但是如果每次檢索都new一個新的DrivingRoute實例,那么每個實例的檢索結果都會出現在地圖上,無法自動清除。
分享標題:詳解百度地圖API之駕車導航
網頁路徑:http://www.5511xx.com/article/cojgejp.html


咨詢
建站咨詢
