现在的位置: 首页 > 综合 > 正文

新版百度地图定位SDK的接入 以及demo示例的运行

2016年12月10日 ⁄ 综合 ⁄ 共 3053字 ⁄ 字号 评论关闭

百度地图 同时提供了 定位SDK

定位SDK 可以单独使用 也可以跟百度地图结合使用

比如获取用户当前所在城市 显示对应城市天气预报

比如 让用户查看附近的好吃好玩的 这些功能都需要定位

 

定位SDK 已经有了 4.2  在次使用4.2的SDK 接入

 

通过 demo示例 我们了解到 :

  • 百度定位SDK为我们提供了大体3个功能模块的功能 : 定位  地理围栏  记录当前位置

定位: 获取到用户当前位置的信息

地理围栏: 设置一个区域 当用户靠近 或 在区域中的时候 会提示 回调

记录当前位置 :  若记住当前位置  再次经过的时候会提示

 

  • 百度定位SDK定位 有三种模式

高精度定位模式 : 这种定位模式下,会同时使用网络定位和GPS定位,优先返回最高精度的定位结果

  LocationMode.Hight_Accuracy

仅设备模式 : 这种定位模式下,不会使用GPS,只会使用网络定位(Wi-Fi和基站定位)

     LocationMode.Device_Sensors

低功耗模式 :  这种定位模式下,不需要连接网络,只使用GPS进行定位,这种模式下不支持室内环境的定位

     LocationMode.Battery_Saving

 

  • 百度返回的定位信息关于地址需要开启

使用setIsNeedAddress(boolean)

设置是否要返回地址信息,默认为无地址信息。

 

  • 百度返回的定位信息的坐标有三种类型

   返回国测局经纬度坐标系:gcj02

   返回百度墨卡托坐标系:bd09

   返回百度经纬度坐标系:bd09ll

  • 关于设置定时定位的时间间隔说明 (从官网摘抄)

说明:

当所设的整数值大于等于1000(ms)时,定位SDK内部使用定时定位模式。调用requestLocation( )后,每隔设定的时间,定位SDK就会进行一次定位。如果定位SDK根据定位依据发现位置没有发生变化,就不会发起网络请求,返回上一次定位的结果;如果发现位置改变,就进行网络请求进行定位,得到新的定位结果。定时定位时,调用一次requestLocation,会定时监听到定位结果。

当不设此项,或者所设的整数值小于1000(ms)时,采用一次定位模式。每调用一次requestLocation( ),定位SDK会发起一次定位。请求定位与监听结果一一对应。

设定了定时定位后,可以热切换成一次定位,需要重新设置时间间隔小于1000(ms)即可。locationClient对象stop后,将不再进行定位。如果设定了定时定位模式后,多次调用requestLocation(),则是每隔一段时间进行一次定位,同时额外的定位请求也会进行定位,但频率不会超过1秒一次。

 

将定位SDK 引入自己的项目

    1 创建程序 程序包名 与申请key时一致

    2 导入 jar包 和 so包

    3 在manifest中初始化key的信息  以及权限的拷贝   还需要写入一个服务(一个程序对应一个service)

 

<</SPAN>service android:name="com.baidu.location.f" android:enabled="true" android:process=":remote"></</SPAN>service>

    4 定位需要一个LocationClient对象 实例化 该对象需要程序级别的上下文

 


LocationClient mLocationClient = new LocationClient(getApplicationContext()); //声明LocationClient类
5 定位也需要监听 来处理定位回调结果 需要一个 BDLocationListener
class MyLocationListener implements BDLocationListener{ ... }
MyLocationListener myListener = new MyLocationListener();
mLocationClient .registerLocationListener( myListener );
6 设置定位的参数条件 setLocOption方法 需要一个 LocationClientOption参数

 

// 初始化LocationClientOption类 该类 来设置一些定位的参数
  LocationClientOption option = new LocationClientOption();
  // 定位模式 分为高精度定位模式 低功耗定位模式 仅设备定位模式
  // LocationMode.Hight_Accuracy; LocationMode.Battery_Saving;
  // LocationMode.Device_Sensors;
  option.setLocationMode(LocationMode.Hight_Accuracy);// 此处为高精度模式
  // 返回国测局经纬度坐标系:gcj02 返回百度墨卡托坐标系 :bd09 返回百度经纬度坐标系 :bd09ll
  option.setCoorType("bd09ll");// 此处设置的返回坐标类型为百度经纬度,默认值gcj02
  int span = 1000;

 

  try {
   span = Integer.valueOf(30 * 1000);
  } catch (Exception e) {
   // TODO: handle exception
  }
  option.setScanSpan(span);// 设置的扫描间隔,单位是毫秒  (下面有备注)
  option.setIsNeedAddress(true);// 设置是否需要地址信息,默认为无地址
  // 可以理解为 将封装好的定位参数 设置给 定位对象
  mLocationClient.setLocOption(option);

 设置好定位参数 就可以启动定位了  start方法 (可以使用stop停止)

 

mLocationClient.start();

 

 
8 BDLocationListener的子类监听中 的方法 onReceiveLocation 该类是定位请求回调函数 BDLocaiton是定位的结果类 
@Override
public void onReceiveLocation(BDLocation location) {
    System.out.println("info=="+location.getLatitude()+location.getLongitude()+location.getAddrStr());
    // 将监听中的定位结果变成全局的定位数据
    mylocation = location;
    // 定位结果获取到了地址就停止定位
    Log.i("MyMap",location.getAddrStr());
    if (!location.getAddrStr().equals("")) {
    mLocationClient.stop();
    Log.i("MyMap",location.getAddrStr());
   }
}
接下来 就可以使用全局的 BDLocation 数据源 获取到的坐标 进行地图的定位显示
或者 以该坐标为中心点 进行poi检索
 
很多东西都是自己理解 也许讲述的不太对 希望读者多看文档 多看api类库
着也是我的学习方法

抱歉!评论已关闭.