天天看點

基礎Android之百度定位

  現在市面上有好多定位的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);//把目前裝置的位置顯示在地圖上
    }
           

這個百度地圖的功能就總結這麼多吧,如果大家有興趣可以上開發者官網去研究。