mitao
2025-03-18 aff4d9bea541a179f7bd0c4b318a864c54bd7ca4
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
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
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 GEOCONV_URL = "https://api.map.baidu.com/geoconv/v2/?";
 
    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);
        System.out.println(geoconv("116.390838,39.916245").toJSONString());
    }
 
    /**
     * 默认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;
    }
    public static JSONObject requestGetAKObject(String strUrl, Map<String, String> param) throws Exception {
        if (strUrl == null || strUrl.length() <= 0 || param == null || param.size() <= 0) {
            return new JSONObject();
        }
 
        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();
        return JSONObject.parseObject(buffer.toString());
    }
    public static JSONObject geoconv(String coords) throws Exception {
        Map params = new LinkedHashMap<String, String>();
        params.put("coords", coords);
        params.put("output", "json");
        params.put("model", "2");
        params.put("ak", AK);
        return requestGetAKObject(GEOCONV_URL, params);
 
    }
 
}