前言
一个小需求,需要查询某车某手机的位置信息,可以使用百度或者高德提供的地图API,本文以百度地图API为例。
获取ak
这是第一步,我们登录百度地图,创建应用获取ak
API接口地址
入参出参传送门
方法实现
java
/**
*逆地理编码方法
*lat 纬度
*lng 经度
*/
public static TbStation getBaiDuDecoding(Double lat, Double lng) {
TbStation tbStation = new TbStation();
try {
String ak = 您的ak;
String url = "https://api.map.baidu.com/reverse_geocoding/v3/?ak=%s&output=json&coordtype=wgs84ll&ret_coordtype=wgs84ll&location=%s,%s&extensions_poi=1&extensions_town=true";
url = String.format(url, ak, lat, lng);
String res = HttpUtils.doGet(url, null, String.class);
if (null == res || "".equals(res)) return null;
JSONObject locationObject = JSON.parseObject(res).getJSONObject("result");
if (locationObject != null) {
JSONObject addressComponent = locationObject.getJSONObject("addressComponent");
if (addressComponent != null) {
tbStation.setProvince(addressComponent.getString("province"));
tbStation.setCity(addressComponent.getString("city"));
tbStation.setDistrict(addressComponent.getString("district"));
tbStation.setTownship(addressComponent.getString("town"));
tbStation.setStreet(addressComponent.getString("street"));
}
JSONArray jsonObjectList = locationObject.getJSONArray("pois");
if (jsonObjectList.size() > 0) {
int i = 0;
JSONObject jsonHouse = jsonObjectList.getJSONObject(i);
while (isNumeric(jsonHouse.getString("name").substring(0, 1))) {
jsonHouse = jsonObjectList.getJSONObject(i++);
}
JSONObject poiLatlng = jsonHouse.getJSONObject("point");
tbStation.setLat(poiLatlng.getString("y"));
tbStation.setLng(poiLatlng.getString("x"));
tbStation.setHouse(jsonHouse.getString("name"));
tbStation.setDistance(jsonHouse.getString("distance"));
tbStation.setLocation(jsonHouse.getString("location"));
tbStation.setKindType(jsonHouse.getString("poiType"));
tbStation.setTag(jsonHouse.getString("tag"));
tbStation.setAddress(jsonHouse.getString("addr"));
} else {
tbStation.setHouse("附近无POI");
tbStation.setAddress(locationObject.getString("formatted_address"));
}
} else {
log.error("===>调用地图api失败<=====,返回消息:{}", res);
}
} catch (Exception e) {
log.error("getBaiDuCoding error ---------- " + e.getMessage());
}
return tbStation;
}