#android
#Android
Вопрос:
Если у меня есть широта и длина определенного места, как я могу проверить, что место находится в определенном состоянии.
Например: если широта и длина относятся к Санта-Кларе, как я могу проверить, что это в Калифорнии?
Спасибо
Ответ №1:
используйте классы Geocoder и Address для достижения решения. этот код может помочь вам .. всего наилучшего…
Geocoder gc = new Geocoder(this, Locale.getDefault());
try {
List<Address> addresses = gc.getFromLocation(lat, lng, 1);
StringBuilder sb = new StringBuilder();
if (addresses.size() > 0) {
Address address = addresses.get(0);
for (int i = 0; i < address.getMaxAddressLineIndex(); i )
String addr=address.getAddressLine(i);
//use this addr string and compare . u will get the solution
}
} catch (IOException e) {}
Ответ №2:
Используйте класс Geocoder, чтобы получить адрес из вашей широты / lon. Страна должна быть частью адреса.
Примечание: это не работает для мест, у которых нет адресов (страна, лес и т.д.).
Обновить:
Есть хороший сервис, который использует базу данных обратного геокодирования Google Maps (ту же, что Android использует внутри): http://reverse-geocoding.appspot.com
Поиск фактически дает данные о стране для любой точки (даже в середине Гренландии) — так что все должно быть в порядке.
Комментарии:
1. Как реализовать ссылку, которую вы дали me…do у вас есть какая-нибудь ссылка на учебник или любой пример кода?
2. Давай. ‘Geocode.get ..’ — это только одна команда. Вы должны разобраться в этом.
Ответ №3:
Попробуйте использовать следующий код
Geocoder gc = new Geocoder(this, Locale.getDefault());
try {
List<Address> addresses = gc.getFromLocation(lat, lng, 1);
if (addresses.size() > 0) {
Address address = addresses.get(0);
String state = address.getLocality();
}
} catch (IOException e) {}
Ответ №4:
public static String getUserAddress(String lat, String lon) {
String userlocation = null;
String userCountry = null;
String userCountryCode = null;
String readUserFeed = readUserLocationFeed(lat.trim() "," lon.trim());
try {
JSONObject Strjson = new JSONObject(readUserFeed);
JSONArray jsonArray = new JSONArray(Strjson.getString("results"));
JSONArray array = new JSONArray(jsonArray.getJSONObject(0).getString("address_components"));
userCountry = array.getJSONObject(2).getString("long_name").toString();
userCountryCode = array.getJSONObject(2).getString("short_name").toString();
userlocation = jsonArray.getJSONObject(1).getString("formatted_address").toString();
System.out.println("User Address : " userlocation "nUser Country : " userCountry "nUser CountryCode : " userCountryCode);
} catch (Exception e) {
e.printStackTrace();
}
Log.i("User Location ", userlocation);
return userlocation;
}
public static String readUserLocationFeed(String address) {
StringBuilder builder = new StringBuilder();
HttpClient client = new DefaultHttpClient();
HttpGet httpGet = new HttpGet("http://maps.google.com/maps/api/geocode/json?latlng=" address "amp;sensor=false");
try {
HttpResponse response = client.execute(httpGet);
StatusLine statusLine = response.getStatusLine();
int statusCode = statusLine.getStatusCode();
if (statusCode == 200) {
HttpEntity entity = response.getEntity();
InputStream content = entity.getContent();
BufferedReader reader = new BufferedReader(new InputStreamReader(content));
String line;
while ((line = reader.readLine()) != null) {
builder.append(line);
}
} else {
Log.e(ReverseGeocode.class.toString(), "Failed to download file");
}
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return builder.toString();
}
Ответ №5:
Три вещи в моей сумке с ответами:
- Обратное геокодирование в Android: http://www.smnirven.com/?p=39
- Foursquares API
- Ведение собственной базы данных.
Для вас первый вариант самый быстрый и простой, а третий — самый надежный и настраиваемый.