|
|
|
@ -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<String, String> 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<String, String> 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<String, List<String>> 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;
|
|
|
|
|
}
|
|
|
|
|
}
|