2013-08-31 88 views
0

以下是我的谷歌地圖v2地理編碼代碼。我從longclick監聽器的地圖獲取經緯度。我想解碼這個經度和緯度來獲得地址。但是我的地址大小總是返回零。不知道怎麼回事。Google地圖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

在清單中使用Internet權限。當長時間點擊地圖時,我可以獲得很長的時間,但從經緯度來看,地址沒有得到。 –

+0

地理編碼服務由Google提供,並由Geocoder API內部調用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

好吧,讓我先嚐試 –

+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

Android地理編碼器不穩定,大部分時間我也是空的。所以,我們切換到使用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); 
    } 

} 
相關問題