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);
}
}
這是什麼後端服務 –
在清單中使用Internet權限。當長時間點擊地圖時,我可以獲得很長的時間,但從經緯度來看,地址沒有得到。 –
地理編碼服務由Google提供,並由Geocoder API內部調用API – trebron