博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【“零起点”--百度地图手机SDK】如何查询从西单到王府井的公交导航?
阅读量:7022 次
发布时间:2019-06-28

本文共 6216 字,大约阅读时间需要 20 分钟。

摘要:公交导航,即在市内坐公交,从哪儿去哪儿,比如从王府井到西单。有多种公交策略可以选择,比如少步行,不坐地铁等。

----------------------------------------------------------------------

系列阅读:
1、【百度地图-安卓SDK】从头开始写android程序
 
2、【“零起点”--百度地图手机SDK】如何创建一张地图
 
3、【“零起点”--百度地图手机SDK】如何使用离线地图?
 
4、【“零起点”--百度地图手机SDK】如何添加地图图层+按钮事件+水平垂直布局?
 
5、【“零起点”--百度地图手机SDK】如何进行三种POI搜索?
 

6、【“零起点”--百度地图手机SDK】如何查询公交线路?如北京的104路

-----------------------------------------------------------------------

 

先按照第6章的内容,搭好环境与代码框架。接下来,只需要修改少量代码,即可实现公交导航功能。

一、公交导航接口transitSearch

由于公交导航只支持市内公交,所以,设置城市是必须的。

目前还不支持跨城公交,将来会考虑增加火车信息。

另外,驾车导航,支持跨城驾车。

myMKSearch.transitSearch("北京", start, end); // 必须设置城市名。

 

该接口支持检索起点和终点为关键字,或者坐标。但请注意,都必须使用到MKPlanNode接口。

MKPlanNode start = new MKPlanNode();start.name = "王府井";//关键字方式//start.pt = new GeoPoint((int) (39.915 * 1E6), (int) (116.404 * 1E6));//经纬度方式

 

接下来设置公交策略。有如下几种策略:

EBUS_TIME_FIRST:时间优先;

EBUS_TRANSFER_FIRST:少换乘;

EBUS_WALK_FIRST:少步行;

EBUS_NO_SUBWAY: 不乘坐地铁。

myMKSearch.setTransitPolicy(MKSearch.EBUS_NO_SUBWAY); //不乘坐地铁

 

 

二、设置回调函数

回调函数onGetTransitRouteResult里,需要设置如下内容:

TransitOverlay transitOverlay = new TransitOverlay(YingTransitActivity.this, mMapView);//创建公交覆盖物对象           transitOverlay.setData(res.getPlan(0));// 此处仅展示一个方案作为示例mMapView.getOverlays().add(transitOverlay);//添加覆盖物到地图上mMapView.invalidate();  //刷新地图

 

三、运行结果

 

四、全部源代码

