package com.panzhihua.sangeshenbian.utils;
|
|
import com.alibaba.fastjson.JSONArray;
|
import com.alibaba.fastjson.JSONObject;
|
import lombok.extern.slf4j.Slf4j;
|
import org.springframework.web.util.UriUtils;
|
|
import java.io.BufferedReader;
|
import java.io.InputStreamReader;
|
import java.net.HttpURLConnection;
|
import java.net.URL;
|
import java.net.URLConnection;
|
import java.util.LinkedHashMap;
|
import java.util.Map;
|
|
/**
|
* @author mitao
|
* @date 2025/2/26
|
*/
|
@Slf4j
|
public class BaiduMapUtil {
|
public static String URL = "https://api.map.baidu.com/place/v2/search?";
|
|
public static String AK = "3mHKIXMArjgIkgADzOlTYp4XssNSNkwr";
|
|
public static void main(String[] args) throws Exception {
|
|
|
Map params = new LinkedHashMap<String, String>();
|
params.put("query", "银行");
|
params.put("location", "39.915,116.404");
|
params.put("radius", "2000");
|
params.put("output", "json");
|
params.put("ak", AK);
|
|
|
requestGetAK(URL, params);
|
}
|
|
/**
|
* 默认ak
|
* 选择了ak,使用IP白名单校验:
|
* 根据您选择的AK已为您生成调用代码
|
* 检测到您当前的ak设置了IP白名单校验
|
* 您的IP白名单中的IP非公网IP,请设置为公网IP,否则将请求失败
|
* 请在IP地址为xxxxxxx的计算发起请求,否则将请求失败
|
*/
|
public static JSONArray requestGetAK(String strUrl, Map<String, String> param) throws Exception {
|
if (strUrl == null || strUrl.length() <= 0 || param == null || param.size() <= 0) {
|
return new JSONArray();
|
}
|
|
StringBuffer queryString = new StringBuffer();
|
queryString.append(strUrl);
|
for (Map.Entry<?, ?> pair : param.entrySet()) {
|
queryString.append(pair.getKey() + "=");
|
// 第一种方式使用的 jdk 自带的转码方式 第二种方式使用的 spring 的转码方法 两种均可
|
// queryString.append(URLEncoder.encode((String) pair.getValue(), "UTF-8").replace("+", "%20") + "&");
|
queryString.append(UriUtils.encode((String) pair.getValue(), "UTF-8") + "&");
|
}
|
|
if (queryString.length() > 0) {
|
queryString.deleteCharAt(queryString.length() - 1);
|
}
|
|
java.net.URL url = new URL(queryString.toString());
|
System.out.println(queryString.toString());
|
URLConnection httpConnection = (HttpURLConnection) url.openConnection();
|
httpConnection.connect();
|
|
InputStreamReader isr = new InputStreamReader(httpConnection.getInputStream());
|
BufferedReader reader = new BufferedReader(isr);
|
StringBuffer buffer = new StringBuffer();
|
String line;
|
while ((line = reader.readLine()) != null) {
|
buffer.append(line);
|
}
|
reader.close();
|
isr.close();
|
System.out.println("AK: " + buffer.toString());
|
JSONObject jsonObject = JSONObject.parseObject(buffer.toString());
|
System.out.println(jsonObject);
|
if (jsonObject.getString("message").equals("ok")) {
|
return jsonObject.getJSONArray("results");
|
}
|
return new JSONArray();
|
}
|
|
public static JSONArray searchLocation(String query, String location) {
|
Map params = new LinkedHashMap<String, String>();
|
params.put("query", query);
|
params.put("location", location);
|
params.put("radius", "2000");
|
params.put("output", "json");
|
params.put("ak", AK);
|
JSONArray jsonArray;
|
try {
|
jsonArray = requestGetAK(URL, params);
|
} catch (Exception e) {
|
log.error("searchLocation error",e);
|
throw new RuntimeException(e);
|
}
|
return jsonArray;
|
}
|
}
|