最近跟着百度地图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);

}

});

}

}

android百度地图开发之自动定位所在位置与固定位置进行驾车,步行,公交路线搜索的更多相关文章

  1. android 百度地图开发实例(转载)

    因为在我的寝室google基站定位返回的数据总是为空,所以换成百度地图,发现百度地图开发起来非常方便,提供了许多有用的工具,地图的加载速度也比google地图快许多. 为了加强记忆,写一点androi ...

  2. Android 百度地图开发(一)--- 申请API Key和在项目中显示百度地图

      标签: Android百度地图API Key  分类: Android 百度地图开发(2)    最近自己想研究下地图,本来想研究google Map,但是申请API key比较坑爹,于是从百度地 ...

  3. [android] 百度地图开发 (两).所在地的城市定位和城市POI搜索

    一个. 百度地图城市位置和POI搜索知识       上一篇文章"百度地图开发(一)"中讲述了怎样申请百度APIKey及解决显示空白网格的问题.该篇文章主要讲述怎样定位城市位置.定 ...

  4. [android] 百度地图开发 (一).申请AK显示地图及解决显示空白网格问题

        近期做android百度地图,可是使用baidumapapi_v2_3_1.jar和libBaiduMapSDK_v2_3_1.so显示百度地图时总是遇到问题--仅仅显示网格而没有显示地图,网 ...

  5. Android 百度地图开发之一(Hello BaiDu Map)

    之前也接触过百度地图的开发,但那是在网上找的案例或代码,而且是比较老的版本.打算重新学习一下百度地图的开发. 本次使用的百度地图的版本是 Android SDK v3.0.0 本篇文章主要讲述百度地图 ...

  6. 调用百度地图开发平台的JavascriptAPI实现将市县位置转换成坐标

    最近的项目要做的地图比较多,有的还比较复杂,而地图用到的坐标,上网找json文件更是良莠不齐的.真是让人伤脑筋,后来突然想到了百度地图开发平台,没想到真的有对应的API哦,谢天谢地!!!下面说一下完整 ...

  7. Android百度地图开发(一)之初体验

    转载请注明出处:http://blog.csdn.net/crazy1235/article/details/42614603 做关于位置或者定位的app的时候免不了使用地图功能,本人最近由于项目的需 ...

  8. Android百度地图开发01之初体验

    做关于位置或者定位的app的时候免不了使用地图功能,本人最近由于项目的需求需要使用百度地图的一些功能,所以这几天研究了一下,现写一下blog记录一下,欢迎大家评论指正! 一.申请AK(API Key) ...

  9. Android百度地图开发03之地图控制 + 定位

    前两篇关于百度地图的blog写的是,一些基本图层的展示 和 覆盖物的添加+地理编码和反地理编码. 接下来,这篇blog主要说一些关于地图控制方面的内容和定位功能. 百度地图提供的关于地图的操作主要有: ...

随机推荐

  1. linux设置主机名

    第一种方式: hostname 在hostname 命名后面直接加想要更改的主机名,修改成功,键入hostname可以查看修改后的主机名,此种方式会立即生效,但是重启后还原.不会永久修改 第二种方式: ...

  2. nagios监控远程主机服务可能出现的问题

    1.使用插件NRPE监控命令不存在 在添加服务的时候,命令配置文件中需要传递一个参数,那么在监控服务配置文件中,需要添加一个!表示后面的为参数. 出现未定义的命令,查看被监控主机上的配置文件,添加监控 ...

  3. 人们对Python在企业级开发中的10大误解

    From : 人们对Python在企业级开发中的10大误解 在PayPal的编程文化中存在着大量的语言多元化.除了长期流行的C++和Java,越来越多的团队选择JavaScript和Scala,Bra ...

  4. linux命令 screen的简单使用

    在远程命令行下某些长时间的操作,一旦网络出现故障,后果可能会很严重,在这种情况下可以使用screen命令来解决.screen可以创建一个session,在不小心断开以后还可以继续恢复session保存 ...

  5. 使用Powershell 添加,选择更改订阅

    PS C:\WINDOWS\system32> Import-AzurePublishSettingsFile 'C:\Users\Ling\Desktop\Free-11-24-2014-cr ...

  6. Hadoop2学习记录(1) |HA完全分布式集群搭建

    准备 系统:CentOS 6或者RedHat 6(这里用的是64位操作) 软件:JDK 1.7.hadoop-2.3.0.native64位包(可以再csdn上下载,这里不提供了) 部署规划 192. ...

  7. mongdb创建自增主键(primary key)的相关讨论 - Jason.Zhi

    根据mongodb官方文档介绍,如果在插入(insert)操作时,没有指定主键id,那么它会自动给插入行自动附上一个主键id.看起来不错,但是详细看看,就会发现这个id值有点复杂. 如下图: mong ...

  8. gradle 及 git 环境下利用hook及gradle脚本自动添加versioncode和versionname的方法

    在 app/build.gradle 文件里添加几行代码: def gitCommitShortHash = 'git log -1 --pretty=%h'.execute([], project. ...

  9. PartialView

    一.客户端直接请求分部视图(如使用AJAX) Return PartialView()  不加载布局页面,不执行_ViewStart.cshtml AJAX  /Home/LoginPart 二.视图 ...

  10. PCB板简易流程

    PCB布线规则设置 在进行布线之前一般要进行布线规则的设置,(因为元器件的封装已经画出了元件实际的轮廓大小,所以放置元件封装时,即使两个元件封装挨着也一般不会影响元件的实际安装,不过一般还是稍留一点距 ...