新版百度地圖定位SDK的接入 以及demo示例的運行

百度地圖 同時提供了 定位SDK

定位SDK 可以單獨使用 也可以跟百度地圖結合使用

比如獲取用戶當前所在城市 顯示對應城市天氣預報

比如 讓用戶查看附近的好喫好玩的 這些功能都需要定位

 

定位SDK 已經有了 4.2  在次使用4.2的SDK 接入

 

通過 demo示例 我們瞭解到 :

  • 百度定位SDK爲我們提供了大體3個功能模塊的功能 : 定位  地理圍欄  記錄當前位置

定位: 獲取到用戶當前位置的信息

地理圍欄: 設置一個區域 當用戶靠近 或 在區域中的時候 會提示 回調

記錄當前位置 :  若記住當前位置  再次經過的時候會提示

 

  • 百度定位SDK定位 有三種模式

高精度定位模式 : 這種定位模式下,會同時使用網絡定位和GPS定位,優先返回最高精度的定位結果

  LocationMode.Hight_Accuracy

僅設備模式 : 這種定位模式下,不會使用GPS,只會使用網絡定位(Wi-Fi和基站定位)

     LocationMode.Device_Sensors

低功耗模式 :  這種定位模式下,不需要連接網絡,只使用GPS進行定位,這種模式下不支持室內環境的定位

     LocationMode.Battery_Saving

 

  • 百度返回的定位信息關於地址需要開啓

使用setIsNeedAddress(boolean)

設置是否要返回地址信息,默認爲無地址信息。

 

  • 百度返回的定位信息的座標有三種類型

   返回國測局經緯度座標系:gcj02

   返回百度墨卡託座標系:bd09

   返回百度經緯度座標系:bd09ll

  • 關於設置定時定位的時間間隔說明 (從官網摘抄)

說明:

當所設的整數值大於等於1000(ms)時,定位SDK內部使用定時定位模式。調用requestLocation( )後,每隔設定的時間,定位SDK就會進行一次定位。如果定位SDK根據定位依據發現位置沒有發生變化,就不會發起網絡請求,返回上一次定位的結果;如果發現位置改變,就進行網絡請求進行定位,得到新的定位結果。定時定位時,調用一次requestLocation,會定時監聽到定位結果。

當不設此項,或者所設的整數值小於1000(ms)時,採用一次定位模式。每調用一次requestLocation( ),定位SDK會發起一次定位。請求定位與監聽結果一一對應。

設定了定時定位後,可以熱切換成一次定位,需要重新設置時間間隔小於1000(ms)即可。locationClient對象stop後,將不再進行定位。如果設定了定時定位模式後,多次調用requestLocation(),則是每隔一段時間進行一次定位,同時額外的定位請求也會進行定位,但頻率不會超過1秒一次。

 

將定位SDK 引入自己的項目

    1 創建程序 程序包名 與申請key時一致

    2 導入 jar包 和 so包

    3 在manifest中初始化key的信息  以及權限的拷貝   還需要寫入一個服務(一個程序對應一個service)

 

<</SPAN>service android:name="com.baidu.location.f" android:enabled="true" android:process=":remote"></</SPAN>service>

    4 定位需要一個LocationClient對象 實例化 該對象需要程序級別的上下文

 


LocationClient mLocationClient = new LocationClient(getApplicationContext()); //聲明LocationClient類
5 定位也需要監聽 來處理定位回調結果 需要一個 BDLocationListener
class MyLocationListener implements BDLocationListener{ ... }
MyLocationListener myListener = new MyLocationListener();
mLocationClient .registerLocationListener( myListener );
6 設置定位的參數條件 setLocOption方法 需要一個 LocationClientOption參數

 

// 初始化LocationClientOption類 該類 來設置一些定位的參數
  LocationClientOption option = new LocationClientOption();
  // 定位模式 分爲高精度定位模式 低功耗定位模式 僅設備定位模式
  // LocationMode.Hight_Accuracy; LocationMode.Battery_Saving;
  // LocationMode.Device_Sensors;
  option.setLocationMode(LocationMode.Hight_Accuracy);// 此處爲高精度模式
  // 返回國測局經緯度座標系:gcj02 返回百度墨卡託座標系 :bd09 返回百度經緯度座標系 :bd09ll
  option.setCoorType("bd09ll");// 此處設置的返回座標類型爲百度經緯度,默認值gcj02
  int span = 1000;

 

  try {
   span = Integer.valueOf(30 * 1000);
  } catch (Exception e) {
   // TODO: handle exception
  }
  option.setScanSpan(span);// 設置的掃描間隔,單位是毫秒  (下面有備註)
  option.setIsNeedAddress(true);// 設置是否需要地址信息,默認爲無地址
  // 可以理解爲 將封裝好的定位參數 設置給 定位對象
  mLocationClient.setLocOption(option);

7  設置好定位參數 就可以啓動定位了  start方法 (可以使用stop停止)

 

mLocationClient.start();

 

 
8 BDLocationListener的子類監聽中 的方法 onReceiveLocation 該類是定位請求回調函數 BDLocaiton是定位的結果類 
@Override
public void onReceiveLocation(BDLocation location) {
    System.out.println("info=="+location.getLatitude()+location.getLongitude()+location.getAddrStr());
    // 將監聽中的定位結果變成全局的定位數據
    mylocation = location;
    // 定位結果獲取到了地址就停止定位
    Log.i("MyMap",location.getAddrStr());
    if (!location.getAddrStr().equals("")) {
    mLocationClient.stop();
    Log.i("MyMap",location.getAddrStr());
   }
}
接下來 就可以使用全局的 BDLocation 數據源 獲取到的座標 進行地圖的定位顯示
或者 以該座標爲中心點 進行poi檢索
 
很多東西都是自己理解 也許講述的不太對 希望讀者多看文檔 多看api類庫
着也是我的學習方法
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章