標籤:百度地圖sdk android 導航參數設定
前段時間做了一陣百度地圖的內容,還未來的及總結,很快有些問題及解決辦法都忘了,現在記錄下之前比較糾結的問題,分享如下
如題,現在的導航SDK2.0的導航發起函數如下
public boolean launchNavigator(Activity activity, java.util.List<BNRoutePlanNode> nodes, int preference, boolean isGPSNav, BaiduNaviManager.RoutePlanListener listener)
文檔給出的參數釋義如下:
參數:
activity - 建議是應用的主Activity
nodes - 傳入的算路節點,順序是起點、途經點、終點,其中途經點最多三個,參考 BNRoutePlanNode
preference - 算路偏好,參考RoutePlanPreference定義
isGPSNav - true表示真實GPS導航,false表示類比導航
listener - 開始導航回調監聽器,在該監聽器裡一般是進入導航過程頁面
返回:
是否執行成功 其中對於算路的節點,現在有了一個新的規則,可見BNRoutePlanNode
取文檔的釋義如下:
public BNRoutePlanNode(double longitude, double latitude, java.lang.String name, java.lang.String description, BNRoutePlanNode.CoordinateType coType)
算路節點構造方法.
-
參數:
-
longitude - 經度
-
latitude - 緯度
-
name - 算路節點名
-
description - 算路節點地址描述
-
coType - 座標類型,參考 CoordinateType
可見現在對於算路節點的座標類型有了一個標準,也即
BD09_MC百度墨卡托座標 |
GCJ02國測局座標 |
WGS84GPS座標 |
座標類型必須為以上三種,否則如果不指定或者預設匹配不到這三種座標類型則都會導致算路失敗。
但是百度定位SDK的座標系一般用的是bd09ll類型,這時候就需要用到類型轉換,在5.3版本之前可以有另一種方法來轉換的,但是5.3版本就取消了,於是6.0.5之後就有了這個函數來做轉換,如下
public static BDLocation getBDLocationInCoorType(BDLocation src,
java.lang.String transferType)
根據設定的轉換座標系類型得到相應座標系下的BDLocation
參數:
BDLocation - src 原始BDLocation
transferType - BDLocation.BDLOCATION_GCJ02_TO_BD09/BDLOCATION_GCJ02_TO_BD09LL/BDLOCATION_BD09_TO_GCJ02/ BDLOCATION_BD09LL_TO_GCJ02
用這個就可以直接將百度定位和地圖擷取的BDLocation轉換成可以直接使用的導航參數。
以此希望可以幫到尚不明白如何轉換的同學!
部分代碼如下:
// 發起算路private void startCalcRoute(int calcMode) {// 顯示載入對話方塊DialogUtil.getInstance().showProgressDialog(mActivity);if (mBdLocation == null) {Toast.makeText(this, getString(R.string.map_location_failed), Toast.LENGTH_LONG).show();// 取消載入對話方塊DialogUtil.getInstance().dismissProgressDialog();return;}if (calcMode == 0)calcMode = BaiduNaviManager.RoutePlanPreference.ROUTE_PLAN_MOD_AVOID_TAFFICJAM;double sX = 0, sY = 0, eX = 0, eY = 0;sX = LocationClient.getBDLocationInCoorType(mBdLocation, BDLocation.BDLOCATION_BD09LL_TO_GCJ02).getLatitude();sY = LocationClient.getBDLocationInCoorType(mBdLocation, BDLocation.BDLOCATION_BD09LL_TO_GCJ02).getLongitude();BNRoutePlanNode startNode = new BNRoutePlanNode(sY, sX, "我的位置", "我的位置");
BDLocation bd = new BDLocation();bd.setLatitude(destLat);bd.setLongitude(destLng);eX = LocationClient.getBDLocationInCoorType(bd, BDLocation.BDLOCATION_BD09LL_TO_GCJ02).getLatitude();eY = LocationClient.getBDLocationInCoorType(bd, BDLocation.BDLOCATION_BD09LL_TO_GCJ02).getLongitude();BNRoutePlanNode endNode = new BNRoutePlanNode(eY, eX, strDestAddress, strDestAddress);ArrayList<BNRoutePlanNode> nodeList = new ArrayList<BNRoutePlanNode>(2);nodeList.add(startNode);nodeList.add(endNode);BaiduNaviManager.getInstance().launchNavigator(mActivity, nodeList, calcMode, true,new MapRoutePlanListener(startNode));}
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。
Android百度地圖SDK 導航SDK2.0結合定位SDK6.0.5的導航參數設定方法