以下是我的Google地图v2地理编码代码。我从longclick听众的地图获得经度和经度。我想解码这个纬度和经度来获取地址。但我的地址大小总是返回零。什么不对,不知道。
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 :(得分: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";
}
}
现在看到从函数返回的地址。
答案 1 :(得分:0)
如果未找到匹配项或没有可用的后端服务,则返回null或空列表。
因此,地理编码器可能无法确定给定坐标的地址。
确保在清单中声明INTERNET权限。
<uses-permission android:name="android.permission.INTERNET" />
答案 2 :(得分: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!");
}
}
}
答案 3 :(得分:0)
android地理编码器不稳定,大部分时间我都是null。所以,我们切换到使用Google Map API Web Service。这是更好的IMO。
以下是我们使用的代码。基本上,只需使用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);
}
}