IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 通过地址获取地理相关信息 通过经纬度获取位置相关信息 根据ip获取地理坐标相关信息 -> 正文阅读

[网络协议]通过地址获取地理相关信息 通过经纬度获取位置相关信息 根据ip获取地理坐标相关信息

通过地址获取地理相关信息 通过经纬度获取位置相关信息 根据ip获取地理坐标相关信息

@Slf4j
public class StaticTools {
    /**
     * http://lbsyun.baidu.com/apiconsole/key
     * <百度开发者>用户申请注册的key,自v2开始参数修改为“ak”,之前版本参数为“key” 申请ak
     */
    final static String AK = "**************************";


    /**
     * 地理编码 URL
     */
    final static String ADDRESS_TO_LONGITUDEA_URL = "http://api.map.baidu.com/geocoding/v3/?output=json&location=showLocation";


    /**
     * 逆地理编码 URL
     */
    final static String LONGITUDE_TO_ADDRESS_URL = "http://api.map.baidu.com/reverse_geocoding/v3/?output=json&coordtype=BD09&pois=1";


    /**
     * 地理编码
     * @param address  通过地址获取地址相关信息
     *详细的位置信息
     * @return
     */
    public static AdressResult AddressTolongitudea(String address) {
        address = "浙江省杭州市西湖区";
        if (StringUtils.isBlank(address)) {
        }
        String url = ADDRESS_TO_LONGITUDEA_URL + "&ak=" + AK + "&address=" + address;
        log.info("请求url:" + url);
        HttpClient client = HttpClients.createDefault(); // 创建默认http连接
        HttpPost post = new HttpPost(url);// 创建一个post请求

        try {
            HttpResponse response = client.execute(post);// 用http连接去执行get请求并且获得http响应
            HttpEntity entity = response.getEntity();// 从response中取到响实体
            String result = EntityUtils.toString(entity);// 把响应实体转成文本
            JSONObject resultsJson = JSONObject.parseObject(result); //返回值为标准json格式
            AdressResult adressResult = JSONObject.toJavaObject(resultsJson, AdressResult.class);

            log.info("返回信息:" + adressResult.toString());
            // JSON转对象
            return  adressResult;
        } catch (Exception e) {

            log.error("地理编码[异常],", e);
            return null;
        }
    }

    /**
     * 逆地理编码
     *通过经纬度获取位置相关信息
     * @param lat 纬度
     * @param lng 经度
     * @return
     */
    public static LongitudeToAddress longitudeToAddress(float lat, float lng) {
        lng=Float.valueOf("120.08191131675022");
        lat=Float.valueOf("30.32270208092518");
        String url = LONGITUDE_TO_ADDRESS_URL + "&ak=" + AK + "&location=" + lat + "," + lng;
        log.info("请求url:" + url);
        HttpClient client = HttpClients.createDefault(); // 创建默认http连接
        HttpPost post = new HttpPost(url);// 创建一个post请求

        try {

            HttpResponse response = client.execute(post);// 用http连接去执行get请求并且获得http响应
            HttpEntity entity = response.getEntity();// 从response中取到响实体
            String results = EntityUtils.toString(entity);// 把响应实体转成文本
            JSONObject resultsJson = JSONObject.parseObject(results); //返回值为标准json格式
            LongitudeToAddress adressConvert = JSONObject.toJavaObject(resultsJson, LongitudeToAddress.class);
            log.info("返回信息:" + results);
            // JSON转对象
            return adressConvert;
        } catch (Exception e) {
            log.error("逆地理编码[异常],", e);
            return null;
        }

    }

    /**
     * 公网ip
     * 根据ip获取地理坐标相关信息
     * @return
     */
    public static Location address(String ip) {
         try {
            URL url = new URL("http://api.map.baidu.com/location/ip?ip=" + ip + "&ak=" + AK +
                    "&coor=bd09ll");
            InputStream inputStream = url.openStream();
            InputStreamReader inputReader = new InputStreamReader(inputStream);
            BufferedReader reader = new BufferedReader(inputReader);
            String results = reader.readLine();
            if (!StringUtils.isNotEmpty(results)) {
                return null;
            }
            JSONObject resultsJson = JSONObject.parseObject(results); //返回值为标准json格式
            //josn转对象
            IpReturnDateDto ipReturnDateDto = JSONObject.toJavaObject(resultsJson, IpReturnDateDto.class);
            //经纬度
            Float y = Float.valueOf(ipReturnDateDto.getContent().getPoint().getY());
            Float x = Float.valueOf(ipReturnDateDto.getContent().getPoint().getX());
            Location location=new Location(x,y);
            return location;
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

    public static void main(String[] args) throws IOException {
        //通过ip获取经纬度
        address(getNowIP());
        //通过位置获取经纬度
        AddressTolongitudea(null);
        //通过经纬度获取位置
        longitudeToAddress(0,0);
    }
    
    // 获取公网ip方法
    private static String getNowIP() throws IOException {
        String ip = null;
        String objWebURL = "https://bajiu.cn/ip/";
        BufferedReader br = null;
        try {
            URL url = new URL(objWebURL);
            br = new BufferedReader(new InputStreamReader(url.openStream()));
            String s = "";
            String webContent = "";
            while ((s = br.readLine()) != null) {
                if (s.indexOf("互联网IP") != -1) {
                    ip = s.substring(s.indexOf("'") + 1, s.lastIndexOf("'"));
                    break;
                }
            }
        } finally {
            if (br != null)
                br.close();
        }
        if (StringUtils.isEmpty(ip)) {
            throw new RuntimeException();
        }
        return ip;
    }
}


转换相关类

通过地址获取地理相关信息

@Data
@AllArgsConstructor
@NoArgsConstructor
public class AdressResult {
    private String level;
    private Integer precise;
    private Integer confidence;
    private Integer comprehension;
    private Integer status;
    private Location location;
}
@Data
@AllArgsConstructor
@NoArgsConstructor
public class AddressTolongitudea {
    private Integer status;
    private AdressResult result;
}

通过经纬度获取位置相关信息

@Data
@AllArgsConstructor
@NoArgsConstructor
public class LongitudeToAddress {
    private Integer status;
    private LongitudeaResult result;
}

@Data
@AllArgsConstructor
@NoArgsConstructor
public class LongitudeaResult {
    private String formatted_address;
    private String business;
    private String sematic_description;
    private Integer cityCode;
    private Object roads;
    private Location location;
    private Object poiRegions;
    private Object pois;
    private AddressComponent addressComponent;
}

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Location {
    private Float lng;
    private Float lat;
}

@Data
@AllArgsConstructor
@NoArgsConstructor
public class AddressComponent {
    private Integer city_level;
    private String country;
    private String town;
    private String distance;
    private String city;
    private String adcode;
    private String country_code_iso;
    private String country_code_iso2;
    private String country_code;
    private String town_code;
    private String province;
    private String street;
    private String district;
    private String street_number;
    private String direction;
}
  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2022-04-01 00:30:35  更:2022-04-01 00:30:57 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 5:45:11-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码