关于百度地图的整理
来源:互联网 发布:淘宝如何卖高仿耐克鞋 编辑:程序博客网 时间:2024/05/20 03:37
最近做的都是关于百度地图的事,整理一下这阶段的东西,便于以后调用。
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); }
- 关于百度地图的整理
- 关于百度地图的问题
- 关于百度地图的心得
- 关于百度地图的总结
- 关于百度地图的开发
- 关于百度地图的离线地图实现
- 百度地图1 整理
- 百度地图相关整理
- 关于百度地图的矫正问题
- 关于百度地图的坐标纠偏
- android中关于百度地图的使用
- android中关于百度地图的使用
- 关于百度地图显示自己的位置
- 关于百度API地图的引用
- 关于百度地图api的阶段总结
- 关于百度地图的一个定位功能
- 关于百度地图偏移的问题
- 关于百度地图 key值的问题
- 开发环境准备
- E
- 测试
- php 报错 Parse error: syntax error, unexpected end of file in (路径)
- 反射
- 关于百度地图的整理
- spring基本原理概念
- AngularJS指令参数详解
- 需求:通过点击按钮,根据按钮的字找到图片
- 2017.8.22考试
- 将console.log的内容在页面上输出方便在移动设备上查看
- Ubuntu 16.04 使用burg修改开机引导主题
- 【leetcode】2.Add Two Numbers
- 事件的冒泡与捕获