百度地圖彙總

一、LocationManager獲取經緯度及定位過程。

如何利用LocationManager獲取經緯度,並利用Geocoder將經緯度轉換爲城市街道等信息。

LocationManager

LocationManager定位管理者實例通過getSystemService()方法獲得。

locationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);

得到LocationManager實例後,再結合LocationProvider就可以得到經緯度了,LocationProvider分爲兩種。

LocationProvider gpsProvider = locationManager.getProvider(LocationManager.GPS_PROVIDER);//通過GPS定位,較精確,也比較耗電

LocationProvider netProvider =  locationManager.getProvider(LocationManager.NET_PROVIDER);通過網絡定位,對定位精確度不高或省點情況可考慮使用

進行定位前,需要對兩種LocationProvider是否存在進行判斷if (locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER) != null || locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER) != null) {

  1.  /* 
  2.     * 進行定位 
  3.         * provider:用於定位的locationProvider字符串:LocationManager.NETWORK_PROVIDER/LocationManager.GPS_PROVIDER 
  4.     * minTime:時間更新間隔,單位:ms 
  5.         * minDistance:位置刷新距離,單位:m 
  6.     * listener:用於定位更新的監聽者locationListener 
  7.     */  
  8.         locationManager.requestLocationUpdates(provider, minTime, minDistance, listener);  
  9. else {  
  10.         //無法定位:1、提示用戶打開定位服務;2、跳轉到設置界面  
  11.     Toast.makeText(this"無法定位,請打開定位服務", Toast.LENGTH_SHORT).show();  
  12.     Intent i = new Intent();  
  13.     i.setAction(Settings.ACTION_LOCATION_SOURCE_SETTINGS);  
  14.     startActivity(i);  
  15.     }  

}

當LocationProvider不爲空時,進行定位,爲Null時,提示用戶打開定位服務,在代碼中進行跳轉,供用戶勾選。

LocationListener

在定位時需要實現一個LocationListener位置監聽接口,主要重寫onLocationChanged()方法。

//位置改變回調方法

//@params location 當前的位置

public void onLocationChanged(Location location){

//得到緯度

double latitude = location.getLatitude();

//得到徑度

double longitude = location.getLongitude();

}

其他需要重寫的方法有:

  1. @Override  
  2. public void onStatusChanged(String provider, int status, Bundle extras) {  
  3.     // TODO Auto-generated method stub  
  4.           
  5. }  
  6.   
  7. @Override  
  8. public void onProviderEnabled(String provider) {  
  9.     // TODO Auto-generated method stub  
  10.       
  11. }  
  12.   
  13. @Override  
  14. public void onProviderDisabled(String provider) {  
  15.     // TODO Auto-generated method stub  
  16.           
  17. }  
GeoCoder

GerCoder經緯度解碼者可用於將經緯度轉爲詳細位置信息:國家,城市,街道名稱等

  1. Geocoder gc = new Geocoder(this, Locale.getDefault());  
  2. List<Address> locationList = null;  
  3. try {  
  4.     locationList = gc.getFromLocation(latitude, longitude, 1);  
  5. catch (IOException e) {  
  6.     e.printStackTrace();  
  7. }  
  8. Address address = locationList.get(0);//得到Address實例  
  9. //Log.i(TAG, "address =" + address);  
  10. String countryName = address.getCountryName();//得到國家名稱,比如:中國  
  11. Log.i(TAG, "countryName = " + countryName);  
  12. String locality = address.getLocality();//得到城市名稱,比如:北京市  
  13. Log.i(TAG, "locality = " + locality);  
  14. for (int i = 0; address.getAddressLine(i) != null; i++) {  
  15. String addressLine = address.getAddressLine(i);//得到周邊信息,包括街道等,i=0,得到街道名稱  
  16.     Log.i(TAG, "addressLine = " + addressLine);  
  17. }  
最後,別忘記了添加權限:

  1. <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />  
  2. <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />  
  3. <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />  
  4. <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />  
  5. <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />  
  6. <uses-permission android:name="android.permission.INTERNET" />  

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