JAVA google 地理编码 API 获取城市
JAVA google geocoding API get city
我正在尝试使用 google 地理编码 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);
}
问题是:
AddressType.ADMINISTRATIVE_AREA_LEVEL_1
有 5 个级别,城市名称在不同级别取决于具体 location/country。
所以问题是——如何从结果中准确提取城市名称?或者我需要如何正确地形成请求?
P.S。它不是移动应用程序。
使用 AddressComponentType.LOCALITY
从 GeocodingResult
得到 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;
}
我正在尝试使用 google 地理编码 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);
}
问题是:
AddressType.ADMINISTRATIVE_AREA_LEVEL_1
有 5 个级别,城市名称在不同级别取决于具体 location/country。
所以问题是——如何从结果中准确提取城市名称?或者我需要如何正确地形成请求?
P.S。它不是移动应用程序。
使用 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;
}