Java后端利用百度地图全球逆地理编码,获取地址

声明:本人是在实习项目的时候遇到的问题,所有方法均写在Impl中。

1. 申请百度AK

登录百度账号,没有的可以快速注册一个,傻瓜式流程,上传身份证照片即可。

点击创建应用,默认的都不动,确保我们要的“逆地理编码”已勾选。(这里说明一点,百度的api不断在更新,如果某一天你发现你的AK取调用某个API的时候报错:{"status":240,"message":"APP 服务被禁用"},可以尝试重新申请一个AK,亲测有效!)

IP白名单记得写,嫌麻烦全写0就行

2. 调用接口发送请求

话不多说,直接上代码(看注释)。构建url的时候注意,是纬度(latitude)在前,经度(longitude)在后(也就是小的在前,大的在后)。

// 逆地理编码,通过经纬度找具体地址
// 我的项目中经纬度是BigDecimal的,具体以自己的经纬度的变量类型决定
    public String getLocationByCoordinates(BigDecimal longitude, BigDecimal latitude) throws IOException {
        // 构建请求URL
        String url = "https://api.map.baidu.com/reverse_geocoding/v3/?ak=你的ak&output=json&coordtype=wgs84ll&location="
                + latitude + "," + longitude;

        // 创建URL对象
        URL apiUrl = new URL(url);

        // 打开连接
        HttpURLConnection connection = (HttpURLConnection) apiUrl.openConnection();

        // 设置请求方法
        connection.setRequestMethod("GET");

        // 获取响应代码
        int responseCode = connection.getResponseCode();
        if (responseCode == HttpURLConnection.HTTP_OK) {
            // 读取响应内容
            BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
            StringBuilder response = new StringBuilder();
            String line;
            while ((line = reader.readLine()) != null) {
                response.append(line);
            }
            reader.close();
            // 解析JSON获取地址信息
            // 通过打断点,查看返回值之后,对json数据进行解析
            JSONObject jsonResponse = JSONObject.parseObject(response.toString());
            JSONObject result = jsonResponse.getJSONObject("result");
            JSONObject addressComponent = result.getJSONObject("addressComponent");
            String formattedAddress = addressComponent.getString("province") +
                    addressComponent.getString("city") +
                    addressComponent.getString("district") +
                    addressComponent.getString("town");

            return formattedAddress;
        } else {
            // 响应错误
            // 引用这个方法会要求抛IO异常,建议第一次引用就try catch掉,以免以后一直往外抛
            throw new IOException("HTTP response code: " + responseCode);
        }
    }
3. 处理返回值

打了断点之后,查看返回值类型。如果不做处理的话,会因为插入的数据长度超过了数据库定义的长度限制,导致数据被截断而无法插入。

这里我们取"province,city,district,town"这几个key。代码见上。

4. 结果

这里我是先写入数据库,再用前端发请求,请求回来数据,所以表明已经成功写入数据库。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值