当前位置:   article > 正文

Android 百度地图 SDK v3_3_0 (六) ---驾车、步行、公交路线搜索_android开发百度导航sdk公交导航

android开发百度导航sdk公交导航

     目前百度地图SDK所集成的检索服务包括:POI检索、公交信息查询、线路规划、地理编码、在线建议查询、短串分享。

    上篇博客讲解了POI检索和在线建议查询,这篇博客将讲解经常用到的线路规划

                在讲解代码之前先上张效果图:

                                                                       

            好了!现在我们上代码,来实现上面的功能(代码中都做了相应的注解)

            路线规划检索有三种检索:驾车,步行,公交车!三种实现的步骤基本类似,下面我们就拿一种来做解析(公交车)。

          1.首先我们要实例化路线规划检索的实例

  1. // 初始化搜索模块,注册事件监听
  2. mSearch = RoutePlanSearch.newInstance();
  3. mSearch.setOnGetRoutePlanResultListener(this);


          2. 创建公交线路规划检索监听者

  1. @Override
  2. public void onGetTransitRouteResult(TransitRouteResult result) {
  3. if (result == null || result.error != SearchResult.ERRORNO.NO_ERROR) {
  4. Toast.makeText(MainActivity.this, "抱歉,未找到结果", Toast.LENGTH_SHORT)
  5. .show();
  6. }
  7. if (result.error == SearchResult.ERRORNO.AMBIGUOUS_ROURE_ADDR) {
  8. // 起终点或途经点地址有岐义,通过以下接口获取建议查询信息
  9. // result.getSuggestAddrInfo()
  10. return;
  11. }
  12. if (result.error == SearchResult.ERRORNO.NO_ERROR) {
  13. nodeIndex = -1;
  14. pre_next_id.setVisibility(View.VISIBLE);
  15. route = result.getRouteLines().get(0);
  16. TransitRouteOverlay overlay = new MyTransitRouteOverlay(mBaiduMap);
  17. mBaiduMap.setOnMarkerClickListener(overlay);
  18. routeOverlay = overlay;
  19. overlay.setData(result.getRouteLines().get(0));
  20. overlay.addToMap();
  21. overlay.zoomToSpan();
  22. }
  23. }

        3.检索起、终点信息

  1. /**
  2. * 发起路线规划搜索示例
  3. *
  4. * @param v
  5. */
  6. public void Search_RoutePlan_Process(View v) {
  7. // 重置浏览节点的路线数据
  8. route = null;
  9. pre_next_id.setVisibility(View.INVISIBLE);
  10. mBaiduMap.clear();
  11. // 处理搜索按钮响应
  12. EditText editSt = (EditText) findViewById(R.id.start);
  13. EditText editEn = (EditText) findViewById(R.id.end);
  14. // 设置起终点信息,对于tranist search 来说,城市名无意义
  15. PlanNode stNode = PlanNode.withCityNameAndPlaceName("北京", editSt
  16. .getText().toString());
  17. PlanNode enNode = PlanNode.withCityNameAndPlaceName("北京", editEn
  18. .getText().toString());
  19. // 实际使用中请对起点终点城市进行正确的设定
  20. if (v.getId() == R.id.drive) {
  21. mSearch.drivingSearch((new DrivingRoutePlanOption()).from(stNode)
  22. .to(enNode));
  23. } else if (v.getId() == R.id.transit) {
  24. mSearch.transitSearch((new TransitRoutePlanOption()).from(stNode)
  25. .city("北京").to(enNode));
  26. } else if (v.getId() == R.id.walk) {
  27. mSearch.walkingSearch((new WalkingRoutePlanOption()).from(stNode)
  28. .to(enNode));
  29. }
  30. }


           4.节点浏览的实现(就是上一站和下一站)

  1. /**
  2. * 节点浏览示例
  3. *
  4. * @param v
  5. */
  6. public void nodeClick(View v) {
  7. if (route == null || route.getAllStep() == null) {
  8. return;
  9. }
  10. if (nodeIndex == -1 && v.getId() == R.id.pre) {
  11. return;
  12. }
  13. // 设置节点索引
  14. if (v.getId() == R.id.next) {
  15. if (nodeIndex < route.getAllStep().size() - 1) {
  16. nodeIndex++;
  17. } else {
  18. return;
  19. }
  20. } else if (v.getId() == R.id.pre) {
  21. if (nodeIndex > 0) {
  22. nodeIndex--;
  23. } else {
  24. return;
  25. }
  26. }
  27. // 获取节结果信息
  28. LatLng nodeLocation = null;
  29. String nodeTitle = null;
  30. Object step = route.getAllStep().get(nodeIndex);
  31. if (step instanceof DrivingRouteLine.DrivingStep) {
  32. nodeLocation = ((DrivingRouteLine.DrivingStep) step).getEntrace()
  33. .getLocation();
  34. nodeTitle = ((DrivingRouteLine.DrivingStep) step).getInstructions();
  35. } else if (step instanceof WalkingRouteLine.WalkingStep) {
  36. nodeLocation = ((WalkingRouteLine.WalkingStep) step).getEntrace()
  37. .getLocation();
  38. nodeTitle = ((WalkingRouteLine.WalkingStep) step).getInstructions();
  39. } else if (step instanceof TransitRouteLine.TransitStep) {
  40. nodeLocation = ((TransitRouteLine.TransitStep) step).getEntrace()
  41. .getLocation();
  42. nodeTitle = ((TransitRouteLine.TransitStep) step).getInstructions();
  43. }
  44. if (nodeLocation == null || nodeTitle == null) {
  45. return;
  46. }
  47. // 移动节点至中心
  48. mBaiduMap.setMapStatus(MapStatusUpdateFactory.newLatLng(nodeLocation));
  49. // show popup
  50. popupText = new TextView(MainActivity.this);
  51. popupText.setBackgroundResource(R.drawable.popup);
  52. popupText.setTextColor(0xFF000000);
  53. popupText.setText(nodeTitle);
  54. mBaiduMap.showInfoWindow(new InfoWindow(popupText, nodeLocation, 0));
  55. }

            5.获取开始和结束坐标

  1. private class MyTransitRouteOverlay extends TransitRouteOverlay {
  2. public MyTransitRouteOverlay(BaiduMap baiduMap) {
  3. super(baiduMap);
  4. }
  5. @Override
  6. public BitmapDescriptor getStartMarker() {//获取开始坐标
  7. if (useDefaultIcon) {
  8. return BitmapDescriptorFactory.fromResource(R.drawable.icon_st);
  9. }
  10. return null;
  11. }
  12. @Override
  13. public BitmapDescriptor getTerminalMarker() {//获取结束坐标
  14. if (useDefaultIcon) {
  15. return BitmapDescriptorFactory.fromResource(R.drawable.icon_en);
  16. }
  17. return null;
  18. }
  19. }


            6.释放检索实例;

        mSearch.destroy();

         好了!关于公交车路线检索讲解完啦!驾车和步行的和公交车路线的差不多,想了解的可以下载源码查看!

        本篇博客大家觉得有什么新的想法和建议可以在评论区评论,谢谢!

            源码下载地址

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/297637
推荐阅读
相关标签
  

闽ICP备14008679号