package com.utils; // 声明包名 // 导入用于缓冲读取字符流的类 import java.io.BufferedReader; // 导入用于将字节流转换为字符流的类 import java.io.InputStreamReader; // 导入用于创建 HTTP 连接的类 import java.net.HttpURLConnection; // 导入用于表示 URL 的类 import java.net.URL; // 导入用于创建哈希映射的类 import java.util.HashMap; // 导入用于表示列表的接口 import java.util.List; // 导入用于表示映射的接口 import java.util.Map; // 导入用于处理 JSON 对象的类 import org.json.JSONObject; // 定义一个公共类 BaiduUtil public class BaiduUtil { // 静态方法,根据经纬度获取省市区信息 public static Map getCityByLonLat(String key, String lng, String lat) { // 将纬度和经度拼接成符合要求的字符串 String location = lat + "," + lng; try { // 拼接请求的 URL String url = "http://api.map.baidu.com/reverse_geocoding/v3/?ak=" + key + "&output=json&coordtype=wgs84ll&location=" + location; // 调用 HttpClientUtils 类的 doGet 方法发送请求并获取结果 String result = HttpClientUtils.doGet(url); // 将返回的结果字符串转换为 JSON 对象 JSONObject o = new JSONObject(result); // 创建一个用于存储地区信息的哈希映射 Map area = new HashMap<>(); // 从 JSON 对象中提取省份信息并放入映射 area.put("province", o.getJSONObject("result").getJSONObject("addressComponent").getString("province")); // 从 JSON 对象中提取城市信息并放入映射 area.put("city", o.getJSONObject("result").getJSONObject("addressComponent").getString("city")); // 从 JSON 对象中提取区域信息并放入映射 area.put("district", o.getJSONObject("result").getJSONObject("addressComponent").getString("district")); // 从 JSON 对象中提取街道信息并放入映射 area.put("street", o.getJSONObject("result").getJSONObject("addressComponent").getString("street")); // 返回存储地区信息的映射 return area; } catch (Exception e) { // 打印异常堆栈信息 e.printStackTrace(); } // 若出现异常则返回 null return null; } // 静态方法,用于获取 API 访问令牌 public static String getAuth(String ak, String sk) { // 定义获取令牌的基础 URL String authHost = "https://aip.baidubce.com/oauth/2.0/token?"; // 拼接完整的获取令牌的 URL String getAccessTokenUrl = authHost // 固定参数 grant_type + "grant_type=client_credentials" // 百度云官网获取的 API Key + "&client_id=" + ak // 百度云官网获取的 Secret Key + "&client_secret=" + sk; try { // 创建 URL 对象 URL realUrl = new URL(getAccessTokenUrl); // 打开与 URL 之间的连接 HttpURLConnection connection = (HttpURLConnection) realUrl.openConnection(); // 设置请求方法为 GET connection.setRequestMethod("GET"); // 建立连接 connection.connect(); // 获取所有响应头字段 Map> map = connection.getHeaderFields(); // 遍历所有响应头字段 for (String key : map.keySet()) { // 打印响应头字段及其对应的值 System.err.println(key + "--->" + map.get(key)); } // 创建 BufferedReader 用于读取响应内容 BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream())); // 用于存储响应结果的字符串 String result = ""; // 用于存储每行响应内容的字符串 String line; // 逐行读取响应内容并拼接 while ((line = in.readLine()) != null) { result += line; } // 打印响应结果 System.err.println("result:" + result); // 将响应结果字符串转换为 JSON 对象 org.json.JSONObject jsonObject = new org.json.JSONObject(result); // 从 JSON 对象中提取访问令牌 String access_token = jsonObject.getString("access_token"); // 返回访问令牌 return access_token; } catch (Exception e) { // 打印获取令牌失败的提示信息 System.err.printf("获取token失败!"); // 打印异常堆栈信息 e.printStackTrace(System.err); } // 若出现异常则返回 null return null; } }