android百度地圖使用(二)

這篇博客我會詳細介紹百度地圖定位的使用,很多人在使用百度地圖定位的時候會出現各種各樣的問題,例如無法定位,定位總是和實際距離偏差很大等。那麼如何避免這些問題的出現,或者說如何優化呢?帶着問題看我這篇博客,多多少少會對你有些啓示的。
使用百度定位需要一個定位包,在上一篇博客中已經做過介紹如何導入,要是不瞭解可以看這篇博客android百度地圖使用一這裏不再贅述。在使用百度定位的時候,首先我們要對百度定位有一個基本瞭解,請看下圖:

這裏寫圖片描述

在這裏我們得到這麼幾點信息:百度地圖gps定位精度最高,影響因素主要是手機硬件,其次是wifi定位,最後是基站定位。關於gps定位還要說一點的是,這個還取決與手機搜到的衛星數,低於3顆無法完成定位,這也是有的人在使用百度定位的時候無法定位的原因之一。百度地圖每次定位耗費流量0.3k/次這裏要注意了,定位的時候不光是耗費流量,而且還很耗費電量,因爲百度是在後臺開啓的服務,這就導致了app性能很差。
在開始使用百度定位的時候要了解一下幾個類:

**1. LocationClient 定位服務客戶端,負責開啓和結束服務等,只能在主線程中調用。子線程調用無效
2. LocationClientOption,百度定位客戶端參數設置
3. BDLocationListener,定位回到監聽
4. BDLocation,定位回調的信息,包括經緯度等**
根據上面各個類的作用,我們就可以總結出百度定位的使用步驟了。

第一步:配置客戶端

 public  void initLocation(){
        //初始化客戶端
        mLocClient = new LocationClient(this.getApplication());
        //註冊監聽回調
        mLocClient.registerLocationListener(this);
        //配置客戶端參數
        LocationClientOption option = new LocationClientOption();
        //可選,默認高精度,設置定位模式,高精度,低功耗,僅設備
        option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy);
        option.setOpenGps(true);//打開gps
        option.setAddrType("all");
        option.setCoorType("bd09ll");//設置座標類型
        option.setScanSpan(1000);
        option.setIsNeedAddress(true);//可選,設置是否需要地址信息,默認不需要
        option.setLocationNotify(true);//可選,默認false,設置是否當gps有效時按照1S1次頻率輸出GPS結果
        option.setIgnoreKillProcess(false);//可選,默認false,定位SDK內部是一個SERVICE,並放到了獨立進程,設置是否在stop的時候殺死這個進程,默認殺死
        option.SetIgnoreCacheException(false);//可選,默認false,設置是否收集CRASH信息,默認收集
        //易引發異常
        mLocClient.setLocOption(option);
        mLocClient.start();
    }

百度支持三種類行的座標bd09ll(百度座標)、84座標(大地座標)、gcj02(火星座標)在座標時不要使用84或者火星座標,這也是定位不準確的原因之一。

 @Override
    public void onReceiveLocation(BDLocation bdLocation) {
        MyLocationData data = new MyLocationData.Builder()
                .accuracy(bdLocation.getRadius())
                //此處設置開發者獲取到的方向信息,順時針0-360                .direction(bdLocation.getDirection()).latitude( bdLocation.getLatitude())           .longitude(bdLocation.getLongitude()).build();
        mBaiduMap.setMyLocationData(data);
  }

MyLocationData這個類可以設置我們定位圖層的信息,但是有的人會說,我明明設置了定位圖層信息,但是地圖上並沒有顯示,這是因爲你忘記了最重要的一步,開啓定位圖層。 mBaiduMap.setMyLocationEnabled(true);
在定位回調的時候,有時候會因爲定位失敗而定到非洲去啦,這個怎麼辦呢?好在百度定位提供了一個判斷定位是否在國內的方法。所以只需要在定位回調加上如下代碼即可避免這個問題。

 if (location == null  && location.getLocationWhere() != BDLocation.LOCATION_WHERE_IN_CN) {
            return;
        }

因爲定位是非常耗電的,所以在若app不需要時時獲取位置信息,可以在定一次定位成功的時候調用LocationClient的stop方法來停止定位。在頁面銷燬的時候,我們還要關閉定位圖層。所以在activity的ondestory()方法裏要加上如下代碼:


    @Override
    protected void onDestroy() {
        super.onDestroy();
//        unregisterReceiver(receiver);
        mLocClient.stop();
        mLocClient = null;
        mBaiduMap.setMyLocationEnabled(false);
        map.onDestroy();

    }

以上就是百度地圖定位的使用了,最後說一點,之前有一個朋友想使用百度定位圖層的那個圖標,但是不想開啓定位,這個怎麼辦呢?很簡單MyLocationData這個類也可以單獨拿出來使用,只需要將經緯度設置好就行了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章