百度地图:加强篇(定位)

1、实现目的:
MyLocationOverlay

一个负责显示用户当前位置的Overlay。
自2.0.0版本开始,MyLocationOverlay只负责显示我的位置,位置数据请使用百度定位SDK获取,将获取的位置数据放在一个LocationData结构中并用该结构设置MyLcationOverlay的数据源,即可创建MyLocationOverlay。
LocationData数据获取
创建监听器:当获取到位置信息时,将信息添加到LocationData中,监听器需要实现BDLocationListener接口,
两个方法需要实现:
1.接收异步返回的定位结果,参数是BDLocation类型参数。
2.接收异步返回的POI查询结果,参数是BDLocation类型参数。
监听的设置:
创建LocationClient对象,注册监听registerLocationListener
设置定位参数(LocationClientOption):定位模式(单次定位,定时定位),返回坐标类型,是否打开GPS等等。
通过LocationClient的start、stop控制定位信息获取,在做中间可以手动发起定位的请求requestLocation

前期准备:
离线文件下载,指定机型和城市下载对应的离线地图
2.0以上版本处理步骤
1、将下载好的离线地图包解压缩。
2、找到解压出的”BaiduMap”文件夹,把它放入手机存储卡根目录。在上述过程中如遇提示“是否需要覆盖文件”,点击确定即可。
断开与电脑连接,打开百度手机地图(如已打开请重启),系统会提示导入成功。
提示:下载多个城市包时,经解压后,这些城市数据都会被同时解压到BaiduMap文件夹中,不同城市不会出现被覆盖的情况。
1.X版本处理步骤
1、将离线地图加压,把Mapdata文件夹拷入SD卡根目录下的BaiduMapSdk下
2、利用MKOfflineMap在初始化(init)后调用scan()扫描本地地图资源。
实现过程:
百度开发者中心的相关文档http://lbsyun.baidu.com/index.php?title=android-locsdk/guide/getloc
实现效果:
这里写图片描述
MyLocationOverlayDemo .java

package huaxa.it.map;

import android.os.Bundle;
import android.os.Handler;
import android.util.Log;

import com.baidu.location.BDLocation;
import com.baidu.location.BDLocationListener;
import com.baidu.location.LocationClient;
import com.baidu.location.LocationClientOption;
import com.baidu.mapapi.map.LocationData;
import com.baidu.mapapi.map.MyLocationOverlay;
import com.baidu.platform.comapi.basestruct.GeoPoint;

/**
 * @项目名: BaiduMap
 * @包名: huaxa.it.map
 * @类名: MyLocationOverlayDemo
 * @创建者: 黄夏莲
 * @创建时间: 2016年12月3日 ,下午2:32:14
 * 
 * @描述: TODO
 */
public class MyLocationOverlayDemo extends BaseActivity
{

    public LocationClient       mLocationClient;
    public BDLocationListener   myListener;

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);

        location();
    }

    private void location()
    {
        // ①发起定位请求
        mLocationClient = new LocationClient(getApplicationContext()); // 声明LocationClient类
        // ②参数设置
        LocationClientOption option = new LocationClientOption();
        option.setCoorType("bd09ll");// 可选,默认gcj02,设置返回的定位结果坐标系
        int span = 1000;
        option.setScanSpan(span);// 可选,默认0,即仅定位一次,设置发起定位请求的间隔需要大于等于1000ms才是有效的
        option.setOpenGps(true);// 可选,默认false,设置是否使用gps
        option.setLocationNotify(true);// 可选,默认false,设置是否当GPS有效时按照1S/1次频率输出GPS结果
        mLocationClient.setLocOption(option);
        // MyLocationClient myLocationClient = new MyLocationClient();
        // myLocationClient.start();
        myListener = new MyListener();
        mLocationClient.registerLocationListener(myListener); // 注册监听函数
        // ③设置响应,结果处理

    }

    // class MyLocationClient extends Handler implements Runnable
    // {
    //
    // @Override
    // public void run()
    // {
    // // ②参数设置
    // LocationClientOption option = new LocationClientOption();
    // option.setCoorType("bd09ll");// 可选,默认gcj02,设置返回的定位结果坐标系
    // int span = 1000;
    // option.setScanSpan(span);// 可选,默认0,即仅定位一次,设置发起定位请求的间隔需要大于等于1000ms才是有效的
    // option.setOpenGps(true);// 可选,默认false,设置是否使用gps
    // option.setLocationNotify(true);// 可选,默认false,设置是否当GPS有效时按照1S/1次频率输出GPS结果
    // mLocationClient.setLocOption(option);
    //
    // post(this);
    //
    // }
    //
    // public void start()
    // {
    // post(this);
    //
    // }
    //
    // }

    class MyListener implements BDLocationListener
    {

        @Override
        public void onReceiveLocation(BDLocation location)
        {
            if (location == null)
                return;
            MyLocationOverlay overlay = new MyLocationOverlay(mapView);
            LocationData locData = new LocationData();
            locData.latitude = location.getLatitude();
            locData.longitude = location.getLongitude();
            overlay.setData(locData);
            mapView.getOverlays().clear();
            mapView.getOverlays().add(overlay);
            mapView.refresh();
            // 地图移动
            controller.animateTo(new GeoPoint(
                    (int) (locData.latitude*1E6),(int)(locData.longitude*1E6))); 
        }

        @Override
        public void onReceivePoi(BDLocation location)
        {

        }

    }

    /**
     * GPS很耗费资源,为了减少资源
     */
    @Override
    protected void onResume()
    {
        // TODO Auto-generated method stub
        super.onResume();
        mLocationClient.start();
    }

    @Override
    protected void onPause()
    {
        // TODO Auto-generated method stub
        super.onPause();
        mLocationClient.stop();
    }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值