android百度地圖開發之自動定位所在位置與固定位置進行駕車,步行,大眾運輸路線搜尋

來源:互聯網
上載者:User

標籤:android   style   blog   class   c   java   

  最近跟著百度地圖API學地圖開發,先是學了路徑搜尋,對於已知座標的兩點進行駕車、公交、步行三種路徑的搜尋(公交路徑運行沒效果,待學習中),後來又 學了定位功能,能夠擷取到自己所在位置的經緯度,但當將兩者合起來先自動擷取自己所在位置的經緯度然後與固定地點進行路徑搜尋時卻弄不出來了,因為剛開始 寫的兩者在兩個類中總是取不到經緯度值,後來將兩者寫到同一個類中去了,終於取到經緯度值了,也運行出來了。需要 在 BDLocationListener的onReceiveLocation裡擷取到經緯度值,因為已經能直接拿經緯度值了,所以就可以在裡面進行路 徑搜尋了。蘿莉囉嗦說了一些估計只有我自己能看懂。。。。

總結一下自己實現的過程(只說主要的):

1.初始設定變數

2.在setContentView的前面初始化BMapManager.

3.得到MapController,確定一個點將mapview的中心設在那,(此步不可少),若缺少mapview會顯示到預設的地址(貌似是北京那塊地)影響後面起始位置路徑的搜尋。

4.產生LoctionClient,使用LocationClientOption對其進行簡單的設定。調用locationClient.start();
locationClient.requestLocation();進行定位擷取位置,使用回調給LocatiopnClient註冊監聽器,在回調方 法onReceiveLocation獲得經緯度,使用MKPlanNode設定起始位置點(已經擷取到的經緯度)與終點,就可以初始化 MKSearch,複寫其參數監聽器中的回調方法onGetWalkingRouteResult、onGetTransitRouteResult、 onGetDrivingRouteResult,最後mkSearch.walkingSearch(null, satrt, null, end);
//mkSearch.drivingSearch(null, satrt, null, end); 
//mkSearch.transitSearch("上海", satrt, end);(運行不出,待學習)
就可以進行路線搜尋了。

代碼如下

 

package com.example.lockposi;

