最近跟着百度地图API学地图开发,先是学了路径搜索,对于已知坐标的两点进行驾车、公交、步行三种路径的搜索(公交路径运行没效果,待学习中),后来又 学了定位功能,能够获取到自己所在位置的经纬度,但当将两者合起来先自动获取自己所在位置的经纬度然后与固定地点进行路径搜索时却弄不出来了,因为刚开始 写的两者在两个类中总是取不到经纬度值,后来将两者写到同一个类中去了,终于取到经纬度值了,也运行出来了。需要 在 BDLocationListener的onReceiveLocation里获取到经纬度值,因为已经能直接拿经纬度值了,所以就可以在里面进行路 径搜索了。萝莉啰嗦说了一些估计只有我自己能看懂。。。。

总结一下自己实现的过程(只说主要的):

1.初始化变量

2.在setContentView的前面初始化BMapManager.

3.得到MapController,确定一个点将mapview的中心设在那,(此步不可少),若缺少mapview会显示到默认的地址(貌似是北京那块地)影响后面起始位置路径的搜索。

4.生成LoctionClient,使用LocationClientOption对其进行简单的设置。调用locationClient.start();
locationClient.requestLocation();进行定位获取位置,使用回调给LocatiopnClient注册监听器,在回调方 法onReceiveLocation获得经纬度,使用MKPlanNode设置起始位置点(已经获取到的经纬度)与终点,就可以初始化 MKSearch,复写其参数监听器中的回调方法onGetWalkingRouteResult、onGetTransitRouteResult、 onGetDrivingRouteResult,最后mkSearch.walkingSearch(null, satrt, null, end);
//mkSearch.drivingSearch(null, satrt, null, end); 
//mkSearch.transitSearch("上海", satrt, end);(运行不出,待学习)
就可以进行路线搜索了。

代码如下

package com.example.lockposi;

