android百度地图之公交线路详情搜索

 更新时间:2016年10月26日 14:25:07   作者:若。只如初见  
本篇文章介绍了android百度地图之公交线路详情搜索,实现了百度搜索公交详情具有一定的参考价值,感兴趣的小伙伴们可以参考一下。

本篇文章可以实现百度公交线路搜索,可以选择多条线路,具体实现代码如下:

一、公交线路详情检索

获取公交线路的详情主要分来两步,1.获取公交线路的Uid,2.通过Uid获取公交线路详情。

1.获取公交线路的Uid:

/*
     * 获得公交线路图的Uid,并且根据系Uid发起公交线路详情的检索
     * 
     * @see
     * com.baidu.mapapi.MKSearchListener#onGetPoiResult(com.baidu.mapapi
     * .MKPoiResult, int, int)
     */
    @Override
    public void onGetPoiResult(MKPoiResult arg0, int arg1, int arg2) {
      // TODO Auto-generated method stub
      if (arg0 == null || arg2 != 0) {
        Toast.makeText(MainActivity.this, "未找到结果", 1);
        return;
      }
      // 定义一个公交线路描述类
      MKPoiInfo mkPoiInfo = null;
      // 获得本次就爱你所的公交线路的总站点
      int totalPoiNum = arg0.getNumPois();
      for (int i = 0; i < totalPoiNum; i++) {
        mkPoiInfo = arg0.getPoi(i);
        if (mkPoiInfo.ePoiType == 2) {
          break;
        }
      }
      mkSearch.busLineSearch("开封", mkPoiInfo.uid);
    }

2.获取公交线路详情:

/*
     * 得到公交线路图的详情
     * 
     * @see
     * com.baidu.mapapi.MKSearchListener#onGetBusDetailResult(com.baidu.
     * mapapi.MKBusLineResult, int)
     */
    @Override
    public void onGetBusDetailResult(MKBusLineResult arg0, int arg1) {
      // TODO Auto-generated method stub
      if (arg0 == null || arg1 != 0) {
        Toast.makeText(MainActivity.this, "未找到结果", 1);
        return;
      }
      RouteOverlay routeOverlay = new RouteOverlay(MainActivity.this,
          mapView);
      routeOverlay.setData(arg0.getBusRoute());// 获得公交线路

      mapView.getOverlays().clear();// 清楚公交站点的标识
      mapView.getOverlays().add(routeOverlay);
      mapView.invalidate();
      // 采用动画形式描述公交站点
      mapView.getController().animateTo(arg0.getBusRoute().getStart());
    }

查询时,只需提供城市名和线路

mkSearch.poiSearchInCity("开封", "3");

完整代码:

package com.arlen.android.baidumap08;

import android.os.Bundle;
import android.view.Menu;
import android.widget.Toast;

import com.baidu.mapapi.BMapManager;
import com.baidu.mapapi.MKAddrInfo;
import com.baidu.mapapi.MKBusLineResult;
import com.baidu.mapapi.MKDrivingRouteResult;
import com.baidu.mapapi.MKGeneralListener;
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.MapView;
import com.baidu.mapapi.RouteOverlay;

public class MainActivity extends MapActivity {

  private BMapManager bMapManager;
  private MapView mapView;
  private String key = "43D220AAB0DEC976D2EABC83CFC9EEE52BCCCA7A";
  private MKSearch mkSearch;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    bMapManager = new BMapManager(MainActivity.this);
    bMapManager.init(key, new MKGeneralListener() {

      @Override
      public void onGetPermissionState(int arg0) {
        // TODO Auto-generated method stub

      }

      @Override
      public void onGetNetworkState(int arg0) {
        // TODO Auto-generated method stub

      }
    });
    initMapActivity(bMapManager);
    mapView = (MapView) findViewById(R.id.bmapView);
    mkSearch = new MKSearch();
    mkSearch.init(bMapManager, new MySearchListener());

