JAVA谷歌地理编码API获得城市

时间:2016-05-04 06:45:42

标签: java google-maps google-geocoder google-geocoding-api

我尝试使用谷歌地理编码API从纬度和经度获取国家和城市名称。 这个图书馆https://github.com/googlemaps/google-maps-services-java 作为API的JAVA实现。

这是我目前正在制作的方式:

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。它不是移动应用程序。

1 个答案:

答案 0 :(得分:3)

使用AddressComponentType.LOCALITYGeocodingResult

获取city name

我是这样做的:

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;
}