根据具体的地址解析出对应的地区码

  之前碰见的需求,根据具体的地址信息解析出对应的省市县地区码,以前是基于数据库做的根据表中字段是否包含地区,然后再向上或向下进行判断确保准确。具体是用mysql的函数location,但是这样碰见重复的会查询多次数据库,并且效率比较低。有些特殊的地址可能会判断错误。最近发现百度地图的api可以实现这个功能。代码如下:

 1 public class BaiduMapUtils {
 2 
 3    public static final String ak="";
 4 
 5     public static void parseAddress(String address){
 6         String url = "http://api.map.baidu.com/geocoder/v2/";
 7 
 8         HashMap<String, String> params = new HashMap<>();
 9         params.put("ak", ak);
10         params.put("output", "json");
11         params.put("address", address);
12 
13         String s = HttpClientUtils.doGet(url, params);
14         Double[] lngAndLat = getLngAndLat(s);
15 
16         HashMap<String, String> params1 = new HashMap<>();
17 
18         params1.put("location", lngAndLat[1] + "," + lngAndLat[0]);
19         params1.put("output", "json");
20         params1.put("ak", ak);
21         String s1 = HttpClientUtils.doGet(url, params1);
22 
23         String adcode = getAdcode(s1);
24         //TODO 其他业务
25         System.out.println(getAdcode(s1));
26     }
27 
28     /**
29      * 获取行政编码
30      * @param result
31      * @return
32      */
33     private String getAdcode(String result) {
34         if (StringUtil.isNotEmpty(result)){
35             JSONObject jsonObject = JSON.parseObject(result);
36             if (jsonObject.getIntValue("status") == 0){
37                 JSONObject resultJson = jsonObject.getObject("result", JSONObject.class);
38                 Map<String, String> address = resultJson.getObject("addressComponent", Map.class);
39                 return address.get("adcode");
40             }
41         }
42         return null;
43     }
44 
45     /**
46      * 获取经纬度信息
47      * @param result
48      * @return
49      */
50     private Double[] getLngAndLat(String result) {
51         if (StringUtil.isNotEmpty(result)){
52             JSONObject jsonObject = JSON.parseObject(result);
53             int status = jsonObject.getIntValue("status");
54             if (status == 0){
55                 JSONObject resultJson = jsonObject.getObject("result", JSONObject.class);
56                 if (!result.isEmpty()){
57                     JSONObject location = resultJson.getObject("location", JSONObject.class);
58                     return new Double[]{location.getDouble("lng"), location.getDouble("lat")};
59                 }
60             }
61         }
62         return null;
63     }
64 
65 }

  其中代码中的ak是自己申请的应用的密码,然后将获取的json进行处理获取最终的地区码。

posted @ 2017-11-06 16:37  ngulc  阅读(1958)  评论(0编辑  收藏  举报