本文是在上一篇文章基础上进行的:http://blog.csdn.net/wzhworld/article/details/79130975
同上篇文章,这些内容都是在百度地图sdk可以看到,但是可能百度因为为了把地图分成几个功能,导致一些内容讲得不清晰,所以就有了以下的笔记,就结合着demo,别人实现的功能,写出来。
官方文档http://lbsyun.baidu.com/index.php?title=androidsdk/guide/route/drive
驾车线路规划
第二个点就是PlanNode如果找不到相关地址会返回空,然后我只是需要经纬度来定位我的目的地,所以使用经纬度直接定位目的地即可。PlanNode.withLocation(endLl)
保证代码顺序为以上介绍的,否则可能初始化的时候顺序不对造成为空。以下为代码块
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
SDKInitializer.initialize(getApplicationContext());
setContentView(R.layout.activity_main);
initPlan();
}
private void setLocation() {
LatLng fromLl = new LatLng(sLocation.getLatitude(),sLocation.getLongitude());
LatLng endLl = new LatLng(23.664288,116.628909);
startNode = PlanNode.withLocation(fromLl);
endNode = PlanNode.withLocation(endLl);
}
private void initPlan() {
mSearch = RoutePlanSearch.newInstance();
mSearch.setOnGetRoutePlanResultListener(new OnGetRoutePlanResultListener() {
@Override
public void onGetWalkingRouteResult(WalkingRouteResult walkingRouteResult) {
}
@Override
public void onGetTransitRouteResult(TransitRouteResult transitRouteResult) {
}
@Override
public void onGetMassTransitRouteResult(MassTransitRouteResult massTransitRouteResult) {
}
@Override
public void onGetDrivingRouteResult(DrivingRouteResult drivingRouteResult) {
if (drivingRouteResult == null || drivingRouteResult.error != SearchResult.ERRORNO.NO_ERROR) {
Toast.makeText(MainActivity.this, "抱歉,未找到结果", Toast.LENGTH_SHORT).show();
}
if (drivingRouteResult.error == SearchResult.ERRORNO.AMBIGUOUS_ROURE_ADDR) {
// 起终点或途经点地址有岐义,通过以下接口获取建议查询信息
drivingRouteResult.getSuggestAddrInfo();
return;
}
if (drivingRouteResult.error == SearchResult.ERRORNO.NO_ERROR) {
if (drivingRouteResult.getRouteLines().size() >= 1) {
// DrivingRouteLine route = drivingRouteResult.getRouteLines().get(0);
DrivingRouteOverlay overlay = new DrivingRouteOverlay(mBaiduMap);
mRouteOverlay = overlay;
mBaiduMap.setOnMarkerClickListener(overlay);
overlay.setData(drivingRouteResult.getRouteLines().get(0));
overlay.addToMap();
overlay.zoomToSpan();
} else {
Log.d("route result", "结果数<0");
return;
}
}
}
@Override
public void onGetIndoorRouteResult(IndoorRouteResult indoorRouteResult) {
}
@Override
public void onGetBikingRouteResult(BikingRouteResult bikingRouteResult) {
}
});
}
@Override
public void onClick(View view) {
if(R.id.plan == view.getId()){
setLocation();
mSearch.drivingSearch(new DrivingRoutePlanOption().from(startNode).to(endNode));
}
}