百度地图定位功能的实现5.3版本
最近,由于项目中用到百度地图的定位功能,所以就研究了下。最初的打算是用studio来实现,奈何百度申请密钥时需要用到一个SHA1值,在Eclipse中非常容易就找到了,但studio中死活找不到,知道怎么找的小伙伴希望在留言中告诉我。
源码地址:https://github.com/JustDoI/BaiDuLocation-master
闲话不多说,看代码:
1、初次启动定位
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 在使用SDK各组件之前初始化context信息,传入ApplicationContext
// 注意该方法要再setContentView方法之前实现
SDKInitializer.initialize(getApplicationContext());
setContentView(R.layout.activity_main);
mMapView = (MapView) findViewById(R.id.bmapView);
mBaiduMap = mMapView.getMap();
MapStatusUpdate msu = MapStatusUpdateFactory.zoomTo(15.0f);
mBaiduMap.setMapStatus(msu);
initLocation();
LatLng ll = new LatLng(mCurrentLantitude, mCurrentLongitude);
MapStatusUpdate u = MapStatusUpdateFactory.newLatLng(ll);
mBaiduMap.animateMapStatus(u);
}
/**
* @Title: initLocation
* @Description: 初始化定位相关代码
* @return: void
*/
private void initLocation() {
// 定位初始化
mLocationClient = new LocationClient(this);
mMyLocationListener = new MyLocationListener();
mLocationClient.registerLocationListener(mMyLocationListener);
// 设置定位的相关配置
LocationClientOption option = new LocationClientOption();
option.setOpenGps(true);// 打开gps
option.setCoorType("bd09ll"); // 设置坐标类型
option.setAddrType("all");
option.setScanSpan(1000);
mLocationClient.setLocOption(option);
}
首先是一些初始化的操作,这些东西在百度官方的API 中都可以找到,其中
MapStatusUpdate msu = MapStatusUpdateFactory.zoomTo(15.0f);
mBaiduMap.setMapStatus(msu);
这段代码是设置地图的比例尺。
2、定位的监听器MyLocationListener:
主要代码:
if (isFristLocation) {
isFristLocation = false;
LatLng ll = new LatLng(location.getLatitude(), location.getLongitude());
MapStatusUpdate u = MapStatusUpdateFactory.newLatLng(ll);
mBaiduMap.animateMapStatus(u);
}
这段代码是将位置信息显示在地图上,会有一个标志点显示在地图上。也可以显示自定义的图标,代码如下:
BitmapDescriptor mCurrentMarker = BitmapDescriptorFactory.fromResource(R.drawable.navi_map_gps_locked);
MyLocationConfiguration config = new MyLocationConfiguration(mCurrentMode, true, mCurrentMarker);
mBaiduMap.setMyLocationConfigeration(config);
定位是比较耗电的,所以我们在onStart()中启动,在onStop()中关闭。
@Override
protected void onStart() {
// 开启图层定位
// 这段代码非常重要
mBaiduMap.setMyLocationEnabled(true);
if (!mLocationClient.isStarted())
mLocationClient.start();
mLocationClient.requestLocation();
super.onStart();
}
@Override
protected void onStop() {
// 关闭图层定位
mBaiduMap.setMyLocationEnabled(false);
mLocationClient.stop();
super.onStop();
}
代码比较简单,相信大家都能看懂。还有千万别忘了加mBaiduMap.setMyLocationEnabled(true)这段代码,刚做的时候就是没加,结果地图都显示不出来了,更别提定位了。