您的位置:首页 > 移动开发 > Android开发

Android 百度地图开发(二)

2015-10-22 14:07 495 查看
上一篇把使用百度地图的基本使用方法介绍了,这一篇继续上一篇的.

当我们把百度地图跑起来了发现,哦!地图居然上显示的居然是我们大天朝的帝都,可是我想定位我自己的位置啊!好下来我就说一下如何定位.

/*************定义的所使用的变量 START**********************************/

// 百度地图控件

private MapView mMapView = null;

private BaiduMap mBaiduMap;

private BitmapDescriptor mCurrentMarker;

private LocationMode mCurrentMode;

//定位的监听器

public MyLocationListener mMyLocationListener;

//定位的客户端

private LocationClient mLocationClient;

//是否是第一次定位

private volatile boolean isFristLocation = true;

private BDLocation mBdLocation;

private ImageView mImageView;

/*************定义的所使用的变量 END***********************************/

private void initBaiduMap() {

mMapView = (MapView) findViewById(R.id.bmapview);

/**

* mCurrentMode = LocationMode.FOLLOWING; // 跟随模式

* mCurrentMode = LocationMode.COMPASS; // 罗盘模式

*/

mCurrentMode = LocationMode.NORMAL; // 普通模式LocationMode

mMyLocationListener = new MyLocationListener();

mCurrentMarker = BitmapDescriptorFactory.fromResource(R.mipmap.ic_location); // 自定义图标

mBaiduMap = mMapView.getMap();

mBaiduMap.setMyLocationEnabled(true);//设置是否允许定位图层

mLocationClient = new LocationClient(this);

mLocationClient.registerLocationListener(mMyLocationListener);//注册定位监听

LocationClientOption option = new LocationClientOption();

option.setOpenGps(true);//打开GPS

/**

* setCoorType坐标类型分为三种:

* bd09ll百度加密经纬度坐标

* bd09百度加密墨卡托坐标

* gcj02国测局加密经纬度坐标

*/

option.setCoorType("bd0911");//设置坐标类型

option.setScanSpan(5000);//定位的时间间隔,单位是mm

mLocationClient.setLocOption(option);

mLocationClient.start();

}

上面的有些类的介绍或者使用方法,参数不明白的可以参考 http://developer.baidu.com/map/index.php?title=androidsdk百度的官方文档,比较全面.
public class MyLocationListener implements BDLocationListener {

@Override

public void onReceiveLocation(BDLocation bdLocation) {

mBdLocation = bdLocation;

// MapView 销毁后不在处理新接收的位置

if (bdLocation == null || mMapView == null) {

return;

}

// 构造定位数据

MyLocationData locationData = new MyLocationData.Builder()

.accuracy(bdLocation.getRadius())

// 此处设置开发者获取到的方向信息,顺时针0-360

.direction(0).latitude(bdLocation.getLatitude())

.longitude(bdLocation.getLongitude()).build();

// 设置定位数据

mBaiduMap.setMyLocationData(locationData);

// 设置自定义图标

mBaiduMap.setMyLocationConfigeration(new MyLocationConfiguration(mCurrentMode, true, mCurrentMarker));

// 第一次定位时,将地图位置移动到当前位置

if (isFristLocation) {

isFristLocation = false;

LatLng latLng = new LatLng(bdLocation.getLatitude(),bdLocation.getLongitude());

MapStatusUpdate mapStatusUpdate = MapStatusUpdateFactory.newLatLng(latLng);

mBaiduMap.animateMapStatus(mapStatusUpdate);

}

showOtherLocation ();

showTextOverlay();

}

}

MyLocationData的direction方法可以以后开发根据收据sensor来实时的改变图标的方向的需求.这样打开地图时就可以定位了.这是有的同学会发现我们定位后在把地图划到别的地方时,唉我们似乎少了一个定位按钮.是的百度图的view上似乎是没有自带这个东东的反正我是没有找到.所以我自己写了一个这个按钮,其实很简单.我们在xml文件中添加了一个ImageView,其他的初始化过程就不再多写了.

@Override

public void onClick(View v) {

if (mImageView.getId() == v.getId()) {

requestLocation();

}

}

/**

* 请求定位

*/

private void requestLocation() {

if (mBdLocation != null) {

//地理坐标-->LatLng

//latitude - 纬度

//longitude - 经度

LatLng latLng = new LatLng(mBdLocation.getLatitude(), mBdLocation.getLongitude());

MapStatusUpdate mapStatusUpdate = MapStatusUpdateFactory.newLatLng(latLng);

mBaiduMap.animateMapStatus(mapStatusUpdate);

Toast.makeText(this,"定位成功",Toast.LENGTH_SHORT).show();

} else {

Toast.makeText(this,"定位失败", Toast.LENGTH_SHORT).show();

}

}

大家看到了我写的其实就是使用第一次定位一样的方式方法.在此我总觉得代码上有些冗余.如果有谁有更高明的定位方法给我指点一二!

这次代码粘贴的比较多介绍的少了些,有的方法不知道怎么使用或者参数不明确的大家可以参考: http://developer.baidu.com/map/index.php?title=androidsdk
毕竟鄙人能力时间有限只看了与使用相关的一些方法.OK,大家在使用百度地图时有时想显示一下其他的位置.对于这些开发需要用到图层.下次为大家介绍一下图层的作用和使用.唉我的项目新的功能需求来喽!又要忙一阵了.其实忙感觉挺充实的.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: