• java根据经纬度转地址或者根据地址转经纬度


    其实本质上还是利用高德地图API进行经纬度和地址的互转。

    1、根据经纬度转地址

    /**
     * 根据经纬度转地址
     * @param points
     * @return
     * @throws IOException
     */
    public static String pointsToLocationsAll(String points) {
        //将GPS坐标转化为高德地图坐标的URL后再去请求位置信息
        try {
            points = URLEncoder.encode(points,"UTF-8");
        } catch (UnsupportedEncodingException e) {
            throw new RuntimeException(e.getMessage());
        }
        String convertUrl =
                "https://restapi.amap.com/v3/assistant/coordinate/convert?locations="+points+"&coordsys=gps&key="+amapKey;
        //GPS坐标转为高德地图坐标
        String s = HttpUtil.get(convertUrl);
        JSONObject jsonObject = JSON.parseObject(s);
        String status = (String) jsonObject.get("status");
        if(Objects.equals(status,"0")){
            throw new RuntimeException("远程调用经纬度转化出错");
        }
        String locations = (String) jsonObject.get("locations");
        String formattedAmapPoints = null;
        try {
            formattedAmapPoints = URLEncoder.encode(locations.replaceAll(";", "|"), "UTF-8");
        } catch (UnsupportedEncodingException e) {
            throw new RuntimeException(e.getMessage());
        }
        String locationUrl = "https://restapi.amap.com/v3/geocode/regeo?output=json&location="+formattedAmapPoints+"&key="+amapKey+"&radius=1000&batch=true";
        String s1 = HttpUtil.get(locationUrl);
        //获取转地址后的结果
        JSONObject parseObject = JSON.parseObject(s1);
        String status1 = (String) parseObject.get("status");
        if(Objects.equals(status1,"0")){
            throw new RuntimeException("根据经纬度获取具体地址出错");
        }
        JSONArray regeocodes = parseObject.getJSONArray("regeocodes");
        String formattedAddress = "";
        for (Object regeocode : regeocodes) {
            JSONObject object = (JSONObject) regeocode;
            formattedAddress = (String)object.get("formatted_address");
        }
        log.info("经纬度【{}】转化为具体地点【{}】",points,formattedAddress);
        return formattedAddress;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46

    2、根据地址信息转经纬度

    /**
     * 地址转经纬度
     * @param position
     * @return
     * @throws IOException
     */
    public static String locationToPoints(String position) {
        if(position==null || position.equals("")){
            throw new RuntimeException("位置地名不能为空");
        }
        String convertUrl = "https://restapi.amap.com/v3/geocode/geo?address="+position+"&output=JSON&key="+amapKey;
        String s = HttpUtil.get(convertUrl);
        JSONObject jsonObject = JSON.parseObject(s);
        String status = (String) jsonObject.get("status");
        if(Objects.equals(status,"0")){
            throw new RuntimeException("根据地名获取经纬度出错");
        }
        JSONArray geocodes = jsonObject.getJSONArray("geocodes");
        String points = "";
        for (Object regeocode : geocodes) {
            JSONObject object = (JSONObject) regeocode;
            points = (String)object.get("location");
        }
        return points;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    amapKey为高德地图API申请的key.

  • 相关阅读:
    pip install face_recognition 报错的解决
    【LeetCode】66. 加一
    Kubernetes中的yaml文件
    03if基础
    Selenium自动化测试之Selenium IDE
    windows10下同时安装两个mysql服务的解决办法
    @umijs/plugin-locale使用
    【C++】日期类的实现
    ELK 日志分析系统介绍与部署
    Bulletproofs、Sigma protocol、Halo2等ZK方案小结
  • 原文地址:https://blog.csdn.net/csdn_avatar_2019/article/details/126767958