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;
}

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;
}

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

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cgv3

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值