如何通过纬度和经度获得最近的城市名称?

时间:2013-07-28 12:40:26

标签: android google-maps-android-api-2 mkreversegeocoder

我设法使用GeoCoder获取城市名称,但有时GPS会返回GetLocality无法识别的值(返回“null”)。我认为最好的解决方案是获取最近的城市名称。谁能告诉我请该怎么做。或者,如果有另一种方法可以解决它,那就没关系。

 public void getCityName(double dLatitude, double dLongitude) throws IOException{
    Geocoder gcd = new Geocoder(this, Locale.getDefault());
    List<Address> addresses = gcd.getFromLocation(dLatitude, dLongitude, 1);

    TextView cityname = (TextView)findViewById(R.id.city_name);  
    if (addresses.size() > 0) {             
        cityname.setText( "" +addresses.get(0).getLocality() + "," + addresses.get(0).getCountryName() );          
    }
}

1 个答案:

答案 0 :(得分:0)

你可以这样使用。

ProgressDialog dialog=null;
   @Override
    public void onClick(View v) {
            dialog = ProgressDialog.show(context, "", "Please! Wait...", true);
            GetCurrentAddress result = new GetCurrentAddress();
            result.execute("");
        }



    // getting address task
    private class GetCurrentAddress extends AsyncTask<String, Void, String> {

        @Override
        protected String doInBackground(String... urls) {
            String responseText = null;
            String googleurl = "http://maps.google.com/maps/geo?";
            String latitude="38.89";
            String longitude ="-77.03";
      StringBuilder sbuilder=new StringBuilder();
      sbuilder.append(googleurl);

      sbuilder.append("q="+latitude+","+longitude);
      sbuilder.append("&amp;output=responseText&amp;sensor=true");
      String url=sbuilder.toString();

      try { 
          DefaultHttpClient httpclient=new DefaultHttpClient(); 
          HttpPost httppost=new HttpPost(url); 
          HttpResponse httpresponse=httpclient.execute(httppost); 
          HttpEntity httpentity=httpresponse.getEntity(); 
          InputStream is=httpentity.getContent();
          BufferedReader reader=new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8); 
          StringBuilder sb=new StringBuilder();
          String line=null;
        while((line=reader.readLine())!=null)
         { 
          sb.append(line+"\n");

         } 
        is.close(); 
        responseText=sb.toString();
      } 
      catch(ClientProtocolException e) 
      { 
          e.printStackTrace(); 
      } 
      catch (IOException e) 
      { 
          e.printStackTrace();
      }
      return responseText;
      }

        @Override
        protected void onPostExecute(String resultString) {
            dialog.dismiss();

            String response= resultString;

            if (responseText != null) {
                Log.v(TAG, "json response is:" + response);
                try {
                    jObj = new JSONObject(response);
                    jsonarray = jObj.getJSONArray("Placemark");
                    for (int i = 0; i < jsonarray.length(); i++) {
                        JSONObject innerJsonobject = jsonarray.getJSONObject(i);
                        String jsonaddress = innerJsonobject
                                .getString("address");


                    }

                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }