700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > Java调用百度/高德地图API实现根据经纬度查地名

Java调用百度/高德地图API实现根据经纬度查地名

时间:2019-06-24 21:02:42

相关推荐

Java调用百度/高德地图API实现根据经纬度查地名

Java调用百度地图API实现根据经纬度查地名

功能:需要根据经纬度来查询所属的乡镇地址

我们选择了百度地图的逆地理编码来解决

首先要申请自己的密钥:密钥

@Slf4j@Servicepublic class AreaServiceImpl implements AreaService {//这里是把百度地图的ak密钥写在了配置文件,可以直接写死在这里//final String ak="xxxxxx";@Value("${baiduapi.ak}")private String AK;//备用AK,如果用的yml建议直接baiduapi.beiyong@Value("${baiduapi.ak.beiyong}")private String deAK;/*** 通过告警经纬度返回所在客户id,name* @param lat 纬度* @param lng 经度* @return*/@Overridepublic String getDeptByLocation(String lng, String lat){if (lng == null || "".equals(lng) || lat == null || "".equals(lat)){return null;}return getDeptByLocation(lng, lat, AK);}public String getDeptByLocation(String lng, String lat, String ak) {final String URL = "http://api./reverse_geocoding/v3/" +"?ak=" + ak +"&output=json&coordtype=wgs84ll&extensions_town=true&" +"location=" + lat + "," + lng;String areaCode = "";String addressName = "";//调百度地图API,通过经纬度查areaCodeURL myURL = null;URLConnection httpsConn = null;//进行转码try {myURL = new URL(URL);} catch (MalformedURLException e) {e.printStackTrace();}try {httpsConn = (URLConnection) myURL.openConnection();if (httpsConn != null) {InputStreamReader insr = new InputStreamReader(httpsConn.getInputStream(), "UTF-8");BufferedReader br = new BufferedReader(insr);String data = null;if ((data = br.readLine()) != null) {JSONObject jsonObject = JSON.parseObject(data);//状态码String status = jsonObject.get("status")+"";//配额超限if ("301".equals(status) || "302".equals(status) || "401".equals(status) || "402".equals(status)){if (ak.equals(deAK)){log.error("百度地图api调用配额超限: "+lat+","+lng);return null;}return getDeptByLocation(lng, lat, deAK); //更换AK}//其他错误if (!"0".equals(status)) {log.error("百度地图api调用失败: "+lat+","+lng);return null;}//使用alibaba的JSON工具类取自己想要的内容areaCode = jsonObject.getJSONObject("result").getJSONObject("addressComponent").get("town_code") + "";addressName = jsonObject.getJSONObject("result").getJSONObject("addressComponent").get("town") + "";//区域编码System.out.println(areaCode);System.out.println(addressName);}insr.close();}} catch (IOException e) {e.printStackTrace();}return addressName;}}

返回的是这样的JSON串,想要什么直接拿就可以,我这里用的是alibaba的JSONObject取的

更:建议高德地图

改改url就行,经纬度和百度是反着的,然后看看错误码和返回json中的key就行

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。