java通过经纬度获取地理位置信息
先看效果图
百度API接口文档地址
(1)首先需要百度开发者账号创建一个应用得到ak
(2)java部分实现
@Component
@ConfigurationProperties(prefix = "api.baidu")
@ConditionalOnProperty(prefix = "api.baidu",name = "use",havingValue = "true")
public class BMapApi {
private String ak;
/**
* 逆地理编码
*/
private String REVERSE_GEOCODING_API = "https://api.map.baidu.com/reverse_geocoding/v3/";
private static Set<String> supportedCoordtype = new HashSet<>();
static {
/**
* 目前支持的坐标类型包括:bd09ll(百度经纬度坐标)、bd09mc(百度米制坐标)、gcj02ll(国测局经纬度坐标,仅限中国)、wgs84ll( GPS经纬度)
*/
supportedCoordtype.add("bd09ll");
supportedCoordtype.add("bd09mc");
supportedCoordtype.add("gcj02ll");
supportedCoordtype.add("wgs84ll");
}
/**
* 全球逆地理编码服务
* @param lng
* @param lat
* @param coordtype 坐标系
* @return BMapApiResult
* @see <a href="https://lbsyun.baidu.com/index.php?title=webapi/guide/webservice-geocoding-abroad">...</a>
*/
public BMapApiResult reverseGeocoding(BigDecimal lng,BigDecimal lat,String coordtype){
String location = lat.toString() + "," + lng.toString();
Map<String,Object> params = new HashMap<>();
params.put("ak",getAk());
params.put("output","json");
params.put("coordtype",coordtype);
params.put("location",location);
BMapApiResult bMapApiResult = JSON.parseObject(HttpUtil.get(REVERSE_GEOCODING_API,params),BMapApiResult.class);
return bMapApiResult;
}
/**
*
* @param lng 经度
* @param lat 纬度
* @return
*/
public BMapApiResult reverseGeocoding(BigDecimal lng,BigDecimal lat){
return reverseGeocoding(lng, lat,"wgs84ll");
}
/**
* 支持的坐标系
* @param coordtype 坐标系名称
* @return 是否支持
*/
public boolean supportCoordtype(String coordtype){
return supportedCoordtype.contains(coordtype);
}
public String getAk() {
return ak;
}
public void setAk(String ak) {
this.ak = ak;
}
}
配置文件
接收实体
@Data
public class BMapApiResult {
private Integer status;
Result result;
}
@Data
public class AddressComponent {
private String country;
private Integer country_code;
private String country_code_iso;
private String country_code_iso2;
private String province;
private String city;
private Integer city_level;
private String district;
private String town;
private String town_code;
private String distance;
private String direction;
private String adcode;
private String street;
private String street_number;
}
@Data
public class Result {
private Location location;
private String formatted_address;
private String business;
private AddressComponent addressComponent;
private ArrayList<Object> pois = new ArrayList<Object>();
private ArrayList<Object> roads = new ArrayList<Object>();
private ArrayList<Object> poiRegions = new ArrayList<Object>();
private String sematic_description;
private Integer cityCode;
}
@Data
public class Location {
private BigDecimal lng;
private BigDecimal lat;
}
使用方法