    mkSearch.poiSearchInCity("开封", "3");
  }

  private class MySearchListener implements MKSearchListener {

    @Override
    public void onGetAddrResult(MKAddrInfo arg0, int arg1) {
      // TODO Auto-generated method stub

    }

    /*
     * 得到公交线路图的详情
     * 
     * @see
     * com.baidu.mapapi.MKSearchListener#onGetBusDetailResult(com.baidu.
     * mapapi.MKBusLineResult, int)
     */
    @Override
    public void onGetBusDetailResult(MKBusLineResult arg0, int arg1) {
      // TODO Auto-generated method stub
      if (arg0 == null || arg1 != 0) {
        Toast.makeText(MainActivity.this, "未找到结果", 1);
        return;
      }
      RouteOverlay routeOverlay = new RouteOverlay(MainActivity.this,
          mapView);
      routeOverlay.setData(arg0.getBusRoute());// 获得公交线路

      mapView.getOverlays().clear();// 清楚公交站点的标识
      mapView.getOverlays().add(routeOverlay);
      mapView.invalidate();
      // 采用动画形式描述公交站点
      mapView.getController().animateTo(arg0.getBusRoute().getStart());
    }

    @Override
    public void onGetDrivingRouteResult(MKDrivingRouteResult arg0, int arg1) {
      // TODO Auto-generated method stub

    }

    @Override
    public void onGetPoiDetailSearchResult(int arg0, int arg1) {
      // TODO Auto-generated method stub

    }

    /*
     * 获得公交线路图的Uid,并且根据系Uid发起公交线路详情的检索
     * 
     * @see
     * com.baidu.mapapi.MKSearchListener#onGetPoiResult(com.baidu.mapapi
     * .MKPoiResult, int, int)
     */
    @Override
    public void onGetPoiResult(MKPoiResult arg0, int arg1, int arg2) {
      // TODO Auto-generated method stub
      if (arg0 == null || arg2 != 0) {
        Toast.makeText(MainActivity.this, "未找到结果", 1);
        return;
      }
      // 定义一个公交线路描述类
      MKPoiInfo mkPoiInfo = null;
      // 获得本次就爱你所的公交线路的总站点
      int totalPoiNum = arg0.getNumPois();
      for (int i = 0; i < totalPoiNum; i++) {
        mkPoiInfo = arg0.getPoi(i);
        if (mkPoiInfo.ePoiType == 2) {
          break;
        }
      }
      mkSearch.busLineSearch("开封", mkPoiInfo.uid);
    }

    @Override
    public void onGetRGCShareUrlResult(String arg0, int arg1) {
      // TODO Auto-generated method stub

    }

    @Override
    public void onGetSuggestionResult(MKSuggestionResult arg0, int arg1) {
      // TODO Auto-generated method stub

    }

    @Override
    public void onGetTransitRouteResult(MKTransitRouteResult arg0, int arg1) {
      // TODO Auto-generated method stub

    }

    @Override
    public void onGetWalkingRouteResult(MKWalkingRouteResult arg0, int arg1) {
      // TODO Auto-generated method stub

    }
  }

  @Override
  protected void onDestroy() {
    // TODO Auto-generated method stub
    super.onDestroy();
    if (bMapManager != null) {
      bMapManager.destroy();
      bMapManager = null;
    }
  }

  @Override
  protected void onResume() {
    // TODO Auto-generated method stub
    super.onResume();
    if (bMapManager != null) {
      bMapManager.start();
    }
  }

  @Override
  protected void onPause() {
    // TODO Auto-generated method stub
    super.onPause();
    if (bMapManager != null) {
      bMapManager.stop();
    }
  }

  @Override
  public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
  }

  @Override
  protected boolean isRouteDisplayed() {
    // TODO Auto-generated method stub
    return false;
  }

}

二、多条线路显示

在同一个地图上显示多条导航线路,也只需要分两步完成,

