现在市面上有好多定位的SDK,比如百度,高德,但是我用的最多的就是百度地图,大家上百度开发者网站就可以看到百度有很多的sdk,如果大家想研究百度地图的相关SDK可以直接上百度开发者网站上去看,地址百度地图。今天我主要总结一下常用的百度地图API.
1.实时更新用户位置,在去请求位置前设置。
LocationClientOption option = new LocationClientOption();
option.setScanSpan(5000);
mLocationClient.setLocOption(option);
mLocationClient.start();
2.定位模式的选择
有3种可选 Hight_Accuracy:表示高精度模式,会在GPS信号正常的情况下优先使用GPS定位,在无法接收GPS信号的时候使用网络定位;Battery_Saving:表示接电模式,只会使用网络进行定位;Device_Sensors表示传感器模式,只会使用GPS进行定位。其中Hight_Accuracy是默认的模式。
LocationClientOption option = new LocationClientOption();
option.setScanSpan(5000);
option.setLocationMode(LocationClientOption.LocationMode.Device_Sensors);//只能使用GPS定位
mLocationClient.setLocOption(option);
mLocationClient.start();
一般情况下我们获取的位置信息只携带经纬度,那么如何获取详细的地址呢?
LocationClientOption option = new LocationClientOption();
option.setScanSpan(5000);
option.setIsNeedAddress(true)
mLocationClient.setLocOption(option);
mLocationClient.start();
接下来我们就可以获取详细的地址信息。
@Override
public void onReceiveLocation(BDLocation location) {
String country = location.getCountry();
String province = location.getProvince();
String city = location.getCity();
String dis = location.ghetDistrict();
String street = location.getStreet();
}
@Override
public void onReceiveLocation(BDLocation location) {
navigationTo(location)//移动到我的位置
}
private void navigateTo(BDLocation location) {
if (isFirstLocate) {
LatLng ll = new LatLng(location.getLatitude(),location.getLongitude());
MapStatusUpdate update = MapStatusUpdateFactory.newLatLng(ll);
baiduMap.animationMapStatus(update);//将地图移动到指定的经纬度上
update = MapStatusUpdateFactory.zoomTo(16f);//缩放,这个值3—19之间,越大,地图显示的信息越精细
baiduMap.animationMapStatus(update);
isFirstLocate = false;
}
}
现在地图上就可以显示我们周边的环境了,但是平常我们用百度地图导航的时候呢,地图上 都会有一个小光标用于显示当前所在的位置,并且设备移动,光标也会移动
首先我们需要开启此功能
baiduMap.setMyLocationEnable(true);
然后每隔5s去更新地理位置,并把当前位置显示在地图上。
private void navigateTo(BDLocation location) {
if (isFirstLocate) {
LatLng ll = new LatLng(location.getLatitude(),location.getLongitude());
MapStatusUpdate update = MapStatusUpdateFactory.newLatLng(ll);
baiduMap.animationMapStatus(update);//将地图移动到指定的经纬度上
update = MapStatusUpdateFactory.zoomTo(16f);//缩放,这个值3—19之间,越大,地图显示的信息越精细
baiduMap.animationMapStatus(update);
isFirstLocate = false;
}
MyLocationData.Builder locationBuilder = new MyLocationData.Builder();
locationBuilder.latitude(location.getLatitude());
locationBuilder.longitude(location.getLongitude());
MyLocationData locationData = locationBuilder.build();
baiduMap.setMyLocationData(locationData);//把当前设备的位置显示在地图上
}
这个百度地图的功能就总结这么多吧,如果大家有兴趣可以上开发者官网去研究。