importcom.alibaba.fastjson.TypeReference;importcom.dimpt.common.util.HttpClientUtils;importcom.dimpt.common.util.JsonUtils;importcom.dimpt.common.util.baidu.map.geo.GeocodingRequest;importcom.dimpt.common.util.baidu.map.geo.GeocodingResponse;importcom.dimpt.common.util.baidu.map.geo.ReverseGeocodingRequest;importcom.dimpt.common.util.baidu.map.geo.ReverseGeocodingResponse;importorg.springframework.util.StringUtils;importjava.io.IOException;/***@author:
* @data:
*@version:*/
public classBaiduMapUtils {/*** 百度地图请求秘钥,注意:需要是服务度app的秘钥*/
private static final String KEY = "PemGxiMCQ********";/*** 返回值类型*/
private static final String OUTPUT = "json";/*** 根据地名获取经纬度*/
private static final String GET_LNG_LAT_URL = "http://api.map.baidu.com/geocoder/v3/";/*** 根据经纬度获取地名*/
private static final String GET_ADDRESS_URL = "http://api.map.baidu.com/reverse_geocoding/v3/";/*** 逆地址解析
* 根据经纬度获得地址信息
* 仓考地址http://lbsyun.baidu.com/index.php?title=webapi/guide/webservice-geocoding-abroad*@return
*/
public staticReverseGeocodingResponse reverseGeocoding(ReverseGeocodingRequest reverseGeocodingRequest) {if(StringUtils.isEmpty(reverseGeocodingRequest.getAk()))
{
reverseGeocodingRequest.setAk(KEY);
}try{
String url=joinUrl(reverseGeocodingRequest);
String jsonString=HttpClientUtils.doGet(url);
ReverseGeocodingResponse response= JsonUtils.toObject(jsonString,new TypeReference(){});returnresponse;
}catch(Exception e) {
e.printStackTrace();
}return null;
}public staticGeocodingResponse geocoding(GeocodingRequest geocodingRequest)
{if(StringUtils.isEmpty(geocodingRequest.getAk()))
{
geocodingRequest.setAk(KEY);
}try{
String url=joinUrl(geocodingRequest);
String jsonString=HttpClientUtils.doGet(url);
GeocodingResponse response= JsonUtils.toObject(jsonString,new TypeReference(){});returnresponse;
}catch(Exception e) {
e.printStackTrace();
}return null;
}/*** 拼接url字符串
*@return*@throwsIOException*/
private static String joinUrl(ReverseGeocodingRequest reverseGeocodingRequest) throwsIOException {//拼装url
StringBuilder baseUrl = newStringBuilder();
String location= reverseGeocodingRequest.getLocation().getLat() + "," +reverseGeocodingRequest.getLocation().getLng();
baseUrl.append(reverseGeocodingRequest.getUrl()).append("?ak=").append(reverseGeocodingRequest.getAk())
.append("&output=").append(reverseGeocodingRequest.getOutput())
.append("&coordtype=").append(reverseGeocodingRequest.getCoordtype())
.append("&location=").append(location);if(!StringUtils.isEmpty(reverseGeocodingRequest.getRet_coordtype()) && !"bd09ll".equals(reverseGeocodingRequest.getRet_coordtype()))
baseUrl.append("&ret_coordtype=").append(reverseGeocodingRequest.getRet_coordtype());if(reverseGeocodingRequest.getRadius()!=1000)
baseUrl.append("&radius=").append(reverseGeocodingRequest.getRadius());if(!StringUtils.isEmpty(reverseGeocodingRequest.getSn()))
baseUrl.append("&sn=").append(reverseGeocodingRequest.getSn());if(!StringUtils.isEmpty(reverseGeocodingRequest.getCallback()))
baseUrl.append("&callback=").append(reverseGeocodingRequest.getCallback());if(!StringUtils.isEmpty(reverseGeocodingRequest.getPoi_types()))
baseUrl.append("&poi_types=").append(reverseGeocodingRequest.getPoi_types());if(!StringUtils.isEmpty(reverseGeocodingRequest.getExtensions_poi()))
baseUrl.append("&extensions_poi=").append(reverseGeocodingRequest.getExtensions_poi());if(!StringUtils.isEmpty(reverseGeocodingRequest.getExtensions_road()) && "true".equals(reverseGeocodingRequest.getExtensions_road()))
baseUrl.append("&extensions_road=").append(reverseGeocodingRequest.getExtensions_road());if(!StringUtils.isEmpty(reverseGeocodingRequest.getExtensions_town()))
baseUrl.append("&extensions_town=").append(reverseGeocodingRequest.getExtensions_town());if(!StringUtils.isEmpty(reverseGeocodingRequest.getLanguage()) && "zh-CN".equals(reverseGeocodingRequest.getLanguage()))
baseUrl.append("&language=").append(reverseGeocodingRequest.getLanguage());if(reverseGeocodingRequest.getLanguage_auto()==1)
baseUrl.append("&language_auto=").append(reverseGeocodingRequest.getLanguage_auto());returnbaseUrl.toString();
}/*** 拼接url字符串
*@return*@throwsIOException*/
private static String joinUrl(GeocodingRequest geocodingRequest) throwsIOException {//拼装url
StringBuilder baseUrl = newStringBuilder();
baseUrl.append(geocodingRequest.getUrl()).append("?ak=").append(geocodingRequest.getAk())
.append("&output=").append(geocodingRequest.getOutput())
.append("&address=").append(geocodingRequest.getAddress());if(!StringUtils.isEmpty(geocodingRequest.getCity()))
baseUrl.append("&city=").append(geocodingRequest.getCity());if(!StringUtils.isEmpty(geocodingRequest.getRet_coordtype()) && !"bd09ll".equals(geocodingRequest.getRet_coordtype()))
baseUrl.append("&ret_coordtype=").append(geocodingRequest.getRet_coordtype());if(!StringUtils.isEmpty(geocodingRequest.getSn()))
baseUrl.append("&sn=").append(geocodingRequest.getSn());if(!StringUtils.isEmpty(geocodingRequest.getCallback()))
baseUrl.append("&callback=").append(geocodingRequest.getCallback());returnbaseUrl.toString();
}public static voidmain(String[] args) {
ReverseGeocodingRequest reverseGeocodingRequest= new ReverseGeocodingRequest(116.639661,23.38616);
ReverseGeocodingResponse data=BaiduMapUtils.reverseGeocoding(reverseGeocodingRequest);
System.out.println(data.toString());
GeocodingRequest geocodingRequest= new GeocodingRequest("北京市海淀区上地十街10号");
GeocodingResponse data2=BaiduMapUtils.geocoding(geocodingRequest);
System.out.println(data2.toString());
}
}