package com.baidu.yingTransit;import android.app.Activity;import android.os.Bundle;/** 引入import **/import java.util.ArrayList;import java.util.List; import android.content.Context;import android.graphics.Canvas;import android.graphics.Paint;import android.graphics.Point;import android.graphics.drawable.Drawable;import android.location.Location;import android.os.Bundle;import android.util.Log;import android.view.View;import android.widget.Toast; import com.baidu.mapapi.BMapManager;import com.baidu.mapapi.GeoPoint;import com.baidu.mapapi.ItemizedOverlay;import com.baidu.mapapi.LocationListener;import com.baidu.mapapi.MKAddrInfo;import com.baidu.mapapi.MKBusLineResult;import com.baidu.mapapi.MKDrivingRouteResult;import com.baidu.mapapi.MKGeneralListener;import com.baidu.mapapi.MKLocationManager;import com.baidu.mapapi.MKPlanNode;import com.baidu.mapapi.MKPoiInfo;import com.baidu.mapapi.MKPoiResult;import com.baidu.mapapi.MKSearch;import com.baidu.mapapi.MKSearchListener;import com.baidu.mapapi.MKSuggestionResult;import com.baidu.mapapi.MKTransitRouteResult;import com.baidu.mapapi.MKWalkingRouteResult;import com.baidu.mapapi.MapActivity;import com.baidu.mapapi.MapController;import com.baidu.mapapi.MapView;import com.baidu.mapapi.MyLocationOverlay;import com.baidu.mapapi.Overlay;import com.baidu.mapapi.OverlayItem;import com.baidu.mapapi.PoiOverlay;import com.baidu.mapapi.RouteOverlay;import com.baidu.mapapi.TransitOverlay;public class YingTransitActivity extends MapActivity {        /** 申明变量 **/    BMapManager mBMapMan = null;    MapView mMapView = null;     MKSearch myMKSearch = null;    //POI搜索变量申明        /** Called when the activity is first created. */    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);                /** 创建地图 **/        mBMapMan = new BMapManager(getApplication());        mBMapMan.init("1713A92A7A0C854D1B8717670EF8B6CA75696567", null);        super.initMapActivity(mBMapMan);                 mMapView = (MapView) findViewById(R.id.bmapsView);//地图控件,不添加的话,就不用写。        mMapView.setBuiltInZoomControls(true);  //设置启用内置的缩放控件        MapController mMapController = mMapView.getController();  // 得到mMapView的控制权,可以用它控制和驱动平移和缩放        GeoPoint point = new GeoPoint((int) (39.915 * 1E6),                (int) (116.404 * 1E6));  //用给定的经纬度构造一个GeoPoint,单位是微度 (度 * 1E6)        mMapController.setCenter(point);  //设置地图中心点        mMapController.setZoom(14);    //设置地图zoom级别                myMKSearch = new MKSearch();  //初始化        myMKSearch.init(mBMapMan, new MKSearchListener(){            @Override            public void onGetPoiResult(MKPoiResult result, int type, int error) {            }            public void onGetDrivingRouteResult(MKDrivingRouteResult res, int error) {            }            public void onGetTransitRouteResult(MKTransitRouteResult res, int error) {                                if (res == null) {
return;} TransitOverlay transitOverlay = new TransitOverlay(YingTransitActivity.this, mMapView); // 此处仅展示一个方案作为示例 transitOverlay.setData(res.getPlan(0)); mMapView.getOverlays().add(transitOverlay); mMapView.invalidate(); //刷新地图 } public void onGetWalkingRouteResult(MKWalkingRouteResult res, int error) { } public void onGetAddrResult(MKAddrInfo res, int error) { } public void onGetBusDetailResult(MKBusLineResult result, int error) { } @Override public void onGetSuggestionResult(MKSuggestionResult result, int error) { } }); /** 公交导航查询 **/ MKPlanNode start = new MKPlanNode(); start.name = "王府井";//关键字方式 //start.pt = new GeoPoint((int) (39.915 * 1E6), (int) (116.404 * 1E6));//经纬度方式 MKPlanNode end = new MKPlanNode(); end.name = "西单"; //关键词方式 //end.pt = new GeoPoint(40057031, 116307852);//经纬度方式 myMKSearch.setTransitPolicy(MKSearch.EBUS_NO_SUBWAY); //公交策略:EBUS_TIME_FIRST:时间优先;EBUS_TRANSFER_FIRST:少换乘;EBUS_WALK_FIRST:少步行;EBUS_NO_SUBWAY: 非地铁 myMKSearch.transitSearch("北京", start, end); // 必须设置城市名。start和end可通过关键字,坐标两种方式指定,但必须使用MKPlanNode接口。 } protected boolean isRouteDisplayed() { return false; } /** 引入方法管理API **/ @Override protected void onDestroy() { if (mBMapMan != null) { mBMapMan.destroy(); mBMapMan = null; } super.onDestroy(); } @Override protected void onPause() { if (mBMapMan != null) { mBMapMan.stop(); } super.onPause(); } @Override protected void onResume() { if (mBMapMan != null) { mBMapMan.start(); } super.onResume(); } }

转载于:https://www.cnblogs.com/milkmap/archive/2012/07/03/2574713.html

你可能感兴趣的文章
计算机网络数据链路层
查看>>
Python库的使用
查看>>
云上自动化:全球云上自动化编排系统比拼
查看>>
解读AI行业发展趋势
查看>>
嵌入式开发培训都要学什么?零基础参加嵌入式学习培训能学会吗
查看>>
flume的初体验
查看>>
hbase的基本操作
查看>>
DevOps工程师到底做些什么?
查看>>
解析RDD在Spark中的地位
查看>>
高质量SEO文章编辑规范技巧之:格式
查看>>
Liunx磁盘存储和文件系统
查看>>
人工智能在4S店、网店,应用经验分享
查看>>
linux下清空mysql密码
查看>>
Oracle 11g r2数据泵新特性(五)
查看>>
oracle技术之Rman备份恢复命令
查看>>
COBBLER无人值守安装
查看>>
解决golang.org/x包无法下载的问题
查看>>
ansible puppet saltstack三款自动化运维工具的对比
查看>>
PHP - windows下编译PHP 7.1的memcache
查看>>
手机互动网页项目总结(转)
查看>>