import com.baidu.location.BDLocation;
import com.baidu.location.BDLocationListener;
import com.baidu.location.LocationClient;
import com.baidu.location.LocationClientOption;
import com.baidu.mapapi.BMapManager;
import com.baidu.mapapi.MKGeneralListener;
import com.baidu.mapapi.map.MKEvent;
import com.baidu.mapapi.map.MapController;
import com.baidu.mapapi.map.MapView;
import com.baidu.mapapi.map.RouteOverlay;
import com.baidu.mapapi.search.MKAddrInfo;
import com.baidu.mapapi.search.MKBusLineResult;
import com.baidu.mapapi.search.MKDrivingRouteResult;
import com.baidu.mapapi.search.MKPlanNode;
import com.baidu.mapapi.search.MKPoiInfo;
import com.baidu.mapapi.search.MKPoiResult;
import com.baidu.mapapi.search.MKSearch;
import com.baidu.mapapi.search.MKSearchListener;
import com.baidu.mapapi.search.MKSuggestionResult;
import com.baidu.mapapi.search.MKTransitRouteResult;
import com.baidu.mapapi.search.MKWalkingRouteResult;
import com.baidu.platform.comapi.basestruct.GeoPoint;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity {

 TextView textView;
LocationClient locationClient;
double latitude,longitude;
private MapView mapview;
BMapManager bMapManager;
static final String API_KEY="07418AEC69BAAB7104C6230A6120C580DFFAEEBB";

 @Override
protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  bMapManager=new BMapManager(getApplicationContext());
  bMapManager.init(API_KEY,new MKGeneralListener() {

   @Override
   public void onGetPermissionState(int arg0) {
    // TODO Auto-generated method stub
    if(arg0==MKEvent.ERROR_PERMISSION_DENIED){
     Toast.makeText(getApplicationContext(), "請輸入正確的key",1000).show();

    }
   }

   @Override
   public void onGetNetworkState(int arg0) {
    // TODO Auto-generated method stub
    if (arg0==MKEvent.ERROR_NETWORK_CONNECT) {
     Toast.makeText(getApplicationContext(), "您的網路出錯了",1000).show();
    }
   }
  });
  setContentView(R.layout.activity_main);
     mapview = (MapView) this.findViewById(R.id.bmapView); 
         mapview.setBuiltInZoomControls(true);  

         MapController mMapController = mapview.getController();  

         GeoPoint geoPoint = new GeoPoint((int) (31.243319 * 1E6), 
                 (int) (121.509075 * 1E6)); 
         mMapController.setCenter(geoPoint); 
         mMapController.setZoom(12);  

  textView=(TextView) findViewById(R.id.textView1);
  locationClient=new LocationClient(getApplicationContext());
  LocationClientOption locationClientOption=new LocationClientOption();
  locationClientOption.setOpenGps(true);
  locationClientOption.setCoorType("bd09ll");
  locationClientOption.setPriority(LocationClientOption.NetWorkFirst);
  locationClientOption.setScanSpan(5000);
  locationClient.setLocOption(locationClientOption);
  locationClient.start();
  locationClient.requestLocation();
  Toast.makeText(getApplicationContext(), String.valueOf(latitude),1000).show();

  locationClient.registerLocationListener(new BDLocationListener() {

   @Override
   public void onReceivePoi(BDLocation arg0) {
    // TODO Auto-generated method stub
    if (arg0==null) {
     return;
    }
    latitude=arg0.getLatitude();
    longitude=arg0.getLongitude();
    StringBuilder sBuilder=new StringBuilder();
       sBuilder.append("latitude:"+String.valueOf(arg0.getLatitude())).append("longitude:"+String.valueOf(arg0.getLongitude()));
       textView.setText(sBuilder.toString());
   }

   @Override
   public void onReceiveLocation(BDLocation arg0) {
    // TODO Auto-generated method stub
    if (arg0==null) {
     return;
    }
    latitude=arg0.getLatitude();
    longitude=arg0.getLongitude();
    StringBuilder sBuilder=new StringBuilder();
       sBuilder.append("latitude:"+arg0.getLatitude()).append("longitude:"+arg0.getLongitude());
       textView.setText(sBuilder.toString());
       MKPlanNode satrt=new MKPlanNode();
    satrt.pt=new GeoPoint((int) (31.205889 * 1E6), 
                  (int) (121.637942 * 1E6));
    MKPlanNode end=new MKPlanNode();
    end.pt=new GeoPoint((int) (31.243319 * 1E6), (int) (121.509075 * 1E6));
    final MKSearch mkSearch=new MKSearch();
    mkSearch.init(bMapManager, new MKSearchListener() {

     private int intidx;

     @Override
     public void onGetWalkingRouteResult(MKWalkingRouteResult arg0, int arg1) {
      // TODO Auto-generated method stub
      if (arg0==null) {
       return;
      }
      RouteOverlay routeOverlay=new RouteOverlay(MainActivity.this, mapview);
      routeOverlay.setData(arg0.getPlan(0).getRoute(0));
      mapview.getOverlays().add(routeOverlay);
      mapview.refresh();
     }

     @Override
     public void onGetTransitRouteResult(MKTransitRouteResult arg0, int arg1) {
      // TODO Auto-generated method stub
      if (arg0==null) {
       return;
      }
      RouteOverlay routeOverlay=new RouteOverlay(MainActivity.this, mapview);
      routeOverlay.setData(arg0.getPlan(0).getRoute(0));
      mapview.getOverlays().add(routeOverlay);
      mapview.refresh();

     }

     @Override
     public void onGetSuggestionResult(MKSuggestionResult arg0, int arg1) {
      // TODO Auto-generated method stub

     }

     @Override
     public void onGetPoiResult(MKPoiResult arg0, int arg1, int arg2) {
      // TODO Auto-generated method stub
        if (arg2 != 0 || arg0 == null) { 
                   Toast.makeText(MainActivity.this, "抱歉,未找到結果", Toast.LENGTH_LONG).show(); 
                   return; 
           } 
           // 找到大眾運輸路線poi node  
           MKPoiInfo curPoi = null; 
           int totalPoiNum  = arg0.getNumPois(); 
           for(intidx = 0; intidx<totalPoiNum; intidx++ ) { 
                   curPoi = arg0.getPoi(intidx);  
                   if ( 2 == curPoi.ePoiType ) { 
                           break;  
                   } 
           } 
           mkSearch.busLineSearch("上海", curPoi.uid); 
     }

     @Override
     public void onGetPoiDetailSearchResult(int arg0, int arg1) {
      // TODO Auto-generated method stub

     }

     @Override
     public void onGetDrivingRouteResult(MKDrivingRouteResult arg0, int arg1) {
      // TODO Auto-generated method stub
      if (arg0==null) {
       return;
      }
      RouteOverlay routeOverlay=new RouteOverlay(MainActivity.this, mapview);
      routeOverlay.setData(arg0.getPlan(0).getRoute(0));
      mapview.getOverlays().add(routeOverlay);
      mapview.refresh();
     }

     @Override
     public void onGetBusDetailResult(MKBusLineResult arg0, int arg1) {
      // TODO Auto-generated method stub
      if (arg1 != 0 || arg0 == null) { 
                   Toast.makeText(MainActivity.this, "抱歉,未找到結果", Toast.LENGTH_LONG).show(); 
                   return; 
           } 
           RouteOverlay routeOverlay = new RouteOverlay(MainActivity.this, mapview);    // 此處僅展示一個方案作為樣本 
           routeOverlay.setData(arg0.getBusRoute()); 
           mapview.getOverlays().clear(); 
           mapview.getOverlays().add(routeOverlay); 
           mapview.refresh(); 
           mapview.getController().animateTo(arg0.getBusRoute().getStart()); 
     }

     @Override
     public void onGetAddrResult(MKAddrInfo arg0, int arg1) {
      // TODO Auto-generated method stub

     }
    });

    mkSearch.walkingSearch(null, satrt, null, end);
    //mkSearch.drivingSearch(null, satrt, null, end);
    //mkSearch.transitSearch("上海", satrt, end);

   }

  });

 

 }

 

}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.