关于百度地图的整理

最近做的都是关于百度地图的事,整理一下这阶段的东西,便于以后调用。
1.申请百度地图key与下载sdk
1.1申请key的时候要求SHA1值,由于现在基本使用android studio,获取SHA1值的方式不像Eclipse那样方便,这里踩过一些坑。
没关系,我们参考一下前人的博客:
参考博客1:http://blog.csdn.net/qq_29269233/article/details/53725865
参考博客2:http://blog.csdn.net/csdnhejingzhou/article/details/50643246
参考博客3:http://blog.csdn.net/xinpengfei521/article/details/52966428
有了以上3篇博客,基本都能解决这个问题
其实整理一下思路,就是这个文件本来是没有的,需要先去创建一个这样的文件,然后再去执行
所有先进去.android(在C盘,自己用户目录下)
再输入: keytool -list -v -keystore debug.keystore就可以了
2.开始敲代码了
2.1我是创建了一个MapUtil的工具类,在构造方法中传入了一个Context

public class BaiduMapUtil{
public BaiduMapUtil(Context context){
    this.context=context;}
}

然后就开始写定位

 public MapView mMapView;
 public BaiduMap mBaiduMap;
 private LocationClient mLocationClient;
 private Context context;
  /**
   * 当前地理坐标
   */
public LatLng mLoactionLatLng;

写一个定位的方法

public void initSettingMapViews(final Context context) {
        mBaiduMap=mMapView.getMap();
        //普通地图
        mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);
        Toast.makeText(context,"正在获取位置请稍后...",Toast.LENGTH_SHORT).show();
        // 初始化地图
        mMapView.showZoomControls(true);//缩放组件
        mMapView.removeViewAt(1);//隐藏logo
        WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
        DisplayMetrics dm = new DisplayMetrics();
        wm.getDefaultDisplay().getMetrics(dm);
        int width = dm.widthPixels;
        int height = dm.heightPixels;
        mBaiduMap.setCompassPosition(new android.graphics.Point(width-100,100));//指南针位置
        // 开启定位图层
        mBaiduMap.setMyLocationEnabled(true);
        // 定位初始化
        mLocationClient = new LocationClient(context);
        // 定位到我的位置
        mLocationClient.registerLocationListener(new MyBDLocationListner());
        LocationClientOption option = new LocationClientOption();
        option.setOpenGps(true);// 打开gps
        option.setCoorType(CoordinateType.BD09LL); // 设置坐标类型
        option.setScanSpan(900);
        mLocationClient.setLocOption(option);
        mLocationClient.start(); // 开启定位
        // 初始化当前地理坐标
        mLoactionLatLng = mBaiduMap.getMapStatus().target;
    }

加上上面用到的定位监听器

 // 定位监听器
    public class MyBDLocationListner implements BDLocationListener {

        @Override
        public void onReceiveLocation(BDLocation location) {
            // mapview 销毁后不在处理新接收的位置
            if (location == null || mMapView == null) {
                return;
            }
            MyLocationData data = new MyLocationData.Builder().accuracy(0)//
                    .direction(location.getDirection())//
                    .latitude(location.getLatitude())//
                    .longitude(location.getLongitude())//
                    .build();
            mBaiduMap.setMyLocationData(data);
            // 定位当前的地点
            double mLantitude = location.getLatitude();
            double mLongtitude = location.getLongitude();
            locationProvider = mLongtitude + "," + mLantitude;
            mLoactionLatLng = new LatLng(mLantitude,mLongtitude);
            //定到的位置局中心
            LatLng ll = new LatLng(location.getLatitude(),
                    location.getLongitude());
            MapStatusUpdate u = MapStatusUpdateFactory.newLatLngZoom(ll,15.0f);//500米
            // 判断是否获取成功
            if (isLnglat(locationProvider)) { // 获取成功
                if (isFristLocation){
                    isFristLocation = false;
                    mBaiduMap.animateMapStatus(u);
                }
                if (mCallBack!=null) {
                    mBaiduMap.animateMapStatus(u);
                    mCallBack.getGPS(locationProvider);
                }
                Toast.makeText(context,"定位成功",Toast.LENGTH_SHORT).show();
            } else if (locationProvider.equals("0.0,0.0")
                    || !isLnglat(locationProvider)) { // 获取失败
                failDialog(); // 获取失败弹框获取提示是否重新定位
            }
        }

        @Override
        public void onConnectHotSpotMessage(String s, int i) {

        }
    }

