android 百度地圖獲取兩個座標的實際路線距離

    12.2    青島  晴

    前些天看了下百度地圖的api,找到了幾個不錯的方法,拿出來分享下,導百度地圖的jar包後項目較大,沒法上傳csdn,想要源碼的留郵箱。

    百度地圖有個導航功能,可以獲取到兩個座標的導航地圖,指定路線進行導航,但是百度文檔中好像並沒有明確的指出怎樣獲取這些路線的距離(駕車,步行路線等等),經過研究發現,我們可以不使用百度的那個導航地圖而獲取到導航路線的距離。

     先上一波效果圖:

    

    第一張是百度地圖的駕車導航,第二張是研究的,查詢的地點是青島市汽車東站附近到中海國際社區朗園,第二張是通過點擊地圖獲取座標來查詢的路線距離會有誤差,實測不是很大。

    廢話不多說直接介紹做法:

    1.百度地圖的sdk你得有吧,像那些基礎定位,檢索功能,計算工具,導航功能你得有吧,看文檔完整的導入。

    2.將下面的代碼放到適當的地方使用

 private void searchRoute(BNRoutePlanNode sNode, BNRoutePlanNode eNode) {

        BNRoutePlanNode bp1 = sNode;
        BNRoutePlanNode bp2 = eNode;


        RoutePlanSearch search = RoutePlanSearch.newInstance();        //百度的搜索路線的類
        DrivingRoutePlanOption drivingRoutePlanOption = new DrivingRoutePlanOption();
        //起始座標和終點座標
        PlanNode startPlanNode = PlanNode.withLocation(new LatLng(bp1.getLatitude(), bp1.getLongitude()));  // lat  long
        PlanNode endPlanNode = PlanNode.withLocation(new LatLng(bp2.getLatitude(), bp2.getLongitude()));
        drivingRoutePlanOption.from(startPlanNode);
        drivingRoutePlanOption.to(endPlanNode);
        search.drivingSearch(drivingRoutePlanOption);


        search.setOnGetRoutePlanResultListener(new OnGetRoutePlanResultListener() {   //搜索完成的回調
            @Override
            public void onGetWalkingRouteResult(WalkingRouteResult walkingRouteResult) {   //步行路線
                if (walkingRouteResult.getRouteLines() == null) return;
                int duration = walkingRouteResult.getRouteLines().get(0).getDuration();
                Toast.makeText(context, duration + "米", Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onGetTransitRouteResult(TransitRouteResult transitRouteResult) {
            }

            @Override
            public void onGetDrivingRouteResult(DrivingRouteResult drivingRouteResult) {     //駕車路線
                if (drivingRouteResult.getRouteLines() == null) {
                    Toast.makeText(context, "算路失敗", Toast.LENGTH_SHORT).show();
                    return;
                }
                int duration = drivingRouteResult.getRouteLines().get(0).getDistance();
                Toast.makeText(context, "距離是:" + duration + "米", Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onGetBikingRouteResult(BikingRouteResult bikingRouteResult) {

            }
        });
    }

其實百度的api中的類,方法挺多的,只是好多沒寫在文檔上,這裏面的這幾個類都是在百度架包com.baidu.mapapi.search.route下面,有興趣的朋友可以多項研究研究。

RoutePlanSearch:看名字就知道這玩意是搜索路徑的

這裏面有    public boolean walkingSearch(WalkingRoutePlanOption var1) 
                  public boolean transitSearch(TransitRoutePlanOption var1) 
 public boolean drivingSearch(DrivingRoutePlanOption var1) 
 public boolean bikingSearch(BikingRoutePlanOption var1) 

這麼幾個有用的方法,分別是搜索步行、地鐵、駕車、自行車的路線,每個方法傳入的實體也不同但是都差不多,都是.from  .to  傳進去起始和結束的座標。然後在set給搜索完成的回調OnGetRoutePlanResultListener()這個是公用的,也有四個不同的藉口回調方法。我這用了駕車,其他的可以自行測試。

     關於座標點,百度有自己的一套

        BNRoutePlanNode sNode = new BNRoutePlanNode(llstart.longitude, llstart.latitude, "", null, CoordinateType.GCJ02);      //新建兩個座標點
        BNRoutePlanNode eNode = new BNRoutePlanNode(llend.longitude, llend.latitude, "", null, CoordinateType.GCJ02);
只要將自己需要的座標組裝好,按部就班的就ok啦。

    這個也是自己閒的無聊瞎鼓搗的,不知道爲什麼百度地圖並沒有將這部分內容寫在文檔上,也許這個是有bug的,所以商業用途的朋友請多多測試。

    言語不當,還望包含;如有bug,還望指正;若要源碼,請點擊下載;謝謝。

   源碼在這裏:點擊下載



    

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