Обратное геокодирование Android getLocality часто возвращает null - PullRequest
18 голосов
/ 29 декабря 2011

Я использую Android Geocoding, чтобы получить текущий город с помощью метода Address.getLocality ().Он работал нормально, до недавнего времени он часто возвращал null для данной местности.Вот пример:

    try {
        Geocoder c = new Geocoder(this, Locale.getDefault());
        double lat = 51.481;
        double lon = 0.0;
        List<Address> l = c.getFromLocation(lat, lon, 5);
        for (Address a: l) {
            Log.i("GeocoderTest", "Locality " + a.getLocality() + " (" + a + ")");
        }
    } catch (IOException e) {
        Log.e("GeocoderTest", "", e);
    }

Теперь регистрируется следующее сообщение для первого возвращенного адреса:

Локальный ноль (Address [addressLines = [0: "14-18 ParkVista ", 1:" Лондонский городской округ Гринвич, Лондон SE10 ", 2:" Великобритания "], feature =, admin = null, sub-admin = null, locality = null, магистраль = Park Vista, postalCode = null, countryCode =GB, countryName = Великобритания, hasLatitude = true, широта = 51.4819069, hasLongitude = true, долгота = -6.327E-4, телефон = ноль, url = ноль, дополнительные функции = ноль])

Некоторыелокации возвращают город в местности, а локация рядом с ним - нет.

Так что раньше все работало нормально, на самом деле я раньше не видел нулевой населенный пункт.Так что, я думаю, что-то изменилось в службе геокодирования Google.Есть идеи, что происходит, и является ли эта ситуация постоянной?Если да, каков будет лучший способ определить город по местоположению?

Ответы [ 2 ]

9 голосов
/ 15 июня 2016

Я заметил, что очень часто getLocality () возвращает null для первого адреса в списке, возвращаемого Geocoder.
С другой стороны, правильное название города остается в Местности следующего адреса.
Поэтому я использую этот обходной путь, и он хорошо работает для больших городов:

 private String getCityNameByCoordinates(double lat, double lon) throws IOException {
    List<Address> addresses = mGeocoder.getFromLocation(lat, lon, 10);
    if (addresses != null && addresses.size() > 0) {
        for (Address adr : addresses) {
            if (adr.getLocality() != null && adr.getLocality().length() > 0) {
                return adr.getLocality();
            }
        }
    }
    return null;
}
7 голосов
/ 17 сентября 2012

Сейчас я живу в Канаде, Онтарио, Гамильтон (Гамильтон - мой город, Онтарио - провинция)

Я заметил, что getLocality() возвращает ноль, getAdminArea() возвращает Онтарио, а getSubLocality() возвращает Гамильтона. ч

...