在使用百度地图SDK进行线路查询时可以分为三类情况:公交线路查询,自驾线路查询,以及步行线路查询,使用的方法其实大同小异。ps:版本号V3.2
1. 使用线路规划查询主要的类就是RoutePlanSearch,第一步先来生成一个RoutePlanSearch对象,并设置查询接口处理的回调接口
mSearch = RoutePlanSearch.newInstance();
mSearch.setOnGetRoutePlanResultListener(new OnGetRoutePlanResultListener() {
@Override
public void onGetWalkingRouteResult(WalkingRouteResult arg0) {
// TODO Auto-generated method stub
}
@Override
public void onGetTransitRouteResult(TransitRouteResult result) {
// TODO Auto-generated method stub
if (result == null
|| result.error != SearchResult.ERRORNO.NO_ERROR) {
Toast.makeText(MainActivity.this, "抱歉,未找到结果",
Toast.LENGTH_SHORT).show();
}
if (result.error == SearchResult.ERRORNO.AMBIGUOUS_ROURE_ADDR) {
// 起终点或途经点地址有岐义,通过以下接口获取建议查询信息
// result.getSuggestAddrInfo()
return;
}
if (result.error == SearchResult.ERRORNO.NO_ERROR) {
TransitRouteOverlay overlay = new TransitRouteOverlay(
mBaiduMap);
mBaiduMap.setOnMarkerClickListener(overlay);
overlay.setData(result.getRouteLines().get(0));
overlay.addToMap();
overlay.zoomToSpan();
}
}
@Override
public void onGetDrivingRouteResult(DrivingRouteResult arg0) {
// TODO Auto-generated method stub
}
});
关于回调接口的结果作以下几点说明:
1)查询结果的状态保存在TransitRouteResult中error域内,结果有:AMBIGUOUS_KEYWORD
,检索词有岐义;AMBIGUOUS_ROURE_ADDR,
检索地址有岐义;NO_ERROR
,检索结果正常返回;NOT_SUPPORT_BUS
,该城市不支持公交搜索;NOT_SUPPORT_BUS_2CITY
,不支持跨城市公交;RESULT_NOT_FOUND
,没有找到检索结果;ST_EN_TOO_NEAR
,起终点太近。
2)result.getRouteLines()返回已查询到的所有线路,为一个RouteLine的List集合
3)绘制公交线路,利用TransitRouteOverlay来将公交线路绘制在地图上
2. 设置查询路线的起点和终点:主要使用PlanNode以及TransitRoutePlanOption
<pre name="code" class="java"> startNode = PlanNode.withCityNameAndPlaceName("西安", "钟楼");
endNode = PlanNode.withCityNameAndPlaceName("西安", "兴庆公园");TransitRoutePlanOption option = new TransitRoutePlanOption();option.from(startNode);option.to(endNode);option.city("西安");mSearch.transitSearch(option);
如果进行自驾路线和步行路线的查询只需将TransitRoutePlanOption对象换为DrivingRoutePlanOption,WalkingRoutePlanOption并调用mSearch相应的drivingSearch方法以及walkingSearch方法即可,结果也将返回在回调接口中的onGetDrivingRouteResulty以及onGetWalkingRouteResult方法中
附上源码:
package com.example.gymapp;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;
import com.baidu.mapapi.map.BaiduMap;
import com.baidu.mapapi.map.MapView;
import com.baidu.mapapi.overlayutil.TransitRouteOverlay;
import com.baidu.mapapi.search.core.SearchResult;
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.TransitRoutePlanOption;
import com.baidu.mapapi.search.route.TransitRouteResult;
import com.baidu.mapapi.search.route.WalkingRouteResult;
/**
* @author acer
*
*/
public class MainActivity extends Activity {
MapView mMapView;
BaiduMap mBaiduMap;
private RoutePlanSearch mSearch;
private PlanNode startNode;
private PlanNode endNode;
private Button loactionButton;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mMapView = (MapView) findViewById(R.id.bmapView);
loactionButton = (Button) findViewById(R.id.button1);
mBaiduMap = mMapView.getMap();
mSearch = RoutePlanSearch.newInstance();
mSearch.setOnGetRoutePlanResultListener(new OnGetRoutePlanResultListener() {
@Override
public void onGetWalkingRouteResult(WalkingRouteResult arg0) {
// TODO Auto-generated method stub
}
@Override
public void onGetTransitRouteResult(TransitRouteResult result) {
// TODO Auto-generated method stub
if (result == null
|| result.error != SearchResult.ERRORNO.NO_ERROR) {
Toast.makeText(MainActivity.this, "抱歉,未找到结果",
Toast.LENGTH_SHORT).show();
}
if (result.error == SearchResult.ERRORNO.AMBIGUOUS_ROURE_ADDR) {
// 起终点或途经点地址有岐义,通过以下接口获取建议查询信息
// result.getSuggestAddrInfo()
return;
}
if (result.error == SearchResult.ERRORNO.NO_ERROR) {
TransitRouteOverlay overlay = new TransitRouteOverlay(
mBaiduMap);
mBaiduMap.setOnMarkerClickListener(overlay);
overlay.setData(result.getRouteLines().get(0));
overlay.addToMap();
overlay.zoomToSpan();
}
}
@Override
public void onGetDrivingRouteResult(DrivingRouteResult arg0) {
// TODO Auto-generated method stub
}
});
loactionButton.setText("查询");
loactionButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
startNode = PlanNode.withCityNameAndPlaceName("西安", "钟楼");
endNode = PlanNode.withCityNameAndPlaceName("西安", "兴庆公园");
TransitRoutePlanOption option = new TransitRoutePlanOption();
option.from(startNode);
option.to(endNode);
option.city("西安");
mSearch.transitSearch(option);
}
});
}
@Override
protected void onPause() {
mMapView.onPause();
super.onPause();
}
@Override
protected void onResume() {
mMapView.onResume();
super.onResume();
}
@Override
protected void onDestroy() {
mMapView.onDestroy();
mMapView = null;
super.onDestroy();
}
}