百度定位SDK的使用示例

时间:2022-09-04 10:23:30

本文基于最新的百度地图定位SDK(V4.0 版本)使用的定位Demo

使用百度地图SDK进行实时定位的主要有6步:

// 启用定位
mBaiduMap.setMyLocationEnabled(true);
// 1. 初始化LocationClient类
mLocationClient = new LocationClient(getApplicationContext());
// 2. 声明LocationListener类(负责监听位置变化)
locationListener = new MyLocationListener();
// 3. 注册监听函数
mLocationClient.registerLocationListener(locationListener);
// 4. 设置参数
LocationClientOption clientOption = new LocationClientOption();
clientOption.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy);// 设置定位模式
clientOption.setCoorType("bd09ll"); // 设置定位结果类型
clientOption.setScanSpan(5000); // 设置发起定位请求的时间间隔,ms
clientOption.setIsNeedAddress(true); // 设置返回的定位结果包含地址信息
clientOption.setNeedDeviceDirect(true);// 设置返回结果包含手机的方向

// 5. 应用上面的参数
mLocationClient.setLocOption(clientOption);
// 6. 注册位置提醒监听事件

// 7. 开启/关闭 定位SDK
mLocationClient.start();
mLocationClient.stop();

为了实时监听我们位置的变化,我们需要实现BDLocationListener类,获得系统实时的位置信息,并重载onReceiveLocation方法返回位置结果
class MyLocationListener implements BDLocationListener {
// 异步返回的定位结果
@Override
public void onReceiveLocation(BDLocation bdLocation) {
if (bdLocation == null) {
return;
}
locType = bdLocation.getLocType();
Toast.makeText(MainActivity.this, "当前定位的返回值是:" + locType, Toast.LENGTH_SHORT).show();
longitude = bdLocation.getLongitude();
latitude = bdLocation.getLatitude();
if (bdLocation.hasRadius()) {// 判断是否有定位精度半径
radius = bdLocation.getRadius();
}
if (locType == BDLocation.TypeGpsLocation) {//
Toast.makeText(MainActivity.this, "当前速度是:" + bdLocation.getSpeed() + "定位使用卫星数量:"
+ bdLocation.getSatelliteNumber(), Toast.LENGTH_SHORT).show();
} else if (locType == BDLocation.TypeNetWorkLocation) {
addrStr = bdLocation.getAddrStr();// 获取反地理编码(文字描述的地址)
Toast.makeText(MainActivity.this, addrStr, Toast.LENGTH_SHORT).show();
}
direction = bdLocation.getDirection();// 获取手机方向,【0~360°】,手机上面正面朝北为0°
province = bdLocation.getProvince(); // 省份
city = bdLocation.getCity(); // 城市
district = bdLocation.getDistrict(); // 区县
Toast.makeText(MainActivity.this, province + "~" + city + "~" + district, Toast.LENGTH_SHORT).show();
// 构造定位数据
MyLocationData locData = new MyLocationData.Builder()
.accuracy(radius) // 定位精度半径
.direction(direction) // 方向
.latitude(latitude) // 纬度
.longitude(longitude) // 精度
.build();
// 设置定位数据
mBaiduMap.setMyLocationData(locData);
LatLng ll = new LatLng(latitude, longitude);
MapStatusUpdate msu = MapStatusUpdateFactory.newLatLng(ll);
mBaiduMap.animateMapStatus(msu);
}
}