diff --git a/BaiduUtil.java b/BaiduUtil.java new file mode 100644 index 0000000..a050ec9 --- /dev/null +++ b/BaiduUtil.java @@ -0,0 +1,109 @@ +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; + } +} \ No newline at end of file