import com.baidu.location.BDLocation;
import com.baidu.location.BDLocationListener;
import com.baidu.location.LocationClient;
import com.baidu.location.LocationClientOption;
import com.baidu.mapapi.BMapManager;
import com.baidu.mapapi.MKGeneralListener;
import com.baidu.mapapi.map.MKEvent;
import com.baidu.mapapi.map.MapController;
import com.baidu.mapapi.map.MapView;
import com.baidu.mapapi.map.RouteOverlay;
import com.baidu.mapapi.search.MKAddrInfo;
import com.baidu.mapapi.search.MKBusLineResult;
import com.baidu.mapapi.search.MKDrivingRouteResult;
import com.baidu.mapapi.search.MKPlanNode;
import com.baidu.mapapi.search.MKPoiInfo;
import com.baidu.mapapi.search.MKPoiResult;
import com.baidu.mapapi.search.MKSearch;
import com.baidu.mapapi.search.MKSearchListener;
import com.baidu.mapapi.search.MKSuggestionResult;
import com.baidu.mapapi.search.MKTransitRouteResult;
import com.baidu.mapapi.search.MKWalkingRouteResult;
import com.baidu.platform.comapi.basestruct.GeoPoint;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity {

TextView textView;
LocationClient locationClient;
double latitude,longitude;
private MapView mapview;
BMapManager bMapManager;
static final String API_KEY="07418AEC69BAAB7104C6230A6120C580DFFAEEBB";

@Override
protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  bMapManager=new BMapManager(getApplicationContext());
  bMapManager.init(API_KEY,new MKGeneralListener() {

@Override
   public void onGetPermissionState(int arg0) {
    // TODO Auto-generated method stub
    if(arg0==MKEvent.ERROR_PERMISSION_DENIED){
     Toast.makeText(getApplicationContext(), "请输入正确的key",1000).show();

}
   }

@Override
   public void onGetNetworkState(int arg0) {
    // TODO Auto-generated method stub
    if (arg0==MKEvent.ERROR_NETWORK_CONNECT) {
     Toast.makeText(getApplicationContext(), "您的网络出错了",1000).show();
    }
   }
  });
  setContentView(R.layout.activity_main);
     mapview = (MapView) this.findViewById(R.id.bmapView); 
         mapview.setBuiltInZoomControls(true);

MapController mMapController = mapview.getController();

GeoPoint geoPoint = new GeoPoint((int) (31.243319 * 1E6), 
                 (int) (121.509075 * 1E6)); 
         mMapController.setCenter(geoPoint); 
         mMapController.setZoom(12);

textView=(TextView) findViewById(R.id.textView1);
  locationClient=new LocationClient(getApplicationContext());
  LocationClientOption locationClientOption=new LocationClientOption();
  locationClientOption.setOpenGps(true);
  locationClientOption.setCoorType("bd09ll");
  locationClientOption.setPriority(LocationClientOption.NetWorkFirst);
  locationClientOption.setScanSpan(5000);
  locationClient.setLocOption(locationClientOption);
  locationClient.start();
  locationClient.requestLocation();
  Toast.makeText(getApplicationContext(), String.valueOf(latitude),1000).show();

locationClient.registerLocationListener(new BDLocationListener() {

@Override
   public void onReceivePoi(BDLocation arg0) {
    // TODO Auto-generated method stub
    if (arg0==null) {
     return;
    }
    latitude=arg0.getLatitude();
    longitude=arg0.getLongitude();
    StringBuilder sBuilder=new StringBuilder();
       sBuilder.append("latitude:"+String.valueOf(arg0.getLatitude())).append("longitude:"+String.valueOf(arg0.getLongitude()));
       textView.setText(sBuilder.toString());
   }

@Override
   public void onReceiveLocation(BDLocation arg0) {
    // TODO Auto-generated method stub
    if (arg0==null) {
     return;
    }
    latitude=arg0.getLatitude();
    longitude=arg0.getLongitude();
    StringBuilder sBuilder=new StringBuilder();
       sBuilder.append("latitude:"+arg0.getLatitude()).append("longitude:"+arg0.getLongitude());
       textView.setText(sBuilder.toString());
       MKPlanNode satrt=new MKPlanNode();
    satrt.pt=new GeoPoint((int) (31.205889 * 1E6), 
                  (int) (121.637942 * 1E6));
    MKPlanNode end=new MKPlanNode();
    end.pt=new GeoPoint((int) (31.243319 * 1E6), (int) (121.509075 * 1E6));
    final MKSearch mkSearch=new MKSearch();
    mkSearch.init(bMapManager, new MKSearchListener() {

private int intidx;

@Override
     public void onGetWalkingRouteResult(MKWalkingRouteResult arg0, int arg1) {
      // TODO Auto-generated method stub
      if (arg0==null) {
       return;
      }
      RouteOverlay routeOverlay=new RouteOverlay(MainActivity.this, mapview);
      routeOverlay.setData(arg0.getPlan(0).getRoute(0));
      mapview.getOverlays().add(routeOverlay);
      mapview.refresh();
     }

@Override
     public void onGetTransitRouteResult(MKTransitRouteResult arg0, int arg1) {
      // TODO Auto-generated method stub
      if (arg0==null) {
       return;
      }
      RouteOverlay routeOverlay=new RouteOverlay(MainActivity.this, mapview);
      routeOverlay.setData(arg0.getPlan(0).getRoute(0));
      mapview.getOverlays().add(routeOverlay);
      mapview.refresh();

}

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

}

@Override
     public void onGetPoiResult(MKPoiResult arg0, int arg1, int arg2) {
      // TODO Auto-generated method stub
        if (arg2 != 0 || arg0 == null) { 
                   Toast.makeText(MainActivity.this, "抱歉,未找到结果", Toast.LENGTH_LONG).show(); 
                   return; 
           } 
           // 找到公交路线poi node  
           MKPoiInfo curPoi = null; 
           int totalPoiNum  = arg0.getNumPois(); 
           for(intidx = 0; intidx<totalPoiNum; intidx++ ) { 
                   curPoi = arg0.getPoi(intidx);  
                   if ( 2 == curPoi.ePoiType ) { 
                           break;  
                   } 
           } 
           mkSearch.busLineSearch("上海", curPoi.uid); 
     }

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

}

@Override
     public void onGetDrivingRouteResult(MKDrivingRouteResult arg0, int arg1) {
      // TODO Auto-generated method stub
      if (arg0==null) {
       return;
      }
      RouteOverlay routeOverlay=new RouteOverlay(MainActivity.this, mapview);
      routeOverlay.setData(arg0.getPlan(0).getRoute(0));
      mapview.getOverlays().add(routeOverlay);
      mapview.refresh();
     }

@Override
     public void onGetBusDetailResult(MKBusLineResult arg0, int arg1) {
      // TODO Auto-generated method stub
      if (arg1 != 0 || arg0 == null) { 
                   Toast.makeText(MainActivity.this, "抱歉,未找到结果", Toast.LENGTH_LONG).show(); 
                   return; 
           } 
           RouteOverlay routeOverlay = new RouteOverlay(MainActivity.this, mapview);    // 此处仅展示一个方案作为示例 
           routeOverlay.setData(arg0.getBusRoute()); 
           mapview.getOverlays().clear(); 
           mapview.getOverlays().add(routeOverlay); 
           mapview.refresh(); 
           mapview.getController().animateTo(arg0.getBusRoute().getStart()); 
     }

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

}
    });

mkSearch.walkingSearch(null, satrt, null, end);
    //mkSearch.drivingSearch(null, satrt, null, end);
    //mkSearch.transitSearch("上海", satrt, end);

}

});

}

}

转载于:https://www.cnblogs.com/xiaochao1234/p/3732611.html

