Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發 >> 關於android開發 >> 百度地圖開發的學習(二)——地圖定位,百度地圖

百度地圖開發的學習(二)——地圖定位,百度地圖

編輯:關於android開發

百度地圖開發的學習(二)——地圖定位,百度地圖


定位是地圖開發的必經重要的環節,我也在不斷學習中,就自己了解寫一下這些。

一、配置

1.百度的定位是有自己jar包和so文件的,所以記得將它們配置到對應的文件夾中並加載進工程裡。具加載方法在學習一裡面就有了,這裡就不細講了。

2.在百度的配置方法中導入完庫文件後,還要進行聲明libs源文件

如果是將jar包和so文件全部放入libs文件中,就需要這樣的聲明了,本人也試過,但是格式有點偏差,build.gradle會報錯,改成下面這樣就可以了。

sourceSets {
main {
jniLibs.srcDir 'libs'
}

3.添加service

location的服務是作為service來開啟的,需要添加進AndroidMainfest.xml。

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


4.添加權限
之前學習一中已經把後續的所需權限包含進來,所以可以參考之前的,這裡就不附上了。

 

二、熟悉主要的使用的定位的類

1.LocationClient

這是一個定位服務的類,相當於定義一個有定位服務的客戶端,而且只能在主線程中啟動

它的有兩個構造函數,都需要傳入全局的context,建議用getApplicationContext傳入

這兩個構造函數區別:是否在創建過程中之前是否定義了配置定位參數的locationClientOption。如果采用第一個構造方法,那麼在後面也需要使用setLocOption來補充。

常用方法如下:

void setLocOption(LocationClientOption locOption) 設置 LocationClientOption void start() 啟動定位sdk void stop() 停止定位sdk void registerLocationListener(BDLocationListener listener) 注冊定位監聽函數 void registerNotify(BDNotifyListener mNotify) 注冊位置提醒監聽 void requestNotifyLocation() NA void removeNotifyEvent(BDNotifyListener mNotify) 取消注冊的位置提醒監聽 int requestOfflineLocation() 離線定位請求,異步返回,結果在locationListener中獲取.

一般在構造完和設置參數後嗎,就可以調用start方法,啟動定位服務。

2.LocationClientOption

能夠配置定位SDK各種參數

常用的方法:

void setCoorType(java.lang.String coorType) 獲得當前設置的坐標類型 void SetIgnoreCacheException(boolean cacheException) 設置是否進行異常捕捉 true:不捕捉異常;false:捕捉異常,默認為false void setIgnoreKillProcess(boolean killProcess) 設置是否退出定位進程 true:不退出進程; false:退出進程,默認為true void setIsNeedAddress(boolean isNeed) 設置是否需要地址信息,默認為無地址 void setIsNeedLocationPoiList(boolean isNeedLocationPoiList) 設置是否需要返回位置POI信息,可以在BDLocation.getPoiList()中得到數據 void setLocationMode(LocationClientOption.LocationMode mode) 設置定位模式 void setNeedDeviceDirect(boolean isNeedDeviceDirect) 在網絡定位時,是否需要設備方向 true:需要 ; false:不需要。 void setOpenGps(boolean openGps) 設置是否打開gps進行定位 void setProdName(java.lang.String prodName) 設置Prod字段值 void setScanSpan(int scanSpan) 設置掃描間隔,單位是毫秒 當<1000(1s)時,定時定位無效

常用的設置有定位模式、定位坐標系、掃描時間間隔、返回地址結果、是否打開GPS、定位模式。

定位模式(默認高精度):

(1)高精度定位模式(Hight_Accuracy):同時使用網絡定位和GPS定位,優先返回最高精度的定位結果。

(2) 低功耗定位模式(Battery_Saving):不使用GPS,只使用網絡定位(WiFi和基站)。

(3)僅用設備定位模式(Device_Sensors): 不適用網絡定位,只使用GPS進行定位。但是此模式下不支持室內環境的定位。

定位坐標系(建議采用bd09ll,百度地圖用自己坐標比較准。。。):

(1)返回國測局經緯度坐標系:gcj02

(2)返回百度墨卡托坐標系 :bd09

(3)返回百度經緯度坐標系 :bd09ll

關於坐標系的一些了解我也會在下一篇blog裡面說到。。。

掃描時間間隔(單位:ms):設置掃描間隔,單位是毫秒 當<1000(1s)時,定時定位無效

返回定位結果:設置是否需要地址信息,默認無地址

是否打開GPS:定位一般都需要開啟

3. BDLocationListener 定位請求回調接口

在設置完定位參數過後,需要設置監聽事件,主要是重寫onReceiveLocation(BDLocation location)函數,實現對於location結果的處理。

4.BDLocation 內部封裝了經緯度、半徑等屬性。

常用的方法:

java.lang.String getAddrStr() 獲取詳細地址信息 double getAltitude() 獲取高度信息,目前只有是GPS定位結果時才有效,單位米(還沒有實現) java.lang.String getCity() 獲取城市 java.lang.String getCountry() 獲取國家 double getLatitude() 獲取緯度坐標 double getLongitude() 獲取經度坐標 java.lang.String getProvince() 獲取省份 float getSpeed() 獲取速度,僅gps定位結果時有速度信息,單位公裡/小時,默認值0.0f java.lang.String getStreet() 獲取街道信息 java.lang.String getTime() server返回的當前定位時間 float getRadius() 獲取定位精度,默認值0.0f float getDirection() gps定位結果時,行進的方向,單位度

常獲取的信息:經緯度、精度范圍、行進的方向

5.MyLocationData 定位數據包

之前的類完成地圖的定位和監聽響應,如果要在地圖中顯示出來,就需要構造定位數據包,來顯示當前定位位置。

MyLocationData.Builder accuracy(float accuracy) 設置定位數據的精度信息,單位:米 MyLocationData build() 構建生成定位數據對象 MyLocationData.Builder direction(float direction) 設置定位數據的方向信息 MyLocationData.Builder latitude(double lat) 設置定位數據的緯度 MyLocationData.Builder longitude(double lng) 設置定位數據的經度 MyLocationData.Builder satellitesNum(int num) 設置定位數據的衛星數目 MyLocationData.Builder speed(float speed) 設置定位數據的速度

這些方法常用的就是精度、經緯度、方向,對應數據獲取可以BDLocation的方法獲取。

6.MyLocationConfiguration 配置定位圖層

構造函數MyLocationConfiguration(MyLocationConfiguration.LocationMode mode, boolean enableDirection, BitmapDescriptor customMarker)

顯示方式(LocationMode):

有了上面幾個基本的類就能簡單的使用定位服務啦。

 還有什麼類需要查找的也可以到官網去搜索

http://wiki.lbsyun.baidu.com/cms/androidloc/doc/v6_0_3/doc/index.html

 

核心的代碼附上:


mLocClient = new LocationClient(this);//定義定位客戶端
mLocClient.registerLocationListener(myListener);//設置監聽事件
LocationClientOption option = new LocationClientOption();//設置參數
option.setOpenGps(true); // 打開gps
option.setCoorType("bd09ll"); // 設置坐標類型
option.setScanSpan(1000);//設施掃描間隔時間
mLocClient.setLocOption(option);//將參數添加進客戶端
mLocClient.start();//開啟客戶端

public class MyLocationListenner implements BDLocationListener {

@Override
public void onReceiveLocation(BDLocation location) {
// map view 銷毀後不在處理新接收的位置
if (location == null || mMapView == null) {
return;
}
MyLocationData locData = new MyLocationData.Builder()
.accuracy(location.getRadius())
.direction(100)
          .latitude(location.getLatitude())
.longitude(location.getLongitude())
          .build();
mBaiduMap.setMyLocationData(locData);
     if (isFirstLoc) {
  isFirstLoc = false;
  LatLng ll = new LatLng(location.getLatitude(),
     location.getLongitude());
  //mToast = Toast.makeText(LocationDemo.this, "第一次位置:"+ll.latitude +"|"+ ll.longitude, Toast.LENGTH_SHORT);
  //mToast.show();
   MapStatus.Builder builder = new MapStatus.Builder();
  builder.target(ll).zoom(18.0f);
   mBaiduMap.animateMapStatus(MapStatusUpdateFactory.newMapStatus(builder.build()));
}
}

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved