Как проверить позицию относительно широты и длины

#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:

Три вещи в моей сумке с ответами:

  1. Обратное геокодирование в Android: http://www.smnirven.com/?p=39
  2. Foursquares API
  3. Ведение собственной базы данных.

Для вас первый вариант самый быстрый и простой, а третий — самый надежный и настраиваемый.