java使用百度API接口实现经纬度转地址实现地址转码,并且将转码数据存入MySQL

该博客介绍了一个Java程序,它利用百度地图API将经纬度转换为城市地址,然后将这些信息更新到MySQL数据库中。程序通过Spring Boot测试类运行,对一批坐标进行处理,每5秒执行一次以避免接口限制。在转换过程中,如果经纬度为空,则跳过。转换成功后,城市名称与数据库中的城市代码匹配并进行更新。
摘要由CSDN通过智能技术生成

个人练习代码备份,相互交流学习。
java使用百度API接口实现经纬度转地址实现地址转码,并且将转码数据存入MySQL

package com.niit.mybatisplus;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.niit.mybatisplus.dao.BladeRegionMapper;
import com.niit.mybatisplus.dao.TpaasCorp8Mapper;
import com.niit.mybatisplus.pojo.BladeRegion;
import com.niit.mybatisplus.pojo.TpaasCorp8;
import net.sf.json.JSONObject;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

/**
 * @author 余天松
 * @ClassName lngToCity.java
 * @Description 经纬度转地址
 * @createTime 2021-09-14 20:58
 **/
@SpringBootTest
public class lngToCity {
    @Autowired
    private TpaasCorp8Mapper tpaasCorp8Mapper;
    @Autowired
    private BladeRegionMapper bladeRegionMapper;

    @Test
    public void lngToCity() throws InterruptedException {
        List<TpaasCorp8> tpaasCorp8=tpaasCorp8Mapper.getCorpList();
        List<BladeRegion> bladeRegions=bladeRegionMapper.getCityCodeList();
        try {
            int i=1;
            for (TpaasCorp8 tpaas8: tpaasCorp8) {
            //5s执行一次,可以调整,为了防止百度API接口被限制
                Thread.sleep(5 * 1000);
                if(tpaas8.getAddrLongitude()==0||tpaas8.getAddrLatitude()==0){
                    System.out.println("经纬度为空,不执行!");
                    i++;
                    continue;
                }else {
                    String CityName = getCity(tpaas8.getAddrLatitude(), tpaas8.getAddrLongitude());
                    System.out.println("CityName" + i + ":" + CityName);
                    for (BladeRegion region: bladeRegions) {
                        if (CityName.equals(region.getCityName())) {
                            tpaas8.setCity(region.getCityCode());
                            System.out.println(tpaas8);
                            tpaasCorp8Mapper.updateById(tpaas8);
                            System.out.println("更新city成功!");
                            break;
                        }
                    }
                    i++;
                }
            }
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

    }
    /**
     * 百度地图通过经纬度来获取地址,传入参数纬度lat、经度lng
     */
    public static String getCity(double lat, double lng) {
        String city="";
        try {
            JSONObject obj = getLocationInfo(lat, lng).getJSONObject("result").getJSONObject("addressComponent");
            if(obj.isNullObject()) {
                System.out.println("jsonObject 为空");
            }else {
                city=obj.getString("city");
            }
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            return city;
        }
    }
    public static JSONObject getLocationInfo(double lat, double lng) {
        String url = "https://api.map.baidu.com/reverse_geocoding/v3/?ak=自己的AK&output=" +
                "json&coordtype=wgs84ll&location="+lat+","+lng+"";
        //System.out.println(url);
        JSONObject obj = JSONObject.fromObject(loadJSON(url));
        //System.out.println(obj);
        return obj;
    }
    public static String loadJSON (String url) {
        StringBuilder json = new StringBuilder();
        try {
            URL oracle = new URL(url);
            URLConnection yc = oracle.openConnection();
            BufferedReader in = new BufferedReader(new InputStreamReader(
                    yc.getInputStream()));
            String inputLine = null;
            while ( (inputLine = in.readLine()) != null) {
                json.append(inputLine);
            }
            in.close();
        } catch (Exception e) {
        }
        return json.toString();
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

天龙真人

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

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

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

打赏作者

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

抵扣说明:

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

余额充值