Android Geocoder(位置解析)


Android中提供GPS定位服務,同時開發者可以對獲得的位置信息進行解析,可以獲得位置的詳細信息。

1.gps定位

在Eclipse中建立android應用程序。android sdk中提供了locationmanager來獲得系統提供的定位服務,可以通過gps、network等定位。通過下面的代碼能夠獲取location對象,而通過location可以獲得經緯度信息。

 1 LocationManager loactionmanager=(LocationManager) getSystemService(Context.LOCATION_SERVICE);
 2         tv_msg=(TextView)findViewById(R.id.textView1);
 3         Criteria criteria=new Criteria();
 4         criteria.setAccuracy(Criteria.ACCURACY_FINE);
 5         criteria.setAltitudeRequired(false);
 6         criteria.setBearingRequired(false);
 7         criteria.setCostAllowed(false);
 8         criteria.setPowerRequirement(Criteria.POWER_LOW);
 9         String provider=loactionmanager.getBestProvider(criteria, true);
10         Location location=loactionmanager.getLastKnownLocation(provider);
獲取服務

通過Criteria為對象指定一些參數。criteria提供若干方法:

(1)public void setAccuracy(int accuracy)

位置解析的精度。Criteria.Accuracy_Fine 精確模式,Criteria.Accuracy_Coarse 模糊模式。

(2)public void setAltitudeRequired(boolean altitude)

是否提供海拔高度信息

(3)public void setBearingRequired(boolean)

是否提供方向信息

(4)public void setPowerRequirement(int level)

電池消耗,無、低、中、高,參數 Criteria. NO_REQUIREMENT, Criteria. POWER_LOW, Criteria.POWER_MEDIUM, or Criteria. POWER_HIGH

(5) public void setCostAllowed(boolean)

是否允許運行商計費。

2.gps位置解析

以前進行位置解析的時候,有人通過訪問Google提供的服務進行位置解析,那樣真的比較耗時,對於手機用戶來說,體驗真的很重要,今天無意中看見可以通過別的方法來進行位置的解析。android sdk 中提供了 Geocoder類來進行位置的解析。通過geocoder的getFromLocation(double lattitude,double longtitude,int maxresults)來獲取地址列表,三個參數分別為:緯度、經度、返回的結果數。同時geocoder的getlocationfrom方法是同步的,因此,它們進行查找時將會阻礙線程,所以不應該放入UI線程,應該放入后台,也就是通過異步線程來實現。

 1 public class GeocodeAddress extends AsyncTask<Location, Void, String>
 2     {
 3         
 4         @Override
 5         protected void onPreExecute() {
 6             // TODO Auto-generated method stub
 7             super.onPreExecute();
 8         }
 9         @Override
10         protected String doInBackground(Location... params) {
11             // TODO Auto-generated method stub
12             if(params[0]!=null)
13             {
14                 Geocoder geocoder=new Geocoder(MainActivity.this);
15                 try {
16                     List<Address> address=geocoder.getFromLocation(params[0].getLatitude(), params[0].getLongitude(), 1);
17                     msg="";
18                     if(address.size()>0)
19                     {
20                     msg+="經度:"+String.valueOf(address.get(0).getLongitude()*1E6)+"\n";
21                     msg+="緯度:"+String.valueOf(address.get(0).getLatitude()*1E6)+"\n";
22                     msg+="國家:"+address.get(0).getCountryName()+"\n";
23                     msg+="省:"+address.get(0).getAdminArea()+"\n";
24                     msg+="城市:"+address.get(0).getLocality()+"\n";
25                     msg+="名稱:"+address.get(0).getAddressLine(1)+"\n";
26                     msg+="街道:"+address.get(0).getAddressLine(0);
27                     return msg;
28                     }
29                 } catch (IOException e) {
30                     // TODO Auto-generated catch block
31                     e.printStackTrace();
32                 }
33             }
34             return null;
35         }
36         @Override
37         protected void onPostExecute(String result) {
38             // TODO Auto-generated method stub
39             if(result!=null&&result!="")
40             {
41                 tv_msg.setText(result);
42             }
43         }
44         
45     }
位置解析

這里的geoceAddress 是繼承asynctask異步類,參數分別為:location,傳進來的參數類型;Void,異步線程處理的進度,String,返回的結果類型。

doInBackground(Params) :用來處理比較耗時的操作,返回結果

onPostExecute:獲取處理的結果,並可以進行ui的更新。

onProgressUpdate:數據處理的進度

3.位置反向解析

位置反向解析,是指通過位置信息獲取經緯度地址。

List<Address> geoaddress= geocoder.getFromLocationName(String locationname, int maxresult);

參數:locationname:位置的名稱信息,如南京大學,北京大學等。

maxresults:返回的結果數。從1到5.

double lattitude=geoaddress.get(0).getLatitude();//獲取緯度
double longtitude=geoaddress.get(0).getLongitude();//獲取經度

更多詳細,請參照androidsdk文檔。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM