百度地图开放API初体验(三)

    前面已经实现了利用百度地图进行定位的功能,定位只是一个基本的依托,现在我们可以利用它来做更多的东西,例如位置提醒服务。在定位API的模块中,BDMap 还提供了一个地理围栏服务的板块,但是正如它里面介绍所说,目前只是一个Beta版本,博主登录过百度LBS的开放平台论坛,看到上面所提及到的Bug仍然存在很多,所以这里不作这方面的介绍。在API当中,里面有一个位置提醒使用的介绍,本篇主要介绍这个功能。值得注意的是,这里为了显现定位提醒功能实现成功,在提醒服务里面增加了一个手机震动的功能。

    

一、实现位置提醒功能:


public class MainActivity<NotifyLister> extends Activity {


   ...


   public NotifyLister mNotifyer = null;//增加一个位置提醒的变量


   ...


   protected void onCreate(Bundle savedInstanceState) {


      ...


      initNotify();//使用一个定位提醒的函数,可以清晰分辨,下面会进行定义


      ...

  

    }


   //位置提醒相关代码

   private void initNotify() {

      mNotifyer = new NotifyLister();//定义位置提醒变量


      mNotifyer.SetNotifyLocation(latitude,longtitude,distance,"bd09ll");

      //4个参数代表要位置提醒的点的坐标,具体含义依次为:纬度,经度,距离范围,坐标系类型           (gcj02,gps,bd09,bd09ll)


      mLocationClient.registerNotify(mNotifyer);

      //注册位置提醒监听事件后,可以通过SetNotifyLocation俩修改位置提醒设置,修改后立刻生效


}

 

   //BDNotifyListener:位置提醒接口类,用于设定位置提醒

   public class NotifyLister extends BDNotifyListener{

      /**

      * onNotify(...): 位置提醒监听事件具体实现

      * mlocation表示当前位置,

      * distance是当前坐标中心点与设定位置提醒的坐标点之间的距离值。

      */

      public void onNotify(BDLocation mlocation, float distance){

  

         //监听范围内所做的提醒功能


}

}


   ...


}


    这样,基本的位置提醒服务已经完成,接下来要实现的是,在监听范围内所要做的动作(这里实现的是手机震动功能)。


二、实现提醒范围内的手机震动功能:


  1. 首先,要在AndroidManifest.xml文件中添加允许手机震动的权限:


    <uses-permission android:name="android.permission.VIBRATE" />


  2. 接下来就可以直接在主java文件中编辑添加震动代码:





public class MainActivity<NotifyLister> extends Activity {


   ...


   private Vibrator mVibrator;//添加控制手机震动的变量

   private long[] mTips = {1000,2000,1000,2000};//添加一个long型的数组,用来记录震动频率


   ...


  protected void onCreate(Bundle savedInstanceState) {


      ...


      

      mVibrator = (Vibrator) this.getSystemService(VIBRATOR_SERVICE);

      //给震动变量定义成一个手机可以提供的震动服务


      ...


     }


   public class NotifyLister extends BDNotifyListener{


      public void onNotify(BDLocation mlocation, float distance){

  

         mVibrator.vibrate(mTips, -1);

         //在提醒范围内增加手机震动功能,第一个参数定义震动频率,第二个参数定义震动的次数


}

}


    以上已经基本实现了BDMap所提供的位置提醒服务功能,但是有一点值得注意的是,在 


       mNotifyer.SetNotifyLocation(latitude,longtitude,distance,"bd09ll");


代码里面的参数,distance距离是以m作单位,但是前面两个是以百度坐标的经纬度作参数,在计算的时候不能简单的作加减,要在经纬度和距离作转换才可以直观地计算。幸好,在BDMap所提供的API中,也有一个可以实现经纬度和距离作转换的实现方式:


      LatLng p1 = new LatLng(x1, y1);//p1存放第一个点的经纬度,这里的x1,y1是经纬度,下同

      LatLng p2 = new LatLng(x2, y2);//p2存放第二个点的经纬度

      double distance = DistanceUtil.getDistance(p1, p2);//求两点间的距离,单位是m


    这里在应用DistanceUtil.getDistance()的时候要注意,自己是否已经下载了定位的计算工具SDK。


百度地图开放API初体验(三)

上一篇:Windows Azure 超值体验1元一个月,还可获得CSDN 500C币


下一篇:Windows编译Ogre1.10