zoukankan      html  css  js  c++  java
  • 根据具体的地址解析出对应的地区码

      之前碰见的需求,根据具体的地址信息解析出对应的省市县地区码,以前是基于数据库做的根据表中字段是否包含地区,然后再向上或向下进行判断确保准确。具体是用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进行处理获取最终的地区码。

  • 相关阅读:
    VMware Workstation虚拟机Ubuntu中实现与主机共享(复制和粘贴)
    虚拟机 VMware Workstation12 安装Ubuntu系统
    虚拟机 VMware Workstation12 安装OS X 系统
    ASP.NET Core学习链接
    Java开发中的23种设计模式详解
    C#线程同步的几种方法
    FTP webReq.ContentType异常的处理
    大小端 Big-Endian 与 Little-Endian
    C++:运算符重载函数之"++"、"--"、"[ ]"、"=="的应用
    C++:成员运算符重载函数和友元运算符重载函数的比较
  • 原文地址:https://www.cnblogs.com/lcngu/p/7793890.html
Copyright © 2011-2022 走看看