mitao
2025-02-26 32fa3021659780f5493c4f9a9d5f5249b01eb8a8
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
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;
    }
}