调用高德地图api 实现地址解析

来源:互联网 发布:unity3d 模型下载 编辑:程序博客网 时间:2024/06/10 00:57

应业务需求,实现输入一个地址,调用高德的地图的api将返回解析后的地址

高德地图的官方说明:https://lbs.amap.com/api/webservice/guide/api/georegeo


第一步,注册一个账号,创建一个应用取得appkey


第二步,仔细研读官网api,封装一个返回的实体类

package com.handkoo.entity;import java.util.List;/** * 输入地址返回解析结果的类 *  * @author cp * */public class GaodeLocation {private String status;// 结果状态0,表示失败,1:表示成功private String count;// 返回结果的数目private String info;// 返回状态说明private List<Geocodes> geocodes;// 识别的结果列表public String getStatus() {return status;}public void setStatus(String status) {this.status = status;}public String getCount() {return count;}public void setCount(String count) {this.count = count;}public String getInfo() {return info;}public void setInfo(String info) {this.info = info;}public List<Geocodes> getGeocodes() {return geocodes;}public void setGeocodes(List<Geocodes> geocodes) {this.geocodes = geocodes;}}

package com.handkoo.entity;import javax.print.DocFlavor.STRING;public class Geocodes {// 结构化地址信息private String formatted_address;// 所在省private String province;// 城市private String city;// 城市编码private String citycode;// 地址所在的区private String district;// 地址所在的乡镇private String township;// 街道private String street;// 门牌private String number;// 区域编码private String adcode;// 坐标点private String location;// 匹配级别private String level;public String getFormatted_address() {return formatted_address;}public void setFormatted_address(String formatted_address) {this.formatted_address = formatted_address;}public String getProvince() {return province;}public void setProvince(String province) {this.province = province;}public String getCity() {return city;}public void setCity(String city) {this.city = city;}public String getCitycode() {return citycode;}public void setCitycode(String citycode) {this.citycode = citycode;}public String getDistrict() {return district;}public void setDistrict(String district) {this.district = district;}public String getTownship() {return township;}public void setTownship(String township) {this.township = township;}public String getStreet() {return street;}public void setStreet(String street) {this.street = street;}public String getNumber() {return number;}public void setNumber(String number) {this.number = number;}public String getAdcode() {return adcode;}public void setAdcode(String adcode) {this.adcode = adcode;}public String getLocation() {return location;}public void setLocation(String location) {this.location = location;}public String getLevel() {return level;}public void setLevel(String level) {this.level = level;}}


第三步,调用api请求,解析返回的JSON数据封装到对象中

package com.handkoo.util;import java.util.ArrayList;import java.util.List;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import com.alibaba.fastjson.JSON;import com.alibaba.fastjson.JSONArray;import com.alibaba.fastjson.JSONObject;import com.handkoo.entity.GaodeLocation;import com.handkoo.entity.Geocodes;/** * 高德地图测试 *  * @author cp * */public class GaoDeMapUtil {private static final Logger logger = LoggerFactory.getLogger(GaoDeMapUtil.class);// 高德应用的地址private static String gaodeAppID = "1da8ea5d3653cdef862b805333f3465a";// 地理编码地址private static String map_codeurl = "http://restapi.amap.com/v3/geocode/geo?parameters";/* * static { Properties properties = new Properties(); try { gaodeAppID = * properties.getProperty("appkey"); } catch (Exception e) { * e.printStackTrace(); } } *//** * 输入地址返回识别后的信息 *  * @param address * @return 返回的类gaodelocation,详见类 */public GaodeLocation getLocatoin(String address) {GaodeLocation location = null;if (address != null) {try {location = new GaodeLocation();String url = map_codeurl.replace("parameters", "");String params = "key=" + gaodeAppID + "&address=" + address;logger.info("高德地图params:" + params);String result = OKHttpUtil.httpPost(url, params);logger.info("高德地图返回结果:" + result);JSONObject jsonObject = JSONObject.parseObject(result);// 解析jsonlocation.setStatus(jsonObject.getString("status"));location.setInfo(jsonObject.getString("info"));location.setCount(jsonObject.getString("count"));List<Geocodes> geocodes = new ArrayList<>();JSONArray jsonArray = jsonObject.getJSONArray("geocodes");// 遍历解析出来的结果if ((jsonArray != null) && (jsonArray.size() > 0)) {JSONObject jo = (JSONObject) jsonArray.get(0);Geocodes go = new Geocodes();go.setFormatted_address(jo.getString("formatted_address"));go.setProvince(jo.getString("province"));go.setCitycode(jo.getString("citycode"));go.setCity(jo.getString("city"));go.setDistrict(jo.getString("district"));// 地址所在的乡镇JSONArray ts = jo.getJSONArray("township");if (ts != null && ts.size() > 0) {go.setTownship(ts.getString(0));}// 地址编号go.setAdcode(jo.getString("adcode"));// 街道JSONArray jd = jo.getJSONArray("street");if (jd != null && jd.size() > 0) {go.setStreet(jd.getString(0));}// 号码JSONArray hm = jo.getJSONArray("number");if (hm != null && hm.size() > 0) {go.setStreet(hm.getString(0));}go.setLocation(jo.getString("location"));go.setLevel(jo.getString("level"));geocodes.add(go);}location.setGeocodes(geocodes);} catch (Exception e) {e.printStackTrace();}}return location;}public static void main(String[] args) {GaoDeMapUtil gdm = new GaoDeMapUtil();GaodeLocation result = gdm.getLocatoin("槐古豪庭");System.out.println(JSON.toJSONString(result));}}

第四步,测试结果:


11 0
原创粉丝点击