1

following is my code for google map v2 geocoding. I am getting latitude and longitude from map on longclick listener. I want to decode this latitude and longitude to get addresses. But my address size always returns zero. Whats going wrong don't know.

 Log.i("lat long", ": "+arg0.latitude+","+arg0.longitude); 
 Log.i("Geocoder returns", ": "+geocoder.getFromLocation(arg0.latitude,arg0.longitude,1));
               addresses = geocoder.getFromLocation(arg0.latitude,arg0.longitude,1);
               Log.i("Print address array", ": "+addresses.size()+","+addresses); 
j0k
  • 22,600
  • 28
  • 79
  • 90
Umesh Suryawanshi
  • 934
  • 1
  • 7
  • 21

4 Answers4

1
 private String getAddress(Double lat, Double lng)
 {

    try 
    {
      Geocoder geocoder = new Geocoder(this, Locale.getDefault());
      List<Address> addresses = geocoder.getFromLocation(lat, lng, 1);
      StringBuilder sb = new StringBuilder();
      if (addresses.size() > 0) 
      {
        Address address = addresses.get(0);

        sb.append(address.getLocality()).append(", ");
        sb.append(address.getCountryName());
      }

     String addressString = sb.toString();
     return addressString;
    } 
    catch (IOException e) 
    {
        return "No Address Found";
    }

}

now see the address returning from the function.

swati srivastav
  • 635
  • 4
  • 15
0

According to documentation:

Returns null or empty list if no matches were found or there is no backend service available.

so probably geocoder is not able to determine address for given coordinates.

Make sure that you declare INTERNET permission in your manifest.

<uses-permission android:name="android.permission.INTERNET" />
trebron
  • 356
  • 1
  • 4
0

This is what i used:

package com.exercise.AndroidFromLocation;

import java.io.IOException;
import java.util.List;
import java.util.Locale;

import android.app.Activity;
import android.location.Address;
import android.location.Geocoder;
import android.os.Bundle;
import android.widget.TextView;

public class AndroidFromLocation extends Activity {

double LATITUDE = 37.42233;
double LONGITUDE = -122.083;

   /** Called when the activity is first created. */
   @Override
   public void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.main);
       TextView myLatitude = (TextView)findViewById(R.id.mylatitude);
       TextView myLongitude = (TextView)findViewById(R.id.mylongitude);
       TextView myAddress = (TextView)findViewById(R.id.myaddress);

       myLatitude.setText("Latitude: " + String.valueOf(LATITUDE));
       myLongitude.setText("Longitude: " + String.valueOf(LONGITUDE));

       Geocoder geocoder = new Geocoder(this, Locale.ENGLISH);

       try {
  List<Address> addresses = geocoder.getFromLocation(LATITUDE, LONGITUDE, 1);

  if(addresses != null) {
   Address returnedAddress = addresses.get(0);
   StringBuilder strReturnedAddress = new StringBuilder("Address:\n");
   for(int i=0; i<returnedAddress.getMaxAddressLineIndex(); i++) {
    strReturnedAddress.append(returnedAddress.getAddressLine(i)).append("\n");
   }
   myAddress.setText(strReturnedAddress.toString());
  }
  else{
   myAddress.setText("No Address returned!");
  }
 } catch (IOException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
  myAddress.setText("Canont get Address!");
 }

   }
}
Snehal Poyrekar
  • 735
  • 5
  • 17
0

The android geocoder is not stable and most of the time I got null as well. So, we switch to use the Google Map API Web Service. It's much better IMO.

Below is the code we use. Basically, just use the httpClient to send GET request and the response is in JSON format.

public class GoogleGeocodingService implements GeocodingService {
    private static final Logger LOGGER = LoggerFactory.getInstance().getLogger(GoogleGeocodingService.class);
    private static final String DEFAULT_LANG = "en";
    private HttpClient httpClient;

    /**
     * Get httpClient.
     *
     * @return the httpClient
     */
    public HttpClient getHttpClient() {
        return httpClient;
    }

    /**
     * Set httpClient.
     *
     * @param httpClient
     *            the httpClient to set
     */
    public void setHttpClient(HttpClient httpClient) {
        this.httpClient = httpClient;
    }

    @Override
    public String getSimpleReverseLocation(double latitude, double longitude) throws Exception {
        return getSimpleReverseLocation(latitude, longitude, DEFAULT_LANG);
    }

    @Override
    public String getSimpleReverseLocation(double latitude, double longitude, String language) throws Exception {
        List<BasicNameValuePair> params = new ArrayList<BasicNameValuePair>();
        addParameter(params, "latlng", Double.toString(latitude) + "," + Double.toString(longitude));
        addParameter(params, "language", language);
        addParameter(params, "sensor", "true");
        String response = getContent("http://maps.googleapis.com/maps/api/geocode/json", params);
        try {
            GeocodingResponse r = handleResponse(response, GeocodingResponse.class);
            return r.getShortFormattedAddress();
        } catch (Exception e) {
            LOGGER.error(e.toString());
            return "";
        }
    }

    private static void addParameter(List<BasicNameValuePair> parameters, String key, String value) {
        parameters.add(new BasicNameValuePair(key, value));
    }

    private String getContent(String url, List<BasicNameValuePair> parameters) throws Exception {
        url = HttpClientUtils.createGetUrl(url, parameters);

        //LOGGER.debug("URL: %s", url);
        return HttpClientUtils.getContent(httpClient, new HttpGet(url), new InputStreamToStringConverter());
    }

    private <T> T handleResponse(String response, Class<T> clz) throws IOException {
        //LOGGER.debug("Response: %s", response);
        int first = StringUtils.indexOf(response, '{');
        //LOGGER.debug("first position of '{' = %d", first);
        if (first > 0) {
            response = StringUtils.substring(response, first);
            LOGGER.debug("Response: after clean server side error html from json response: %s", response);
        }
        return JacksonUtils.parse(response, clz);
    }

}
worawee.s
  • 598
  • 5
  • 11