您的位置:首页 > 移动开发 > Android开发

Android开发之百度SDK的使用--线路查询

2014-11-29 10:51 423 查看
     在使用百度地图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();
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: