百度地图SDK for Android【Demo路径规划】

今天我将给大家分享路径规划接口的使用。

首先,我们要构建一个最基本的地图应用,具体介绍请参考:百度地图SDK for Android【Demo地图展示】

自此基础之上,我们对工程做一定的修改,即可实现一个最基本的路径规划应用。

第一步,修改布局文件,添加用于输入起点、终点的输入框已经执行路径规划操作的按钮。代码如下所示:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity" >

    <!-- 放入百度地图的mapview -->
    <com.baidu.mapapi.map.MapView
        android:id="@+id/bmapsView"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:clickable="true" />

    <LinearLayout
        android:id="@+id/linearLayout1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true" 
        android:layout_toLeftOf="@+id/button1">
        <!-- 起点输入框 -->
        <EditText
	        android:id="@+id/editText1"
	        android:layout_width="wrap_content"
	        android:layout_height="wrap_content"
	        android:ems="50" 
	        android:layout_weight="1"
	        android:hint="请输入起点">
	    </EditText>
	    <!-- 终点输入框 -->
	    <EditText
	        android:id="@+id/editText2"
	        android:layout_width="wrap_content"
	        android:layout_height="wrap_content"
	        android:ems="50" 
	        android:layout_weight="1"
	        android:hint="请输入终点">
	    </EditText>
    </LinearLayout>

    <!-- 搜索执行按钮 -->
    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"
        android:text="《搜索》" />

</RelativeLayout>

第二步,在主程序中定义并初始化以上控件(地图控件、输入框控件和按钮控件)。代码如下:

		// 初始化mapview对象,并且设置显示缩放控件
		mapView = (MapView) findViewById(R.id.bmapsView);
		mapView.setBuiltInZoomControls(true);
		
		// 初始化起点、终点输入框及搜索按钮
		startEditText = (EditText) findViewById(R.id.editText1);
		endEditText = (EditText) findViewById(R.id.editText2);
		button = (Button) findViewById(R.id.button1);

第三步,定义检索所需的对象和用于监听检索结果的对象,并实现监听方法。代码如下:

注意:路径规划实际上也是一种特殊的空间检索,因此监听对象和Poi检索的是一样的,有兴趣的读者还可参看上一篇关于Poi检索的博客

	// 定义路径搜索对象
	MKSearch mkSearch = null;
	
	// 结果监听对象
	MKSearchListener mkSearchListener = new MKSearchListener() {
		
		@Override
		public void onGetWalkingRouteResult(MKWalkingRouteResult arg0, int arg1) {
			// TODO Auto-generated method stub
			if (arg1 != 0 || arg0 == null) {
				Toast.makeText(MainActivity.this, "抱歉,未找到结果", Toast.LENGTH_SHORT).show();
				return;
			}
			
			RouteOverlay routeOverlay = new RouteOverlay(MainActivity.this, mapView);
		    // 此处仅展示一个方案作为示例
		    routeOverlay.setData(arg0.getPlan(0).getRoute(0));
		    mapView.getOverlays().clear();
		    mapView.getOverlays().add(routeOverlay);
		    mapView.refresh();
		    mapView.getController().animateTo(arg0.getStart().pt);
		    
		}
		
		@Override
		public void onGetTransitRouteResult(MKTransitRouteResult arg0, int arg1) {
			// TODO Auto-generated method stub
			
		}
		
		@Override
		public void onGetSuggestionResult(MKSuggestionResult arg0, int arg1) {
			// TODO Auto-generated method stub
			
		}
		
		@Override
		public void onGetPoiResult(MKPoiResult arg0, int arg1, int arg2) {
			// TODO Auto-generated method stub
			
		}
		
		@Override
		public void onGetPoiDetailSearchResult(int arg0, int arg1) {
			// TODO Auto-generated method stub
			
		}
		
		@Override
		public void onGetDrivingRouteResult(MKDrivingRouteResult arg0, int arg1) {
			// TODO Auto-generated method stub
			
		}
		
		@Override
		public void onGetBusDetailResult(MKBusLineResult arg0, int arg1) {
			// TODO Auto-generated method stub
			
		}
		
		@Override
		public void onGetAddrResult(MKAddrInfo arg0, int arg1) {
			// TODO Auto-generated method stub
			
		}
	};

以上代码主要实现了对步行路径规划的事件监听,本示例也是针对步行检索所展开的,开发者可根据自身的实际需求实现各方法的具体操作。

第四步,初始化检索对象(与Poi检索的方法相同)。代码如下:

		// 初始化检索对象
		mkSearch = new MKSearch();
		mkSearch.init(bMapManager, mkSearchListener);

第五步,实现button的点击实现,即首先判断用户输入的关键字是否为空,不为空才开始执行检索。代码如下:

		// 设置button的点击事件,先判断起点终点是否为空,不为空就开始执行步行检索
		button.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				String start = startEditText.getText().toString();
				String end = endEditText.getText().toString();
				if(start.equals("") || end.equals(""))
				{
					Toast.makeText(MainActivity.this, "起点或终点不可为空!", Toast.LENGTH_SHORT).show();
				}
				else 
				{
					MKPlanNode startNode = new MKPlanNode();
					startNode.name = start;
					MKPlanNode endNode = new MKPlanNode();
					endNode.name = end;
					
					// 这里仅以步行搜索为例,开发者可根据自己的实际需求自定选择route类型
					mkSearch.walkingSearch("北京", startNode, "北京", endNode);
				}
			}
		});

第六步,完成并测试结果。效果图如下所示:

注意:以上代码只是核心代码,且只针对步行检索做了示例。百度地图SDK为开发者提供了驾车线路检索、步行线路检索和公交线路检索,开发者可根据实际问题自行选择。(点击下载本示例的原工程文件



更多详细信息请登录百度地图API官方网站:http://developer.baidu.com/map/
百度地图API论坛:http://bbs.lbsyun.baidu.com/




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值