android 百度地图SDK 获得详细路线信息

package com.example.baidulbs;

import android.content.Context;
import android.widget.Toast;

import com.baidu.location.BDLocation;
import com.baidu.location.BDLocationListener;
import com.baidu.location.LocationClient;
import com.baidu.location.LocationClientOption;
import com.baidu.mapapi.map.BaiduMap;
import com.baidu.mapapi.map.MapStatus;
import com.baidu.mapapi.map.MapStatusUpdateFactory;
import com.baidu.mapapi.map.MapView;
import com.baidu.mapapi.map.MyLocationData;
import com.baidu.mapapi.model.LatLng;
import com.baidu.mapapi.search.core.SearchResult;
import com.baidu.mapapi.search.route.BikingRouteResult;
import com.baidu.mapapi.search.route.DrivingRoutePlanOption;
import com.baidu.mapapi.search.route.DrivingRouteResult;
import com.baidu.mapapi.search.route.OnGetRoutePlanResultListener;
import com.baidu.mapapi.search.route.PlanNode;
import com.baidu.mapapi.search.route.RoutePlanSearch;
import com.baidu.mapapi.search.route.TransitRouteResult;
import com.baidu.mapapi.search.route.WalkingRouteResult;
import com.example.overlayutl.DrivingRouteOverlay;

/**
 * @author memory_coder
 * @version 2017-4-3 下午7:43:51
 * @application 定位加上路线规划
 */
public class RouteLbs implements OnGetRoutePlanResultListener
{
	private BaiduMap mbaiDuMap;
	private Context mcontext;
	//定位
	private LocationClient mlocClient;
	private MyLocationListener myLocListener;
	private LocationClientOption option;
	private boolean isFristLoc = true;
	//路线规划
	private RoutePlanSearch mRPSearch;
	private String startNode ;
	private String cityName ;
	private String endNode = "政府";

	public RouteLbs(Context context,MapView mmapView)
	{
		this.mcontext = context;
		this.mbaiDuMap = mmapView.getMap();
		
		this.option = new LocationClientOption();
		this.mlocClient = new LocationClient(mcontext);
		this.myLocListener = new MyLocationListener();
		
		this.mRPSearch = RoutePlanSearch.newInstance();
	}
	public void start_loc()
	{
		mbaiDuMap.setMyLocationEnabled(true);
		mlocClient.registerLocationListener(myLocListener);
        option.setOpenGps(true); // 打开gps
        option.setCoorType("bd09ll"); // 设置坐标类型
        option.setScanSpan(1000);
        option.setAddrType("all");//加上才能获取定位详细地址
        mlocClient.setLocOption(option);
        mlocClient.start();
	}
	public void getDrivePlan()
	{
                //设置起始位置
               PlanNode stNode = PlanNode.withCityNameAndPlaceName(cityName,"大学");
		PlanNode enNode = PlanNode.withCityNameAndPlaceName(cityName, endNode);
		mRPSearch.drivingSearch(new DrivingRoutePlanOption()
				.from(stNode).to(enNode));
               //设置路线监听
              mRPSearch.setOnGetRoutePlanResultListener(this);
	}
         //定位服务
        private class MyLocationListener implements BDLocationListener
	{

		@Override
		public void onReceiveLocation(BDLocation Blocation)
		{
			// TODO Auto-generated method stub
			if(Blocation ==null)
			{
				Toast.makeText(mcontext, "定位失败", Toast.LENGTH_SHORT)
				.show();
			}
			//包装位置信息
			MyLocationData.Builder builder = new MyLocationData.Builder();
			builder.accuracy(Blocation.getRadius());
			builder.direction(100);
			builder.latitude(Blocation.getLatitude());
			builder.longitude(Blocation.getLongitude());
			MyLocationData locData = builder.build();
			//在地图上显示
			mbaiDuMap.setMyLocationData(locData);
			//自动定位
			if(isFristLoc)
			{
				isFristLoc = false;
				LatLng ll = new LatLng(Blocation.getLatitude(), 
										Blocation.getLongitude());
				MapStatus.Builder mbuilder = new MapStatus.Builder();
				mbuilder.target(ll).zoom(19.0f);
				mbaiDuMap.animateMapStatus(MapStatusUpdateFactory
						.newMapStatus(mbuilder.build()));
			}
			startNode = Blocation.getAddrStr();
			cityName = Blocation.getCity();
/*			
			Toast.makeText(mcontext, Blocation.getAddrStr(),
							Toast.LENGTH_SHORT).show();*/
		}

	}
	@Override
	public void onGetBikingRouteResult(BikingRouteResult arg0)
	{
		// TODO Auto-generated method stub
		
	}
	@Override
	public void onGetDrivingRouteResult(DrivingRouteResult arg0)
	{
		// TODO Auto-generated method stub
		if(arg0==null||arg0.error!=SearchResult.ERRORNO.NO_ERROR)
		{
			Toast.makeText(mcontext, "null路程", Toast.LENGTH_SHORT).show();
		}
		if(arg0.error == SearchResult.ERRORNO.AMBIGUOUS_ROURE_ADDR)
		{
			return ;
		}
		if(arg0.error== SearchResult.ERRORNO.NO_ERROR)
		{
			 //int nodeIndex=-1;
			//这个类在我的百度SDK上是没有的,用于把路线显示出来。我是在网上找的一个类库,如果有需要请加QQ1121767192 备注百度SDk
			DrivingRouteOverlay overlay = new DrivingRouteOverlay(mbaiDuMap);
			//overlayManger = overlay;
			mbaiDuMap.setOnMarkerClickListener(overlay);
			overlay.setData(arg0.getRouteLines().get(0));
			overlay.addToMap();
			overlay.zoomToSpan();
		}
                //循环输出路径信息和距离
                //arg0.getRoutelines(0)就是获取第一条路线,一般都有多条路线
                for(int i=0;i<arg0.getRouteLines().get(0).getAllStep().size();i++)
		{

			System.out.println(arg0.getRouteLines().get(0).getAllStep().get(i).getDistance());
			System.out.println(arg0.getRouteLines().get(0).getAllStep().get(i).getInstructions());

		}
	}
	@Override
	public void onGetTransitRouteResult(TransitRouteResult arg0)
	{
		// TODO Auto-generated method stub
		
	}
	@Override
	public void onGetWalkingRouteResult(WalkingRouteResult arg0)
	{
		// TODO Auto-generated method stub
		
	}
}


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

memory_cood

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值