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();
        }
        
    }
  • 相关阅读:
    ubuntu ip
    [转]caffe+Ubuntu14.0.4 64bit 环境配置说明(无CUDA,caffe在CPU下运行) --for --Amd
    kali install fcitx
    [转译][马基 杰斯特(MarkeyJester) 摩托罗拉68000 入门教程] 叁
    [转译][马基 杰斯特(MarkeyJester) 摩托罗拉68000 入门教程] 叁
    [转译][马基 杰斯特(MarkeyJester) 摩托罗拉68000 入门教程] 叁
    [转译][马基 杰斯特(MarkeyJester) 摩托罗拉68000 入门教程] 叁
    [转译][马基 杰斯特(MarkeyJester) 摩托罗拉68000 入门教程] 贰
    [转译][马基 杰斯特(MarkeyJester) 摩托罗拉68000 入门教程] 贰
    [转译][马基 杰斯特(MarkeyJester) 摩托罗拉68000 入门教程] 贰
  • 原文地址:https://www.cnblogs.com/milkmap/p/2574713.html
Copyright © 2011-2022 走看看