Каков наилучший способ интерпретировать местоположение пользователя рядом с геокодером - PullRequest
5 голосов
/ 29 июня 2011

Итак, я создал приложение, которое получает доступ к местоположению пользователя, а затем интерпретирует (обратное геокодирование) его с помощью геокодера следующим образом:

Geocoder gc = new Geocoder(ctx, Locale.getDefault());
List<Address> addresses = gc.getFromLocation(latitude, longitude, maxResults); 
Address address = addresses.get(0);
town = address.getLocality();
countryCd = address.getCountryCode();

Однако я считаю, что служба геокодера действительно ненадежна, а IOException и служба слишком часто недоступны.

Я читал решения, включающие рассылку спама в сервисе Geocoder, пока он не даст результата, а другие говорят, что сервис будет разрешать только одно попадание на IP-адрес каждые 15 секунд.

Иногда перезагрузка моего устройства делает сервис снова доступным.

Есть ли другой API или подход к этой теме?

Ответы [ 3 ]

0 голосов
/ 29 июня 2011

Вы, вероятно, получаете IOException и ServiceUnavailble из-за вашей реализации.

Ознакомьтесь с этой передовой практикой: http://android -developers.blogspot.com / 2011/06 / deep-dive-into-location.html

(это лучше, чем API) и с открытым исходным кодом!

0 голосов
/ 13 июля 2011

там есть решение: проблема с Android для получения широты и долготы с заданного адреса

Просто чтобы упомянуть альтернативу, вы можете использовать REST Google Maps на основе обратный геокодер . Вы, вероятно, можете использовать это как запасной вариант. Как вы бы тоже использовали Google Maps в своем приложении, вам должно быть хорошо с правилами API.

0 голосов
/ 29 июня 2011
public void getAddress(double lat, double lng) {
    Geocoder geocoder = new Geocoder(this, Locale.getDefault());
    try {
        List<Address> addresses = geocoder.getFromLocation(lat, lng, 1);
        Address obj = addresses.get(0);
        String add = obj.getAddressLine(0);
        GUIStatics.currentAddress = obj.getSubAdminArea() + ","
                + obj.getAdminArea();
        GUIStatics.latitude = obj.getLatitude();
        GUIStatics.longitude = obj.getLongitude();
        GUIStatics.currentCity= obj.getSubAdminArea();
        GUIStatics.currentState= obj.getAdminArea();
        add = add + "\n" + obj.getCountryName();
        add = add + "\n" + obj.getCountryCode();
        add = add + "\n" + obj.getAdminArea();
        add = add + "\n" + obj.getPostalCode();
        add = add + "\n" + obj.getSubAdminArea();
        add = add + "\n" + obj.getLocality();
        add = add + "\n" + obj.getSubThoroughfare();

        Log.v("IGA", "Address" + add);
        // Toast.makeText(this, "Address=>" + add,
        // Toast.LENGTH_SHORT).show();

        // TennisAppActivity.showDialog(add);
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        Toast.makeText(this, e.getMessage(), Toast.LENGTH_SHORT).show();
    }
}

Используйте его, возможно, вам удастся помочь.

...