zoukankan      html  css  js  c++  java
  • 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)+"
    ";
    21                     msg+="纬度:"+String.valueOf(address.get(0).getLatitude()*1E6)+"
    ";
    22                     msg+="国家:"+address.get(0).getCountryName()+"
    ";
    23                     msg+="省:"+address.get(0).getAdminArea()+"
    ";
    24                     msg+="城市:"+address.get(0).getLocality()+"
    ";
    25                     msg+="名称:"+address.get(0).getAddressLine(1)+"
    ";
    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文档。

  • 相关阅读:
    JS 中的foreach和For in比较
    SQL 查询CET使用领悟
    .NET开源项目
    asp.net获取客户端IP方法(转载)
    jQuery Mobile 基础(第四章)
    jQuery Mobile 基础(第三章)
    jQuery Mobile 基础(第二章)
    机器学习笔记之梯度下降法
    特征脸是怎么提取的之主成分分析法PCA
    word2vec初探
  • 原文地址:https://www.cnblogs.com/ggz19/p/4152660.html
Copyright © 2011-2022 走看看