How to get the nearest city name via latitude and longitude?

1.2k Views Asked by At

I managed to get the city name using the GeoCoder, but sometimes the GPS returns values that GetLocality can not recognize (returning "null"). I think the best solution is to get the nearest city name. Can anyone tell me please how to do that. Or if there is another alternative to solve it, it's OK.

 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

There are 1 best solutions below

1
Sunil Kumar On

you can use this way.

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();
                }
            }
        }