百度地图的使用和学习2

      上周由于项目赶工,时间比较紧张,周末也没有休息,在杆项目进度,所以没来得及更新,今天调休就把上周的补上。

      之前是介绍了一下百度地图在android中的基础的使用,主要就是在手机中显示地图,然后可以调节地图的缩放,主要的就是关于百度地图的一个开发者的申请,百度地图API key的申请以及将百度地图sdk加载到项目中,并且通过配置参数后再我们的项目中成功的显示地图。那关于地图的功能,现在应用的也是非常的多的,比如现在比较火热的订餐app,大多都会用到定位用户位置的功能,这一个功能的实现以后能够把用户附近附近的加盟商户搜索出来并显示给用户,用户可以根据自己的喜好进行选择。那接下来我们就来对地图定位这一功能进行一个了解和学习。

      首先是关于百度地图sdk的选择,之前我们下载的sdk是不包含定位功能的,所以大家在选择sdk下载的时候一定要把定位功能给勾上。如下图:

        

      下载完后就可以运用到我们的项目当中啦,配置和前面讲的一样,然后就是对于定位代码的实现了,我们需要实现的一个是定位sdk的定位方式,另一个就是定位接口的实现。

     

//实例化定位服务,LocationClient类必须在主线程中声明    
        mLocClient= new LocationClient(getApplicationContext());
        //注册定位监听接口
        mLocClient.registerLocationListener(new BDLocationListenerImpl());
        
        /**
         * locationClientOption该类用来设置定位SDK的定位方式。
         */
        LocationClientOption option =new LocationClientOption();
        option.setOpenGps(true);//打开GPS
        option.setAddrType("all");//返回的定位结果包含地址信息
        option.setCoorType("bd0991");//返回的结果是百度的经纬度,默认值gcj02
        option.setPriority(LocationClientOption.GpsFirst);//设置GPS优先
        option.setScanSpan(5000);//设置发起定位请求的间隔时间为5000ms
        option.disableCache(false);//禁止启动缓存定位
        mLocClient.setLocOption(option);//设置定位参数
        mLocClient.start();//调用此方法开始定位
        
        //定位图层初始化
        myLocationOverlay=new LocationOverlay(mMapView);
        
        //实例化定位数据,并设置在我的图层
        mLocData  =new LocationData();
        myLocationOverlay.setData(mLocData);
        
        //添加定位图层
        mMapView.getOverlays().add(myLocationOverlay);
        
        //修改定位数据后刷新图层生效
        mMapView.refresh();

      这一段代码主要就是对于定位服务的申明以及定位方式的设置,这些设置好了以后就可以去实现我们注册的定位监听的接口了,这个接口主要就是获取手机所在的地理位置的经度和纬度,然后进行定位,最后显示在我们的地图上面。

      接口实现的代码如下:

      

     */
    public class BDLocationListenerImpl implements BDLocationListener{

        @Override
        public void onReceiveLocation(BDLocation location) {
             if (location == null) {  
                    return;  
                }  
               
                  
                mLocData.latitude = location.getLatitude();  
                mLocData.longitude = location.getLongitude();  
                //如果不显示定位精度圈,将accuracy赋值为0即可  
                mLocData.accuracy = location.getRadius();  
                mLocData.direction = location.getDerect();  
                  
                //将定位数据设置到定位图层里  
                myLocationOverlay.setData(mLocData);  
                //更新图层数据执行刷新后生效  
                mMapView.refresh();  
                  
                  
                if(isFirstLoc || isRequest){  
                    //将给定的位置点以动画形式移动至地图中心  
                    mMapController.animateTo(new GeoPoint(  
                            (int) (location.getLatitude() * 1e6), (int) (location  
                                    .getLongitude() * 1e6)));  
                  
                 
                }  
                i
            
        }

           在接口当中,我们奖获取的位置的经度和纬度加到我们需要的参数当中,这样子我们就能够实现定位的我一个功能了,最后附上定位的图片:

         

    图中蓝点就是定位所在的位置,我们可以发现成功的定位到了我们所在的位置,好了,这次的定位功能就写到这里了。

posted on 2016-03-15 11:07  夜不孤城  阅读(380)  评论(0)    收藏  举报