首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > 移动开发 >

百度map之路线规划

2013-10-08 
百度地图之路线规划在前面的一篇文章中介绍过查询公交路线,不过那是根据公交路线的编号进行查询,而且也只

百度地图之路线规划

在前面的一篇文章中介绍过查询公交路线,不过那是根据公交路线的编号进行查询,而且也只是按公交搜索,在本文中,将介绍根据起终点按驾车、公交、步行三种方式进行搜索,功能更为强大,而且同样可以浏览节点,不过百度Demo提供的示例只能在北京市进行搜索,如果要在其他地方进行搜索需要更改源代码,初始化为其他城市,这里,我将起终点城市也在界面上来进行获取,使用起来就更加方便了,代码如下:

主Activity(RoutePlanActivity):

package com.home;import java.util.ArrayList;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.util.Log;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.EditText;import android.widget.TextView;import android.widget.Toast;import com.baidu.mapapi.map.MKEvent;import com.baidu.mapapi.map.MKMapTouchListener;import com.baidu.mapapi.map.MapView;import com.baidu.mapapi.map.PopupClickListener;import com.baidu.mapapi.map.PopupOverlay;import com.baidu.mapapi.map.RouteOverlay;import com.baidu.mapapi.map.TransitOverlay;import com.baidu.mapapi.search.MKAddrInfo;import com.baidu.mapapi.search.MKBusLineResult;import com.baidu.mapapi.search.MKCityListInfo;import com.baidu.mapapi.search.MKDrivingRouteResult;import com.baidu.mapapi.search.MKPlanNode;import com.baidu.mapapi.search.MKPoiInfo;import com.baidu.mapapi.search.MKPoiResult;import com.baidu.mapapi.search.MKRoute;import com.baidu.mapapi.search.MKSearch;import com.baidu.mapapi.search.MKSearchListener;import com.baidu.mapapi.search.MKShareUrlResult;import com.baidu.mapapi.search.MKSuggestionResult;import com.baidu.mapapi.search.MKTransitRouteResult;import com.baidu.mapapi.search.MKWalkingRouteResult;import com.baidu.platform.comapi.basestruct.GeoPoint;/** * 此demo用来展示如何进行驾车、步行、公交路线搜索并在地图使用RouteOverlay、TransitOverlay绘制 * 同时展示如何进行节点浏览并弹出泡泡 *  */public class RoutePlanActivity extends Activity {// UI相关Button mBtnDrive = null; // 驾车搜索Button mBtnTransit = null; // 公交搜索Button mBtnWalk = null; // 步行搜索Button mBtnCusRoute = null; // 自定义路线Button mBtnCusIcon = null; // 自定义起终点图标EditText startCityText;EditText endCityText;// 浏览路线节点相关Button mBtnPre = null;// 上一个节点Button mBtnNext = null;// 下一个节点int nodeIndex = -2;// 节点索引,供浏览节点时使用MKRoute route = null;// 保存驾车/步行路线数据的变量,供浏览节点时使用TransitOverlay transitOverlay = null;// 保存公交路线图层数据的变量,供浏览节点时使用RouteOverlay routeOverlay = null;boolean useDefaultIcon = false;int searchType = -1;// 记录搜索的类型,区分驾车/步行和公交private PopupOverlay pop = null;// 弹出泡泡图层,浏览节点时使用private TextView popupText = null;// 泡泡viewprivate View viewCache = null;// 地图相关,使用继承MapView的MyRouteMapView目的是重写touch事件实现泡泡处理// 如果不处理touch事件,则无需继承,直接使用MapView即可MapView mMapView = null; // 地图View// 搜索相关MKSearch mSearch = null; // 搜索模块,也可去掉地图模块独立使用protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);DemoApplication app = (DemoApplication) this.getApplication();setContentView(R.layout.activity_routeplan);CharSequence titleLable = "路线规划功能";setTitle(titleLable);// 初始化地图mMapView = (MapView) findViewById(R.id.bmapView);mMapView.setBuiltInZoomControls(false);mMapView.getController().setZoom(12);mMapView.getController().enableClick(true);// UI初始化mBtnDrive = (Button) findViewById(R.id.drive);mBtnTransit = (Button) findViewById(R.id.transit);mBtnWalk = (Button) findViewById(R.id.walk);mBtnPre = (Button) findViewById(R.id.pre);mBtnNext = (Button) findViewById(R.id.next);mBtnCusRoute = (Button) findViewById(R.id.custombutton);mBtnCusIcon = (Button) findViewById(R.id.customicon);mBtnPre.setVisibility(View.INVISIBLE);mBtnNext.setVisibility(View.INVISIBLE);startCityText = (EditText) findViewById(R.id.activity_editText_startcity);endCityText = (EditText) findViewById(R.id.activity_editText_endcity);// 按键点击事件OnClickListener clickListener = new OnClickListener() {public void onClick(View v) {// 发起搜索SearchButtonProcess(v);}};OnClickListener nodeClickListener = new OnClickListener() {public void onClick(View v) {// 浏览路线节点nodeClick(v);}};OnClickListener customClickListener = new OnClickListener() {public void onClick(View v) {// 自设路线绘制示例intentToActivity();}};OnClickListener changeRouteIconListener = new OnClickListener() {@Overridepublic void onClick(View arg0) {changeRouteIcon();}};mBtnDrive.setOnClickListener(clickListener);mBtnTransit.setOnClickListener(clickListener);mBtnWalk.setOnClickListener(clickListener);mBtnPre.setOnClickListener(nodeClickListener);mBtnNext.setOnClickListener(nodeClickListener);mBtnCusRoute.setOnClickListener(customClickListener);mBtnCusIcon.setOnClickListener(changeRouteIconListener);// 创建 弹出泡泡图层createPaopao();// 地图点击事件处理mMapView.regMapTouchListner(new MKMapTouchListener() {@Overridepublic void onMapClick(GeoPoint point) {// 在此处理地图点击事件// 消隐popif (pop != null) {pop.hidePop();}}@Overridepublic void onMapDoubleClick(GeoPoint point) {}@Overridepublic void onMapLongClick(GeoPoint point) {}});// 初始化搜索模块,注册事件监听mSearch = new MKSearch();mSearch.init(app.mBMapManager, new MKSearchListener() {public void onGetDrivingRouteResult(MKDrivingRouteResult res,int error) {// 起点或终点有歧义,需要选择具体的城市列表或地址列表if (error == MKEvent.ERROR_ROUTE_ADDR) {// 遍历所有地址ArrayList<MKPoiInfo> stPois = res.getAddrResult().mStartPoiList;ArrayList<MKPoiInfo> enPois = res.getAddrResult().mEndPoiList;ArrayList<MKCityListInfo> stCities = res.getAddrResult().mStartCityList;ArrayList<MKCityListInfo> enCities = res.getAddrResult().mEndCityList;return;}// 错误号可参考MKEvent中的定义if (error != 0 || res == null) {Toast.makeText(RoutePlanActivity.this, "抱歉,未找到结果",Toast.LENGTH_SHORT).show();return;}searchType = 0;routeOverlay = new RouteOverlay(RoutePlanActivity.this,mMapView);// 此处仅展示一个方案作为示例routeOverlay.setData(res.getPlan(0).getRoute(0));// 清除其他图层mMapView.getOverlays().clear();// 添加路线图层mMapView.getOverlays().add(routeOverlay);// 执行刷新使生效mMapView.refresh();// 使用zoomToSpan()绽放地图,使路线能完全显示在地图上mMapView.getController().zoomToSpan(routeOverlay.getLatSpanE6(),routeOverlay.getLonSpanE6());// 移动地图到起点mMapView.getController().animateTo(res.getStart().pt);// 将路线数据保存给全局变量route = res.getPlan(0).getRoute(0);// 重置路线节点索引,节点浏览时使用nodeIndex = -1;mBtnPre.setVisibility(View.VISIBLE);mBtnNext.setVisibility(View.VISIBLE);}public void onGetTransitRouteResult(MKTransitRouteResult res,int error) {// 起点或终点有歧义,需要选择具体的城市列表或地址列表if (error == MKEvent.ERROR_ROUTE_ADDR) {// 遍历所有地址ArrayList<MKPoiInfo> stPois = res.getAddrResult().mStartPoiList;ArrayList<MKPoiInfo> enPois = res.getAddrResult().mEndPoiList;ArrayList<MKCityListInfo> stCities = res.getAddrResult().mStartCityList;ArrayList<MKCityListInfo> enCities = res.getAddrResult().mEndCityList;return;}if (error != 0 || res == null) {Toast.makeText(RoutePlanActivity.this, "抱歉,未找到结果",Toast.LENGTH_SHORT).show();return;}searchType = 1;transitOverlay = new TransitOverlay(RoutePlanActivity.this,mMapView);// 此处仅展示一个方案作为示例transitOverlay.setData(res.getPlan(0));// 清除其他图层mMapView.getOverlays().clear();// 添加路线图层mMapView.getOverlays().add(transitOverlay);// 执行刷新使生效mMapView.refresh();// 使用zoomToSpan()绽放地图,使路线能完全显示在地图上mMapView.getController().zoomToSpan(transitOverlay.getLatSpanE6(),transitOverlay.getLonSpanE6());// 移动地图到起点mMapView.getController().animateTo(res.getStart().pt);// 重置路线节点索引,节点浏览时使用nodeIndex = 0;mBtnPre.setVisibility(View.VISIBLE);mBtnNext.setVisibility(View.VISIBLE);}public void onGetWalkingRouteResult(MKWalkingRouteResult res,int error) {// 起点或终点有歧义,需要选择具体的城市列表或地址列表if (error == MKEvent.ERROR_ROUTE_ADDR) {// 遍历所有地址ArrayList<MKPoiInfo> stPois = res.getAddrResult().mStartPoiList;ArrayList<MKPoiInfo> enPois = res.getAddrResult().mEndPoiList;ArrayList<MKCityListInfo> stCities = res.getAddrResult().mStartCityList;ArrayList<MKCityListInfo> enCities = res.getAddrResult().mEndCityList;return;}if (error != 0 || res == null) {Toast.makeText(RoutePlanActivity.this, "抱歉,未找到结果",Toast.LENGTH_SHORT).show();return;}searchType = 2;routeOverlay = new RouteOverlay(RoutePlanActivity.this,mMapView);// 此处仅展示一个方案作为示例routeOverlay.setData(res.getPlan(0).getRoute(0));// 清除其他图层mMapView.getOverlays().clear();// 添加路线图层mMapView.getOverlays().add(routeOverlay);// 执行刷新使生效mMapView.refresh();// 使用zoomToSpan()绽放地图,使路线能完全显示在地图上mMapView.getController().zoomToSpan(routeOverlay.getLatSpanE6(),routeOverlay.getLonSpanE6());// 移动地图到起点mMapView.getController().animateTo(res.getStart().pt);// 将路线数据保存给全局变量route = res.getPlan(0).getRoute(0);// 重置路线节点索引,节点浏览时使用nodeIndex = -1;mBtnPre.setVisibility(View.VISIBLE);mBtnNext.setVisibility(View.VISIBLE);}public void onGetAddrResult(MKAddrInfo res, int error) {}public void onGetPoiResult(MKPoiResult res, int arg1, int arg2) {}public void onGetBusDetailResult(MKBusLineResult result, int iError) {}@Overridepublic void onGetSuggestionResult(MKSuggestionResult res, int arg1) {}@Overridepublic void onGetPoiDetailSearchResult(int type, int iError) {}@Overridepublic void onGetShareUrlResult(MKShareUrlResult result, int type,int error) {}});}/** * 发起路线规划搜索示例 *  * @param v */void SearchButtonProcess(View v) {// 重置浏览节点的路线数据route = null;routeOverlay = null;transitOverlay = null;mBtnPre.setVisibility(View.INVISIBLE);mBtnNext.setVisibility(View.INVISIBLE);// 处理搜索按钮响应EditText editSt = (EditText) findViewById(R.id.start);EditText editEn = (EditText) findViewById(R.id.end);// 对起点终点的name进行赋值,也可以直接对坐标赋值,赋值坐标则将根据坐标进行搜索MKPlanNode stNode = new MKPlanNode();stNode.name = editSt.getText().toString();MKPlanNode enNode = new MKPlanNode();enNode.name = editEn.getText().toString();String startCity = startCityText.getText().toString();String endCity = endCityText.getText().toString();if ("".equals(startCity)) {Toast.makeText(this, "请输入起点城市", Toast.LENGTH_SHORT).show();return;}if (!mBtnTransit.equals(v)) {if ("".equals(endCity)) {Toast.makeText(this, "请输入终点城市", Toast.LENGTH_SHORT).show();return;}}if (mBtnDrive.equals(v)) {mSearch.drivingSearch(startCity, stNode, endCity, enNode);} else if (mBtnTransit.equals(v)) {mSearch.transitSearch(startCity, stNode, enNode);} else if (mBtnWalk.equals(v)) {mSearch.walkingSearch(startCity, stNode, endCity, enNode);}}/** * 节点浏览示例 *  * @param v */public void nodeClick(View v) {viewCache = getLayoutInflater().inflate(R.layout.custom_text_view, null);popupText = (TextView) viewCache.findViewById(R.id.textcache);if (searchType == 0 || searchType == 2) {// 驾车、步行使用的数据结构相同,因此类型为驾车或步行,节点浏览方法相同if (nodeIndex < -1 || route == null|| nodeIndex >= route.getNumSteps())return;// 上一个节点if (mBtnPre.equals(v) && nodeIndex > 0) {// 索引减nodeIndex--;// 移动到指定索引的坐标mMapView.getController().animateTo(route.getStep(nodeIndex).getPoint());// 弹出泡泡popupText.setBackgroundResource(R.drawable.popup);popupText.setText(route.getStep(nodeIndex).getContent());pop.showPopup(BMapUtil.getBitmapFromView(popupText), route.getStep(nodeIndex).getPoint(), 5);}// 下一个节点if (mBtnNext.equals(v) && nodeIndex < (route.getNumSteps() - 1)) {// 索引加nodeIndex++;// 移动到指定索引的坐标mMapView.getController().animateTo(route.getStep(nodeIndex).getPoint());// 弹出泡泡popupText.setBackgroundResource(R.drawable.popup);popupText.setText(route.getStep(nodeIndex).getContent());pop.showPopup(BMapUtil.getBitmapFromView(popupText), route.getStep(nodeIndex).getPoint(), 5);}}if (searchType == 1) {// 公交换乘使用的数据结构与其他不同,因此单独处理节点浏览if (nodeIndex < -1 || transitOverlay == null|| nodeIndex >= transitOverlay.getAllItem().size())return;// 上一个节点if (mBtnPre.equals(v) && nodeIndex > 1) {// 索引减nodeIndex--;// 移动到指定索引的坐标mMapView.getController().animateTo(transitOverlay.getItem(nodeIndex).getPoint());// 弹出泡泡popupText.setBackgroundResource(R.drawable.popup);popupText.setText(transitOverlay.getItem(nodeIndex).getTitle());pop.showPopup(BMapUtil.getBitmapFromView(popupText),transitOverlay.getItem(nodeIndex).getPoint(), 5);}// 下一个节点if (mBtnNext.equals(v)&& nodeIndex < (transitOverlay.getAllItem().size() - 2)) {// 索引加nodeIndex++;// 移动到指定索引的坐标mMapView.getController().animateTo(transitOverlay.getItem(nodeIndex).getPoint());// 弹出泡泡popupText.setBackgroundResource(R.drawable.popup);popupText.setText(transitOverlay.getItem(nodeIndex).getTitle());pop.showPopup(BMapUtil.getBitmapFromView(popupText),transitOverlay.getItem(nodeIndex).getPoint(), 5);}}}/** * 创建弹出泡泡图层 */public void createPaopao() {// 泡泡点击响应回调PopupClickListener popListener = new PopupClickListener() {@Overridepublic void onClickedPopup(int index) {Log.v("click", "clickapoapo");}};pop = new PopupOverlay(mMapView, popListener);}/** * 跳转自设路线Activity */public void intentToActivity() {// 跳转到自设路线演示demoIntent intent = new Intent(this, CustomRouteOverlayActivity.class);startActivity(intent);}/** * 切换路线图标,刷新地图使其生效 注意: 起终点图标使用中心对齐. */protected void changeRouteIcon() {Button btn = (Button) findViewById(R.id.customicon);if (routeOverlay == null && transitOverlay == null) {return;}if (useDefaultIcon) {if (routeOverlay != null) {routeOverlay.setStMarker(null);routeOverlay.setEnMarker(null);}if (transitOverlay != null) {transitOverlay.setStMarker(null);transitOverlay.setEnMarker(null);}btn.setText("自定义起终点图标");Toast.makeText(this, "将使用系统起终点图标", Toast.LENGTH_SHORT).show();} else {if (routeOverlay != null) {routeOverlay.setStMarker(getResources().getDrawable(R.drawable.icon_st));routeOverlay.setEnMarker(getResources().getDrawable(R.drawable.icon_en));}if (transitOverlay != null) {transitOverlay.setStMarker(getResources().getDrawable(R.drawable.icon_st));transitOverlay.setEnMarker(getResources().getDrawable(R.drawable.icon_en));}btn.setText("系统起终点图标");Toast.makeText(this, "将使用自定义起终点图标", Toast.LENGTH_SHORT).show();}useDefaultIcon = !useDefaultIcon;mMapView.refresh();}@Overrideprotected void onPause() {mMapView.onPause();super.onPause();}@Overrideprotected void onResume() {mMapView.onResume();super.onResume();}@Overrideprotected void onDestroy() {mMapView.destroy();super.onDestroy();}@Overrideprotected void onSaveInstanceState(Bundle outState) {super.onSaveInstanceState(outState);mMapView.onSaveInstanceState(outState);}@Overrideprotected void onRestoreInstanceState(Bundle savedInstanceState) {super.onRestoreInstanceState(savedInstanceState);mMapView.onRestoreInstanceState(savedInstanceState);}}

布局文件(activity_routeplan):

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="fill_parent"    android:layout_height="fill_parent"    android:orientation="vertical" >    <LinearLayout        android:layout_width="fill_parent"        android:layout_height="wrap_content"        android:orientation="horizontal" >        <TextView            android:id="@+id/textView_startcity"            android:layout_width="match_parent"            android:layout_height="wrap_content"            android:layout_weight="1"            android:text="起点城市:" />        <EditText            android:id="@+id/activity_editText_startcity"            android:layout_width="match_parent"            android:layout_height="wrap_content"            android:layout_weight="1"            android:ems="10"            android:text="北京" >            <requestFocus />        </EditText>        <TextView            android:id="@+id/textView_endcity"            android:layout_width="match_parent"            android:layout_height="wrap_content"            android:layout_marginLeft="10dp"            android:layout_weight="1"            android:text="终点城市:" />        <EditText            android:id="@+id/activity_editText_endcity"            android:layout_width="match_parent"            android:layout_height="wrap_content"            android:layout_weight="1"            android:ems="10"            android:text="北京" >            <requestFocus />        </EditText>    </LinearLayout>    <LinearLayout        android:layout_width="fill_parent"        android:layout_height="wrap_content"        android:orientation="horizontal" >        <TextView            android:id="@+id/textView1"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:text="起点:" />        <EditText            android:id="@+id/start"            android:layout_width="fill_parent"            android:layout_height="wrap_content"            android:ems="10"            android:text="龙泽" >            <requestFocus />        </EditText>    </LinearLayout>    <LinearLayout        android:layout_width="fill_parent"        android:layout_height="wrap_content"        android:orientation="horizontal" >        <TextView            android:id="@+id/textView2"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:text="终点:" />        <EditText            android:id="@+id/end"            android:layout_width="fill_parent"            android:layout_height="wrap_content"            android:ems="10"            android:text="西单" >            <requestFocus />        </EditText>    </LinearLayout>    <LinearLayout        android:layout_width="fill_parent"        android:layout_height="wrap_content"        android:layout_marginBottom="5dip"        android:layout_marginTop="5dip"        android:orientation="horizontal" >        <Button            android:id="@+id/drive"            android:layout_width="fill_parent"            android:layout_height="fill_parent"            android:layout_marginLeft="2dip"            android:layout_marginRight="2dip"            android:layout_weight="1.0"            android:background="@drawable/button_style"            android:text="驾车搜索" />        <Button            android:id="@+id/transit"            android:layout_width="fill_parent"            android:layout_height="fill_parent"            android:layout_marginLeft="2dip"            android:layout_marginRight="2dip"            android:layout_weight="1.0"            android:background="@drawable/button_style"            android:text="公交搜索" />        <Button            android:id="@+id/walk"            android:layout_width="fill_parent"            android:layout_height="fill_parent"            android:layout_marginLeft="2dip"            android:layout_marginRight="2dip"            android:layout_weight="1.0"            android:background="@drawable/button_style"            android:text="步行搜索" />    </LinearLayout>    <RelativeLayout        android:layout_width="match_parent"        android:layout_height="match_parent" >        <com.baidu.mapapi.map.MapView            android:id="@+id/bmapView"            android:layout_width="fill_parent"            android:layout_height="fill_parent"            android:clickable="true" />        <LinearLayout            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_alignParentRight="true"            android:layout_alignParentTop="true"            android:layout_alignWithParentIfMissing="false"            android:layout_marginRight="10dp"            android:layout_marginTop="10dip"            android:orientation="vertical" >            <Button                android:id="@+id/custombutton"                android:layout_width="fill_parent"                android:layout_height="fill_parent"                android:layout_weight="1.0"                android:background="@drawable/button_style"                android:text="自设路线示例" />            <Button                android:id="@+id/customicon"                android:layout_width="fill_parent"                android:layout_height="fill_parent"                android:layout_marginTop="10dip"                android:layout_weight="1.0"                android:background="@drawable/button_style"                android:text="自定义起终点图标" />        </LinearLayout>        <LinearLayout            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_alignParentBottom="true"            android:layout_alignWithParentIfMissing="false"            android:layout_centerHorizontal="true"            android:layout_centerVertical="false"            android:layout_marginBottom="10dip" >            <Button                android:id="@+id/pre"                android:layout_width="fill_parent"                android:layout_height="fill_parent"                android:layout_marginLeft="2dip"                android:layout_marginRight="2dip"                android:layout_weight="1.0"                android:background="@drawable/pre_" />            <Button                android:id="@+id/next"                android:layout_width="fill_parent"                android:layout_height="fill_parent"                android:layout_marginLeft="2dip"                android:layout_marginRight="2dip"                android:layout_weight="1.0"                android:background="@drawable/next_" />        </LinearLayout>    </RelativeLayout></LinearLayout>

自设路线类(CustomRouteOverlayActivity)

package com.home;import com.baidu.mapapi.map.MapView;import com.baidu.mapapi.map.RouteOverlay;import com.baidu.mapapi.search.MKRoute;import com.baidu.platform.comapi.basestruct.GeoPoint;import android.app.Activity;import android.os.Bundle;/** * 此demo用来展示如何用自己的数据构造一条路线在地图上绘制出来 *  */public class CustomRouteOverlayActivity extends Activity {// 地图相关MapView mMapView = null; // 地图Viewprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_customroute);CharSequence titleLable = "路线规划功能——自设路线示例";setTitle(titleLable);// 初始化地图mMapView = (MapView) findViewById(R.id.bmapView);mMapView.getController().enableClick(true);mMapView.getController().setZoom(13);/** * 演示自定义路线使用方法 在北京地图上画一个北斗七星 * 想知道某个点的百度经纬度坐标请点击:http://api.map.baidu.com/lbsapi/getpoint/index.html */GeoPoint p1 = new GeoPoint((int) (39.9411 * 1E6),(int) (116.3714 * 1E6));GeoPoint p2 = new GeoPoint((int) (39.9498 * 1E6),(int) (116.3785 * 1E6));GeoPoint p3 = new GeoPoint((int) (39.9436 * 1E6),(int) (116.4029 * 1E6));GeoPoint p4 = new GeoPoint((int) (39.9329 * 1E6),(int) (116.4035 * 1E6));GeoPoint p5 = new GeoPoint((int) (39.9218 * 1E6),(int) (116.4115 * 1E6));GeoPoint p6 = new GeoPoint((int) (39.9144 * 1E6),(int) (116.4230 * 1E6));GeoPoint p7 = new GeoPoint((int) (39.9126 * 1E6),(int) (116.4387 * 1E6));// 起点坐标GeoPoint start = p1;// 终点坐标GeoPoint stop = p7;// 第一站,站点坐标为p3,经过p1,p2GeoPoint[] step1 = new GeoPoint[3];step1[0] = p1;step1[1] = p2;step1[2] = p3;// 第二站,站点坐标为p5,经过p4GeoPoint[] step2 = new GeoPoint[2];step2[0] = p4;step2[1] = p5;// 第三站,站点坐标为p7,经过p6GeoPoint[] step3 = new GeoPoint[2];step3[0] = p6;step3[1] = p7;// 站点数据保存在一个二维数据中GeoPoint[][] routeData = new GeoPoint[3][];routeData[0] = step1;routeData[1] = step2;routeData[2] = step3;// 用站点数据构建一个MKRouteMKRoute route = new MKRoute();route.customizeRoute(start, stop, routeData);// 将包含站点信息的MKRoute添加到RouteOverlay中RouteOverlay routeOverlay = new RouteOverlay(CustomRouteOverlayActivity.this, mMapView);routeOverlay.setData(route);// 向地图添加构造好的RouteOverlaymMapView.getOverlays().add(routeOverlay);// 执行刷新使生效mMapView.refresh();}@Overrideprotected void onPause() {mMapView.onPause();super.onPause();}@Overrideprotected void onResume() {mMapView.onResume();super.onResume();}@Overrideprotected void onDestroy() {mMapView.destroy();super.onDestroy();}@Overrideprotected void onSaveInstanceState(Bundle outState) {super.onSaveInstanceState(outState);mMapView.onSaveInstanceState(outState);}@Overrideprotected void onRestoreInstanceState(Bundle savedInstanceState) {super.onRestoreInstanceState(savedInstanceState);mMapView.onRestoreInstanceState(savedInstanceState);}}

自设路线之布局文件:

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="fill_parent"    android:layout_height="fill_parent"    android:orientation="vertical" >    <TextView        android:id="@+id/textView1"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="自设路线功能演示开发者如何自已设定一条路线数据,包括如何设定起点、终点和中间的关键节点。以下展示如何在北京地图上绘制一条形如北斗七星的路线" />    <com.baidu.mapapi.map.MapView        android:id="@+id/bmapView"        android:layout_width="fill_parent"        android:layout_height="fill_parent"        android:clickable="true" /></LinearLayout>

配置文件和Application类同之前。


附上图片效果:

百度map之路线规划

百度map之路线规划

1楼suannai03143小时前
您的文章已被推荐到博客首页和个人页侧边栏推荐文章,感谢您的分享。

热点排行