百度地图学习总结(3)—定位
来源:互联网 发布:linux下怎么编程 编辑:程序博客网 时间:2024/06/08 16:48
上一篇讲了基本的地图接入
1.承上启下
上节说了helloMap,那么这节就来讨论下定位吧。
先上效果图:
然后不想听我叨叨的朋友可以直接去看代码:
http://download.csdn.net/download/user11223344abc/10039742
2.好了,来大概讲讲代码的逻辑吧
- 初始化定死位置到成都
setMapCorePoint(30.663791, 104.07281);//成都
- 这里我写了一个方法,地图中心点设置
/** * 地图中心点设置 */ private LatLng setMapCorePoint(double vd, double jd) {// //设定中心点坐标 latlng(经度,纬度) LatLng cenpt = new LatLng(vd, jd); //定义地图状态 MapStatus mMapStatus = new MapStatus.Builder() .target(cenpt) .zoom(14) .build(); //定义MapStatusUpdate对象,以便描述地图状态将要发生的变化 final MapStatusUpdate mMapStatusUpdate = MapStatusUpdateFactory.newMapStatus(mMapStatus); //改变地图状态位置// mBaiduMap.setMapStatus(mMapStatusUpdate); mBaiduMap.animateMapStatus(mMapStatusUpdate); return cenpt; }
- 设置了中心点之后呢,我再ui上画了一个按钮,一点,便对我目前位置进行定位,具体逻辑如下:
/*** * 初始化定位sdk, */ mLocationService = new LocationService(getApplicationContext()); //获取mLocationService实例,建议应用中只初始化1个location实例,然后使用,可以参考其他示例的activity,都是通过此种方式获取mLocationService实例的 mLocationService.registerListener(mListener = new BDLocationListener() { @Override public void onReceiveLocation(BDLocation bdLocation) { Log.e("shitmap", "定位成功"); if (mMapMoveFlag) { final double longitude = bdLocation.getLongitude();//精度 final double latitude = bdLocation.getLatitude();//纬度 Log.e("shitmap", " longitude 精度 == " + longitude + " latitude 纬度 == " + latitude); LatLng pointer = setMapCorePoint(latitude, longitude); addPointerMarker(pointer); mMapMoveFlag = false; } } });
- 从上面代码可以看到,mLocationService,这个Service是sdk内的,需要在清单文件中声明:
<application> <!--定位服务--> <service android:name="com.baidu.location.f" android:enabled="true" android:process=":remote" > <intent-filter> <action android:name="com.baidu.location.service_v2.2" > </action> </intent-filter> </service> </application>
- 从上面代码可以看到,这个定位说白了,就是在回调内进行操作,BDLocationListener
BDLocation拿到经纬度,这个经纬度就是定位到我的位置的经纬度,然后再去调用我上面写的设置地图中心点的方法,这样,定位就成了。
- 定位完事儿之后,发现地图上并没有变出一个icon来表示我们目前的位置,于是就出现了这么一个方法。添加一个marker来对我们定位到的位置进行一个标识,传入的经纬度,就是marker的经纬度,这里我们传入的是我当前定位到经纬度,所以理所当然的在我定位的位置上会覆盖一个marker。
private void addPointerMarker(LatLng pointer){// 定位完成最后,盖上一个icon,标识出定位的点 //定义Maker坐标点 //构建Marker图标 BitmapDescriptor bitmap = BitmapDescriptorFactory .fromResource(R.mipmap.ic_launcher); //构建MarkerOption,用于在地图上添加Marker OverlayOptions option = new MarkerOptions() .position(pointer) .icon(bitmap); //在地图上添加Marker,并显示 mBaiduMap.addOverlay(option); }
- 一点补充:关于标识,mMapMoveFlag
因为定位回调会一直自嗨,所以在界面没有onStop时的时候,需要一个标识位来防止定位内的业务逻辑多次的重复执行。
/*** * Stop location service */ @Override protected void onStop() { // TODO Auto-generated method stub mLocationService.unregisterListener(mListener); //注销掉监听 mLocationService.stop(); //停止定位服务 super.onStop(); }
接下来我们会讨论如何添加覆盖物
阅读全文
0 0
- 百度地图学习总结(3)—定位
- 百度地图学习(一):定位
- android 百度地图定位总结
- IOS百度地图定位总结
- 百度地图的定位+地图显示总结
- 百度地图定位源码学习
- javascriptAPI百度地图定位学习
- 百度地图学习总结
- 百度地图开发(一)——地图定位
- 百度地图开发(3)定位
- 百度地图——定位
- 百度地图定位导航错误总结
- 百度地图sdk无法定位错误总结
- 百度地图实现定位的过程总结
- Android 不归路之百度地图API学习(定位篇)
- 百度地图API学习笔记(一) 实现实时定位
- 百度地图学习总结(4)—添加覆盖物
- 百度地图 (定位、回到定位点)
- linux 路由表设置 之 route 指令详解
- Condensed RSA
- 【Linux】使用sed、awk来完成批量修改配置文件的shell设计
- HDU
- Java发展史
- 百度地图学习总结(3)—定位
- HBuilder连接夜神模拟器测试
- 10.26
- 详解YUV420数据格式
- Centos7安装mysql5.7,解决没有默认的配置文件
- sublime text3 lua环境配置
- HDU
- ReentrantLock实现原理
- http和https对比