2013-08-31 3 views
0

следующий мой код для геокодирования google map v2. Я получаю широту и долготу от карты на слушателе longclick. Я хочу декодировать эту широту и долготу, чтобы получить адреса. Но мой размер адреса всегда возвращает ноль. Что происходит не так, не знаю.Google Map V2 геокодер возвращает null

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

ответ

0

По documentation:

Возвращает NULL, или пустой список, если не было найдено ни одного совпадения или нет службы бэкенд доступны.

так что, возможно, геокодер не может определить адрес для данных координат.

Убедитесь, что вы заявляете разрешение INTERNET в своем манифесте.

<uses-permission android:name="android.permission.INTERNET" /> 
+0

Что это за базовое обслуживание –

+0

Разрешение на использование в Интернете используется в манифесте. Когда Long click на карте, я могу получить lat long, но с lat long, адрес не получается. –

+0

Служба геокодирования предоставляется компанией Google и внутренне называется Geocoder API – trebron

0

Это то, что я использовал:

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!"); 
} 

    } 
} 
+0

ok, позвоните мне сначала –

+0

не работает для меня –

+0

что вам подарят? –

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"; 
    } 

} 

теперь видят адрес возвращается из функции.

0

Андроид-геокодер нестабилен, и большую часть времени я тоже получил нуль. Итак, мы переключаемся на использование Google Map API Web Service. Это намного лучше ИМО.

Ниже приведен код, который мы используем. В принципе, просто используйте httpClient для отправки запроса GET, а ответ - в формате JSON.

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

} 
Смежные вопросы