package com.fuyuanshen.equipment.utils.map;

import com.alibaba.fastjson2.JSONObject;
import lombok.Data;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.net.URL;

/**
 * 根据经纬度获取地址信息工具类
 *
 * @author: 默苍璃
 * @date: 2025-07-2615:59
 */
@Data
public class GetAddressFromLatUtil {
    private final static Logger logger = LoggerFactory.getLogger(GetAddressFromLatUtil.class);

    public static void main(String[] args) {

        double[] doubles = LngLonUtil.gps84_To_Gcj02(22.6826096, 113.986969);
        System.out.println(doubles[0]);
        System.out.println(doubles[1]);

        // lat 31.2990170   纬度  39.909 116.40,39.92  113.39039,23.131798  113.97556991,22.67075292
        // log 121.3466440    经度 116.39742  113.9751543,22.5603342
        String add = GetAddressFromLatUtil.getAdd(String.valueOf(doubles[1]), String.valueOf(doubles[0]));
        logger.info(add);

//        System.out.println(System.currentTimeMillis());
    }

    /**
     * 根据经纬度获取省市区
     *
     * @param log
     * @param lat
     * @return
     */
    public static String getAdd(String log, String lat) {
        // lat 小  log  大
        // 注意key是在高德/百度开放平台申请的key,高德地图具体获得key的步骤请查看网址:https://developer.amap.com/api/webservice/guide/create-project/get-key
        // 百度地图开放平台的网址：https://lbsyun.baidu.com/index.php 在该平台注册即可
        String key = "84a12a692ae378effdf741e16d584cd3";
        // 地理编码 ： 详细中文地址转为经纬度信息 请求地址：	https://restapi.amap.com/v3/geocode/geo?parameters
        // 地理逆编码：经纬度信息转中文地址信息 请求地址：https://restapi.amap.com/v3/geocode/regeo?parameters
        // 第一个是高德的逆地理编码 第二个是百度的逆地理编码  均为get请求
        String urlString = "https://restapi.amap.com/v3/geocode/regeo?location=" + log + "," + lat + "&extensions=base&batch=false&roadlevel=0&key=" + key;
        // String urlString = "https://api.map.baidu.com/reverse_geocoding/v3/?ak="+key+"&output=json&coordtype=wgs84ll&location="+lat+","+log;

        String res = "";
        try {
            URL url = new URL(urlString);
            java.net.HttpURLConnection conn = (java.net.HttpURLConnection) url.openConnection();
            conn.setDoOutput(true);
            conn.setRequestMethod("POST");
            java.io.BufferedReader in = new java.io.BufferedReader(new java.io.InputStreamReader(conn.getInputStream(), "UTF-8"));
            String line;
            while ((line = in.readLine()) != null) {
                res += line + "\n";
            }
            in.close();
            // 解析结果
            JSONObject jsonObject = JSONObject.parseObject(res);
            logger.info(jsonObject.toJSONString());
            // 这个是高德的
            JSONObject jsonObject1 = jsonObject.getJSONObject("regeocode");
            // 这个是百度的
            // JSONObject jsonObject1 = jsonObject.getJSONObject("result");
            res = jsonObject1.getString("formatted_address");
        } catch (Exception e) {
            logger.error("获取地址信息异常{}", e.getMessage());
            return null;
        }
        System.out.println("通过API获取到具体位置:" + res);
        return res;
    }

}