由于是耗时操作,所以我上面用了一个回调

private CallBack mCallBack;
public void setCallBack(CallBack mCallBack) {
        this.mCallBack = mCallBack;
    }
public interface CallBack{
      void getGPS(String gps);
    }

然后我们再Activity里调用的获取到的坐标的时候

 BaiduMapUtil.CallBack mCallBack = new BaiduMapUtil.CallBack() {
        @Override
        public void getGPS(String gps) {
            locationProvider = gps;
        }

当位置获取失败的时候,我们弹出一个dialog,可以选择重新获取,或者不获取

// 地理位置信息获取失败弹出Dialog
    public void failDialog() {
        failDialog = new Dialog(context);
        failDialog.setTitle("系统信息");
        failDialog.setCancelable(false);
        View myv = LayoutInflater.from(context).inflate(
                R.layout.item_failure_main_prompt_dialog, null);
        failDialog.setContentView(myv);
        txt_fail_Yes = (TextView) myv.findViewById(R.id.txt_fail_Yes);
        txt_fail_No = (TextView) myv.findViewById(R.id.txt_fail_No);
        txt_fail_Yes.setOnClickListener(new DialogClick());
        txt_fail_No.setOnClickListener(new DialogClick());
        failDialog.show(); // 暂放
    }
// dialog的点击事件
    class DialogClick implements View.OnClickListener {

        @Override
        public void onClick(View arg0) {
            // TODO Auto-generated method stub
            switch (arg0.getId()) {
                case R.id.txt_fail_Yes:
                    new Handler(Looper.getMainLooper()).post(new Runnable() {
                        @Override
                        public void run() {
                            failDialog.dismiss();
                            initSettingMapViews(context); // 重新取定位
                        }
                    });
                    break;
                case R.id.txt_fail_No:
                    mLocationClient.stop();// 关闭定位器
                    failDialog.dismiss();
                    break;
                default:
                    break;
            }
        }
    }

在用地图时,我们可能把地图的视角移动到其他地方去了,那这个时候,我们怎么回到自己当前的点呢?
当然是重新定位一下:

 public void reLocate(Context context){
        Toast.makeText(context,"重新定位...",Toast.LENGTH_SHORT).show();
        mBaiduMap.setMyLocationEnabled(true);
        // 定位初始化
        mLocationClient = new LocationClient(context);
        // 定位到我的位置
        mLocationClient.registerLocationListener(new MyBDLocationListner());
        LocationClientOption option = new LocationClientOption();
        option.setOpenGps(true);// 打开gps
        option.setCoorType(CoordinateType.BD09LL); // 设置坐标类型
        option.setScanSpan(900);
        mLocationClient.setLocOption(option);
        mLocationClient.start(); // 开启定位
        // 初始化当前地理坐标
        mLoactionLatLng = mBaiduMap.getMapStatus().target;
    }

然后在Activity里,对百度地图金星生命周期的管理

 @Override
    protected void onStop() {
        super.onStop();
        mapUtil.mBaiduMap.setMyLocationEnabled(false);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        //在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理
        mapUtil.mMapView.onDestroy();
        mapUtil.mBaiduMap.setMyLocationEnabled(false);
        mapUtil.poiSearch.destroy();
    }
    @Override
    protected void onResume() {
        super.onResume();
        //在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理
        mapUtil.mMapView.onResume();
    }

    @Override
    public void onPause() {
        super.onPause();
        mapUtil.mMapView.onPause();
    }

    @Override
    protected void onStart() {
        super.onStart();
        // 开启图层定位
        mapUtil.mBaiduMap.setMyLocationEnabled(true);
    }

最后别忘了,判断地理位置是否是经纬度的正则表达式:

// 判断是否是经纬度正则表达式
    public boolean isLnglat(String ss) {//纬度,经度
        String reg = "[0-9]{2}\\.[0-9]+$,^[0-9]{3}\\.[0-9]+\\";
        return ss.matches(reg);
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值