1.定义起始点个终点

start = new MKPlanNode();
    start.pt = new GeoPoint((int) (39.915 * 1E6), (int) (116.404 * 1E6));
    end = new MKPlanNode();
    end.pt = new GeoPoint(40057031, 116307852);

    mkSearch.transitSearch("北京", start, end);

2.将所有的线路详情循环显示在地图上

@Override
    public void onGetTransitRouteResult(MKTransitRouteResult arg0, int arg1) {
      // TODO Auto-generated method stub
      if (arg0 == null) {
        return;
      }
      int planNum = arg0.getNumPlan();// 获取所有的驾车路线
      for (int i = 0; i < planNum; i++) {
        TransitOverlay overlay = new TransitOverlay(MainActivity.this,
            mapView);
        overlay.setData(arg0.getPlan(i));
        mapView.getOverlays().add(overlay);
      }
      mapView.invalidate();
      mapView.getController().animateTo(arg0.getStart().pt);
    }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Android开发常见问题总结

    Android开发常见问题总结

    这篇文章主要介绍了Android开发常见问题,总结分析了诸如界面设计、多媒体调用、图片、动画操作等开发中常见的问题解决方法与相关注意事项,需要的朋友可以参考下
    2016-08-08
  • 正确在Flutter中添加webview实现详解

    正确在Flutter中添加webview实现详解

    这篇文章主要为大家介绍了正确在Flutter中添加webview实现详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-12-12
  • Android实现动态定值范围效果的控件

    Android实现动态定值范围效果的控件

    这篇文中给大家分享一个Android的控件,这个控件实现是一个可以动态选择定值范围的效果,实现后的效果很不错,对大家日常开发或许有所帮助,感兴趣的朋友们可以一起来看看。
    2016-09-09
  • Android开发控制ScrollView滑动速度的方法

    Android开发控制ScrollView滑动速度的方法

    这篇文章主要介绍了Android开发控制ScrollView滑动速度的方法,结合实例形式分析了Android编程中ScrollView滑动事件相关操作技巧,需要的朋友可以参考下
    2017-02-02
  • Flutter Widget 之StatefulBuilder构建方法详解

    Flutter Widget 之StatefulBuilder构建方法详解

    这篇文章主要为大家介绍了Flutter Widget 之StatefulBuilder构建方法详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-11-11
  • Android利用listview控件操作SQLite数据库实例

    Android利用listview控件操作SQLite数据库实例

    我们利用SQLiteOpenHelper类建立一个数据库,并写好增、删、查等方法,通过SimpleCursorAdapter连接listview实现数据库的增加、查询以及长按删除的功能。
    2017-04-04
  • Android 广播接收器BroadcastReceiver详解

    Android 广播接收器BroadcastReceiver详解

    Android开发的四大组件分别是:活动(activity),用于表现功能;服务(service),后台运行服务,不提供界面呈现;广播接受者(Broadcast Receive),勇于接收广播;内容提供者(Content Provider),支持多个应用中存储和读取数据,相当于数据库,本篇着重介绍广播组件
    2022-07-07
  • Android利用ViewDragHelper轻松实现拼图游戏的示例

    Android利用ViewDragHelper轻松实现拼图游戏的示例

    本篇文章主要介绍了Android利用ViewDragHelper轻松实现拼图游戏的示例,非常具有实用价值,需要的朋友可以参考下
    2017-11-11
  • 详解如何实现一个Kotlin函数类型

    详解如何实现一个Kotlin函数类型

    这篇文章主要为大家详细介绍了如何实现一个Kotlin函数类型,文中的实现方法讲解详细,具有一定的借鉴价值,需要的小伙伴可以跟随小编一起学习一下
    2022-10-10
  • android Chronometer控件使用大全

    android Chronometer控件使用大全

    Chronometer是一个简单的计时器,这篇文章主要介绍了android Chronometer控件简单使用,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-09-09

最新评论