Android百度地圖導航SDK2.0 定位SDK6.0.5的導航參數設置方法

現在的導航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
國測局座標
WGS84
GPS座標
座標類型必須爲以上三種,否則如果不指定或者默認匹配不到這三種座標類型則都會導致算路失敗。


但是百度定位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;
		 /*重新轉換百度座標系*/
        BDLocation bd1 = new BDLocation();
        double sX = 0, sY = 0, eX = 0, eY = 0;
        bd1.setLatitude(staLatLng.latitude);
        bd1.setLongitude(staLatLng.longitude);
        sX = LocationClient.getBDLocationInCoorType(bd1, BDLocation.BDLOCATION_BD09LL_TO_GCJ02).getLatitude();
        sY = LocationClient.getBDLocationInCoorType(bd1, BDLocation.BDLOCATION_BD09LL_TO_GCJ02).getLongitude();
        BNRoutePlanNode startNode = new BNRoutePlanNode(sY, sX, "我的位置", "我的位置");
        BDLocation bd2 = new BDLocation();
        bd2.setLatitude(ebdLatLng.latitude);
        bd2.setLongitude(ebdLatLng.longitude);
        eX = LocationClient.getBDLocationInCoorType(bd2, BDLocation.BDLOCATION_BD09LL_TO_GCJ02).getLatitude();
        eY = LocationClient.getBDLocationInCoorType(bd2, BDLocation.BDLOCATION_BD09LL_TO_GCJ02).getLongitude();


        BNRoutePlanNode endNode = new BNRoutePlanNode(eY, eX, "終點", "終點");


        ArrayList<BNRoutePlanNode> nodeList = new ArrayList<BNRoutePlanNode>(2);
        nodeList.add(startNode);
        nodeList.add(endNode);
        BaiduNaviManager.getInstance().launchNavigator(mActivity, nodeList, 1, true, new BDRoutePlanListener(startNode));
	官方給的文檔及demo並不能正常的調起導航誘導頁面,表現爲點擊導航沒有反應 ,<pre name="code" class="java" style="font-size: 14px; font-family: Arial, Helvetica, sans-serif; padding: 5px; border: 1px dotted rgb(170, 170, 170); color: rgb(53, 56, 51); line-height: 19.6000003814697px; background-color: rgb(246, 246, 246);"> BaiduNaviManager.getInstance().launchNavigator(mActivity, nodeList, 1, true, new BDRoutePlanListener(startNode));方法的監聽走到onRoutePlanFailed()方法裏面,倒是導航調起失敗,分析失敗原因應該是該方法裏的傳入的參數異常導致的,最後通過轉換座標系非方法解決了該問題
。進行上述的修改後即可以正常運行百度最新的導航相關的問題;



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章