Initial commit: 玄学推演项目

This commit is contained in:
H1d3rOne committed 2026-03-05 20:27:59 +08:00
commit 165494d98e
107 files changed
+50801

No files matched your search

+177
View File
@@ -0,0 +1,177 @@
package xuan.utils;
import com.alibaba.fastjson.JSONObject;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.validator.routines.InetAddressValidator;
import java.net.URL;
import java.util.Map;
import java.util.HashMap;
import java.io.BufferedReader;
import java.net.URLConnection;
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;
/**
* 百度地图定位工具
*
* @author 善待
*/
public class BaiduMapsUtil {
/* API地址:https://lbsyun.baidu.com/faq/api?title=webapi */
/**
* 开发者密钥
*/
private static final String ak = ""; // 密钥申请地址:https://lbsyun.baidu.com/apiconsole/key#/home
//*******************************************************************************************************************************
/**
* 通过地区获取经纬度
*
* @param address 地区
* @return 经纬度
*/
public static Map<String, Double> getLngAndLat(String address) {
/* 接口文档地址:https://lbsyun.baidu.com/faq/api?title=webapi/guide/webservice-geocoding-base */
// 1、参数校验
if (StringUtils.isBlank(ak)) throw new NullPointerException("请填写百度开发者密钥");
if (StringUtils.isBlank(address)) throw new NullPointerException("请填写地区");
// 2、发送URL请求
String url = "https://api.map.baidu.com/geocoding/v3/?address=" + address + "&output=json&ak=" + ak;
JSONObject data = sendUrl(url);
// 3、获取数据
Map<String, Double> map = new HashMap<>();
if (data.get("status").toString().equals("0")) {
map.put("lng", data.getJSONObject("result").getJSONObject("location").getDouble("lng")); // 经度
map.put("lat", data.getJSONObject("result").getJSONObject("location").getDouble("lat")); // 纬度
} else {
throw new NullPointerException("定位失败");
}
return map;
}
/**
* 通过经纬度获取地区
*
* @param lng 经度
* @param lat 纬度
* @return 地区
*/
public static String getAddress(String lng, String lat) {
/* 接口文档地址:https://lbsyun.baidu.com/faq/api?title=webapi/guide/webservice-geocoding-abroad-base */
// 1、参数校验
if (StringUtils.isBlank(ak)) throw new NullPointerException("请填写百度开发者密钥");
if (StringUtils.isBlank(lng) || StringUtils.isBlank(lat)) throw new NullPointerException("请填完善经纬度");
// 2、发送URL请求
String url = "https://api.map.baidu.com/reverse_geocoding/v3/?location=" + lat + "," + lng + "&output=json&coordtype=wgs84ll&extensions_poi=1&extensions_town=true&ak=" + ak;
JSONObject data = sendUrl(url);
// 3、获取数据
String address;
if (data.get("status").toString().equals("0")) {
address = data.getJSONObject("result").getString("formatted_address"); // 标准的结构化地址
} else {
throw new NullPointerException("定位失败");
}
return address;
}
/**
* 通过机器IP定位获取地区,不支持ipv6(若机器IP为空,则根据发送请求的机器IP定位)
*
* @param ip 机器IP(如:127.0.0.1)
* @return 地区
*/
public static String getAddressToIp(String ip) {
/* 接口文档地址:https://lbsyun.baidu.com/faq/api?title=webapi/ip-api-base */
// 1、参数校验
if (StringUtils.isBlank(ak)) throw new NullPointerException("请填写百度开发者密钥");
if (StringUtils.isNotBlank(ip) && checkIp(ip)) {
if ("localhost".equals(ip) || "127.0.0.1".equals(ip)) {
ip = "";
}
} else {
ip = "";
}
// 2、发送URL请求
String url = "https://api.map.baidu.com/location/ip?ip=" + ip + "&coor=bd09ll&&ak=" + ak;
JSONObject data = sendUrl(url);
// 3、获取数据
String address;
if (data.get("status").toString().equals("0")) {
address = data.getJSONObject("content").getString("address"); // 简要地址信息
} else {
throw new NullPointerException("定位失败");
}
return address;
}
//-------------------------------------------------------------------------------------------------------------------------------
/**
* 机器IP校验
*
* @param ip 机器IP(ipv4)
* @return true:格式正确。false:格式错误
*/
private static boolean checkIp(String ip) {
boolean isFlag = true;
InetAddressValidator validator = InetAddressValidator.getInstance();
if (!validator.isValidInet4Address(ip)) {
isFlag = false;
}
return isFlag;
}
/**
* 发送URL请求
*
* @param url URL路径
* @return 数据
*/
private static JSONObject sendUrl(String url) {
StringBuilder stringBuilder = new StringBuilder();
try {
URL oracle = new URL(url);
URLConnection uc = oracle.openConnection();
InputStreamReader isr = new InputStreamReader(uc.getInputStream(), StandardCharsets.UTF_8);
BufferedReader br = new BufferedReader(isr);
String inputLine;
while (null != (inputLine = br.readLine())) {
stringBuilder.append(inputLine);
}
br.close();
} catch (Exception e) {
throw new NullPointerException(e.getMessage());
}
return JSONObject.parseObject(stringBuilder.toString());
}
}