JAVA API геокодирования Google получить город

Я пытаюсь получить названия стран и городов по широте и долготе, используя API геокодирования Google. Эта библиотека https://github.com/googlemaps/google-maps-services-java в качестве реализации JAVA для API.

Это текущий способ, которым я это делаю:

GeoApiContext context = new GeoApiContext().setApiKey("AI... my key");
GeocodingResult[] results =  GeocodingApi.newRequest(context)
        .latlng(new LatLng(40.714224, -73.961452)).language("en").resultType(AddressType.COUNTRY, AddressType.ADMINISTRATIVE_AREA_LEVEL_1).await();

logger.info("Results lengh: "+ results.length);

for(int i =0; i< results[0].addressComponents.length; i++) {
    logger.info("Address components "+i+": "+results[0].addressComponents[i].shortName);
}

Проблема в следующем: существует 5 уровней AddressType.ADMINISTRATIVE_AREA_LEVEL_1, а название города находится на разных уровнях в зависимости от конкретного местоположения/страны. Итак, вопрос в том, как я могу извлечь точное название города из результатов? или как мне правильно сформировать запрос?

P.S. это не мобильное приложение.


person user1935987    schedule 04.05.2016    source источник
comment
administrative_area_level_2 должен быть город   -  person Ankur Singhal    schedule 04.05.2016
comment
как я упоминал ранее, для разных стран/местоположений город отображается на разных административных_областях_уровня_2 (1-5).   -  person user1935987    schedule 04.05.2016
comment
предоставьте примеры, дайте мне полный URL-адрес, кроме ключа API, у меня есть собственный ключ API, я также нажму. :)   -  person Ankur Singhal    schedule 04.05.2016
comment
эмм. сори, пример чего? если вы имеете в виду разные географические координаты - например, этот Сидней (широта, долгота: -33,8984101,151,2141271) и этот, Бангкок (13,7542408,100,5142316)   -  person user1935987    schedule 04.05.2016
comment
да, я понимаю, я уже давно использую этот API, и я заметил, что мы не можем на 100% полагаться на данные Google.   -  person Ankur Singhal    schedule 04.05.2016
comment
Небольшое примечание: я работал в сфере информационных служб геолокации с SmartyStreets и хочу поделиться предупреждением. В Условиях обслуживания картографических служб Google говорится, что вы не можете использовать их результаты, не отображая их на карте. Есть и другие юридические ограничения...   -  person Joe    schedule 28.09.2016


Ответы (1)


Используйте AddressComponentType.LOCALITY, чтобы получить название города от GeocodingResult

Я делаю это следующим образом:

private PlaceName parseResult(GeocodingResult r) {

    PlaceName placeName = new PlaceName(); // simple POJO

    for (AddressComponent ac : r.addressComponents) {
        for (AddressComponentType acType : ac.types) {

            if (acType == AddressComponentType.ADMINISTRATIVE_AREA_LEVEL_1) {

                placeName.setStateName(ac.longName);

            } else if (acType == AddressComponentType.LOCALITY) {

                placeName.setCityName(ac.longName);

            } else if (acType == AddressComponentType.COUNTRY) {

                placeName.setCountry(ac.longName);
            }
        }

        if(/* your condition */){ // got required data
            break;
        }
    }

    return placeName;
}
person dieter    schedule 04.05.2016