zoukankan      html  css  js  c++  java
  • 【“零起点”百度地图手机SDK】如何查询从西单到王府井的公交导航?

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

    ----------------------------------------------------------------------
    系列阅读:
    1、【百度地图-安卓SDK】从头开始写android程序
    http://www.cnblogs.com/milkmap/archive/2011/11/25/2263475.html 
    2、【“零起点”--百度地图手机SDK】如何创建一张地图
    http://www.cnblogs.com/milkmap/archive/2012/05/11/2496526.html 
    3、【“零起点”--百度地图手机SDK】如何使用离线地图?
    http://www.cnblogs.com/milkmap/archive/2012/05/21/2511928.html 
    4、【“零起点”--百度地图手机SDK】如何添加地图图层+按钮事件+水平垂直布局?
    http://www.cnblogs.com/milkmap/archive/2012/05/25/2518454.html 
    5、【“零起点”--百度地图手机SDK】如何进行三种POI搜索?
    http://www.cnblogs.com/milkmap/archive/2012/06/05/2536764.html 

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

    http://www.cnblogs.com/milkmap/archive/2012/06/27/2554843.html
    -----------------------------------------------------------------------

    先按照第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();
        }
        
    }
  • 相关阅读:
    Sqlserver 实际开发中表变量的用法
    Python Day 20 面向对象 (面向对象的组合用法,面向对象的三大特性
    Python Day 19 面向对象(初识面向对象)
    Python Day 18 常用模块(模块和包)
    Python Day 17 常用模块(常用模块一 时间模块,random模块,os模块,sys模块,序列化模块)
    Python Day 15 函数(递归函数、二分查找算法)
    Python Day 14 函数(内置函数,匿名函数(lambda表达式))
    Python Day 13 函数(迭代器,生成器,列表推导式,生成器表达式)
    Python Day 11 + Python Day 12 函数(函数名的应用,闭包,装饰器)
    Python Day 10 函数(名称空间,作用域,作用域链,加载顺序等; 函数的嵌套 global,nonlocal)
  • 原文地址:https://www.cnblogs.com/milkmap/p/2574713.html
Copyright © 2011-2022 走看看