android百度地图开发之自动定位所在位置与固定位置进行驾车,步行,公交路线搜索
来源:互联网 发布:手机pcb软件 编辑:程序博客网 时间:2024/05/01 01:41
最近跟着百度地图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);(运行不出,待学习)
就可以进行路线搜索了。布局文件很简单,就一个TextView一个MapView.
代码如下
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";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);bMapManager=new BMapManager(getApplicationContext());bMapManager.init(API_KEY,new MKGeneralListener() {@Overridepublic void onGetPermissionState(int arg0) {// TODO Auto-generated method stubif(arg0==MKEvent.ERROR_PERMISSION_DENIED){Toast.makeText(getApplicationContext(), "请输入正确的key",1000).show();}}@Overridepublic void onGetNetworkState(int arg0) {// TODO Auto-generated method stubif (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() {@Overridepublic void onReceivePoi(BDLocation arg0) {// TODO Auto-generated method stubif (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());}@Overridepublic void onReceiveLocation(BDLocation arg0) {// TODO Auto-generated method stubif (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;@Overridepublic void onGetWalkingRouteResult(MKWalkingRouteResult arg0, int arg1) {// TODO Auto-generated method stubif (arg0==null) {return;}RouteOverlay routeOverlay=new RouteOverlay(MainActivity.this, mapview);routeOverlay.setData(arg0.getPlan(0).getRoute(0));mapview.getOverlays().add(routeOverlay);mapview.refresh();}@Overridepublic void onGetTransitRouteResult(MKTransitRouteResult arg0, int arg1) {// TODO Auto-generated method stubif (arg0==null) {return;}RouteOverlay routeOverlay=new RouteOverlay(MainActivity.this, mapview);routeOverlay.setData(arg0.getPlan(0).getRoute(0));mapview.getOverlays().add(routeOverlay);mapview.refresh(); }@Overridepublic void onGetSuggestionResult(MKSuggestionResult arg0, int arg1) {// TODO Auto-generated method stub}@Overridepublic 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); }@Overridepublic void onGetPoiDetailSearchResult(int arg0, int arg1) {// TODO Auto-generated method stub}@Overridepublic void onGetDrivingRouteResult(MKDrivingRouteResult arg0, int arg1) {// TODO Auto-generated method stubif (arg0==null) {return;}RouteOverlay routeOverlay=new RouteOverlay(MainActivity.this, mapview);routeOverlay.setData(arg0.getPlan(0).getRoute(0));mapview.getOverlays().add(routeOverlay);mapview.refresh();}@Overridepublic void onGetBusDetailResult(MKBusLineResult arg0, int arg1) {// TODO Auto-generated method stubif (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()); }@Overridepublic 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);}});}}
- android百度地图开发之自动定位所在位置与固定位置进行驾车,步行,公交路线搜索
- android百度地图开发之自动定位所在位置与固定位置进行驾车,步行,公交路线搜索
- Android 百度地图 SDK v3_3_0 (六) ---驾车、步行、公交路线搜索
- Android学习笔记之百度地图(驾车路线搜索及RouteOverlay步行路线搜索及RouteOverlay)
- Android学习笔记之百度地图(驾车路线搜索及RouteOverlay步行路线搜索及RouteOverlay)
- Android学习笔记之百度地图(驾车路线搜索及RouteOverlay步行路线搜索及RouteOverlay)
- Android学习笔记之百度地图(驾车路线搜索及RouteOverlay步行路线搜索及RouteOverlay)
- 百度地图之搜索公交路线
- Android百度地图——路径规划(驾车、步行和公交线路搜索)
- Android百度地图 - 路径规划(驾车、步行和公交线路搜索)
- 百度地图api实现路线规划之步行驾车
- android 百度地图定位开发之时时定位-位置获取
- android百度地图开发V4.5最新版(5)---路线规划问题步行,骑车,公交,驾车等。
- 百度地图之驾车路线的搜索
- 百度地图之八查询某一路公交路线详细搜索
- Android 百度地图开发之地图定位
- [android] 百度地图开发 (二).定位城市位置和城市POI搜索
- Android Studio 百度地图定位、轨迹及所在位置与标注marker的距离
- DHCP服务
- JBoss 系列二十八:JBoss Data Grid(Infinispan)CarMart 示例
- 关于Asynctask的取消、停止问题。
- DAY7
- gnuplot 设置坐标轴名称的位置
- android百度地图开发之自动定位所在位置与固定位置进行驾车,步行,公交路线搜索
- 金融法重点复习(整理)
- WinCC + Excel + VBS = 定时自动打印报表
- 矩阵快速幂
- Android apk 打包以及签名
- 中国近代史纲要重点
- 域名解析命令
- threadid=1: thread exiting with uncaught except...
- 求数组的子数组之和的最大值问题的实现