получить название места, указав широту и длину - PullRequest
2 голосов
/ 02 марта 2010

В моем приложении я хочу получить прогноз погоды, который я использую для этого http://www.google.com/ig/api?weather="", указав город. Но для меня доступны только широта и долгота

Как я могу получить название места по широте и долготе.

Ответы [ 5 ]

3 голосов
/ 02 марта 2010

Нет необходимости вызывать Geocoder в этом погодном API, который, кстати, не является общедоступным, поэтому его следует использовать с осторожностью, city, state и country являются только информационными полями, поэтому используйте это так (фиктивные константы):

private static final String URL = "http://www.google.com/ig/api?weather=%s,%s,%s,%d,%d";
//...

final String url = String.format(URL, "city", "state", "country",
   p.getLatitudeE6(), p.getLongitudeE6());
3 голосов
/ 02 марта 2010

К вашему сведению, то, что вы делаете, называется обратным геокодированием.

Большинство веб-сервисов Geonames доступны в JSON, включая findNearby.

Google также имеет веб-сервис обратного геокодирования

То, что вы спрашиваете, - это не мелочь: почти всегда база данных lat / lng будет представлена ​​в формате XML или JSON, поэтому, возможно, стоит потратить на это немного времени и усилий. Android должен иметь оболочки xml / json?

2 голосов
/ 09 мая 2012

Передайте широту и долготу в вашем методе и получите соответствующее название места. Не забудьте разрешения пользователя:

public static String getUserLocation(String lat, String lon) {
   String userlocation = null;
   String readUserFeed = readUserLocationFeed(lat.trim() + "," + lon.trim());
   try {
      JSONObject Strjson = new JSONObject(readUserFeed);
      JSONArray jsonArray = new JSONArray(Strjson.getString("results"));
      userlocation = jsonArray.getJSONObject(1)
            .getString("formatted_address").toString();
   } 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
               + "&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();
}
2 голосов
/ 02 марта 2010

Вы можете использовать Location API , чтобы получить Адресный объект и получить оттуда местность

1 голос
/ 02 марта 2010

Android имеет класс под названием Geocoder для этого материала. Посмотрите на метод getFromLocation.

...