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

本文介绍了如何在Android应用中使用百度地图SDK进行线路查询,包括公交、自驾和步行三种方式。通过创建RoutePlanSearch对象并设置回调接口,结合TransitRouteResult和RouteLine来获取和展示查询结果。代码示例展示了具体的实现步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

     在使用百度地图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();
	}

}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值