android百度地图开发之自动定位所在位置与固定位置进行驾车,步行,公交路线搜索...相关推荐

  1. [android] 百度地图开发 (三).定位当前位置及getLastKnownLocation获取location总为空问题

           前一篇百度地图开发讲述"(二).定位城市位置和城市POI搜索",主要通过监听对象MKSearchListener类实现城市兴趣点POI(Point of Intere ...

  2. Android百度地图开发(二)定位之自动定位及标注(及定位几日内瓦或坐标4.9E-324问题)

    接上篇Android百度地图开发(一)之Hello BaiduMap 1.环境配置: 新增权限如下 <!-- 这个权限用于进行网络定位--> <uses-permission and ...

  3. Android 百度地图开发(二)

    前面我们一起了解了百度地图的申请与集成Android 百度地图开发(一),今天我们接着来学习百度地图. 今天主要来了解如下问题: 1.百度地图的生命周期控制 上一篇张我们已经在布局文件里增加了mapV ...

  4. Android studio百度地图SDK开发 2020最新超详细的Android 百度地图开发讲解(3) 路线规划步行骑行驾车路线规划

    2020最新超详细的Android 百度地图开发讲解(3) 路线规划步行骑行驾车路线规划 开发前配置,显示基本地图,实时定位等查看之前代码,此博客紧接上一博客:https://blog.csdn.ne ...

  5. android百度地图开发

    android百度地图开发 使用android开发百度地图需要事先在百度地图开发者平台上注册账号并下载百度地图相关的工具包,之后配置到自己的程序中,具体可参考https://lbsyun.baidu. ...

  6. 超详细的Android百度地图开发:在APP上定位并显示出来

    超详细的Android百度地图开发:在APP上定位并显示出来 一 写在前面 二 注册百度开发者账户.申请API KEY 三.代码实现 四.问题 五.总结 一 写在前面 由于项目所需,我需要在手机APP ...

  7. Android百度地图开发入门教程

    Android百度地图开发入门教程 1.平台注册登录 2.创建应用 3.Android studio配置 4.代码编写 5.最终效果(建议真机) 1.平台注册登录 登录百度地图开放平台网站注册并登录 ...

  8. android 百度地图开发 别人用不了,Android百度地图开发的那些不足之处

    Android百度地图开发的那些不足之处,最近做的项目中百度地图是很重要的一个模块,其中实现了定位.自定义Marker图标.线路规划.SuggestionSearch检索.地图截图以及导航等功能.因为 ...

  9. 百度地图导航的接入(包含三种选择方式驾车、公交、步行)

    百度地图导航的接入(包含三种选择方式驾车.公交.步行) 步骤 1.下载百度的sdk(下载地址:http://lbsyun.baidu.com/sdk/download) 勾选下载"检索功能& ...

最新文章

  1. 基于AWS-ELK部署系统日志告警系统
  2. 【 Vivado 】Working with Sources in Non-Project Mode
  3. Graphviz之DT:手把手教你使用可视化工具Graphviz将dot文件转为结构图的pdf文件
  4. Spring5 源码下载注意事项
  5. 【感想文】找到自己的兴趣所在,坚持下去。写文章,学习,我的坚持。
  6. 网络html代码是什么问题,html代码问题
  7. 4K修复版《海上钢琴师》登陆全国院线,一文读懂背后的黑科技!
  8. mysql存储过程游标移动_mysql动态游标与mysql存储过程游标(示例)
  9. 甘特图看起来很生硬?教你使用智能颜色装饰你的甘特图!(一)
  10. 一个简单的Hook demo
  11. CRC校验算法详解及代码实现
  12. 如何查计算机版本,如何查看电脑ie浏览器版本呢
  13. 【OpenGL】笔记二十一、Alpha测试、混合测试
  14. 聊一聊:苹果发布新款M2 MacBook Air,macOS 13上线
  15. [UE4]设置虚幻引擎的Visual Studio
  16. 罗德里格斯公式证明(Games101)
  17. Python递归小案例,斐波那契,阶乘等小案例
  18. c语言函数参数的含义,C语言函数的含义
  19. 珍藏的Android电子书
  20. 营在微博:企业微博营销实战宝典

热门文章

  1. 纳税服务系统十一【抽取BaseService、条件查询】
  2. Java泛型解析(02):通配符限定
  3. [PAL编程规范]SAP HANA PAL多项式回归预测分析Polynomial Regression编程规范FORECASTWITHPOLYNOMIALR(预测)...
  4. [转]设计模式(22)-Strategy Pattern
  5. Java 使用 URLConnection 模拟 Http Get和Post 提交
  6. 雨林木风“115网络U盘”免费永久空间速度还挺快的
  7. 艰难万苦配置postfix+ldap+extmail+.......
  8. 正则表达式调用“或”变量
  9. Hibernate基础学习2
  10. 从头开始 启动开源电商项目jShop