Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android百度地圖SDK 導航SDK2.0結合定位SDK6.0.5的導航參數設置方法

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

編輯:關於Android編程

前段時間做了一陣百度地圖的內容,還未來的及總結,很快有些問題及解決辦法都忘了,現在記錄下之前比較糾結的問題,分享如下

如題,現在的導航SDK2.0的導航發起函數如下

        public boolean launchNavigator(Activity activity,
                               java.util.List 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;
		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 nodeList = new ArrayList(2);
		nodeList.add(startNode);
		nodeList.add(endNode);

		BaiduNaviManager.getInstance().launchNavigator(mActivity, nodeList, calcMode, true,
				new MapRoutePlanListener(startNode));

	}

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved