xuekang
2024-05-11 bac0878349a1db23e7b420ea164e22fb9db73a99
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
package com.nuvole.util;
 
import cn.hutool.crypto.SecureUtil;
import cn.hutool.http.HttpUtil;
import lombok.extern.slf4j.Slf4j;
 
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.TreeMap;
 
/**
 * 腾讯地图工具类
 *
 * @Author: lc
 * @Date: 2019/6/28 14:57
 */
@Slf4j
public class TencentMapUtil {
 
    //腾讯地图秘钥
    public static String k = "5DUBZ-M5AKR-MZQWH-WPFLA-N4MNT-KBF44";
 
    //腾讯地图位置展示地址
    public static String mapUrl = "https://apis.map.qq.com/tools/poimarker";
 
    //逆地址解析地址
    public static String locationUrl = "https://apis.map.qq.com/ws/geocoder/v1";
 
    //签名校验sk
    public static String SK = "jCtZhEfr0u6FR8DrBqOI3XnUlZ7NTN0";
 
 
    /**
     * 经纬度解析地址
     *
     * @param lat 纬度
     * @param lng 纬度
     * @Author: lc
     * @Date: 2019/6/28 15:13
     */
    public static String getLocation(String lat, String lng) {
        //组装数据
        Map<String, Object> r = new HashMap<>();
        String url = "/ws/geocoder/v1?";
        r.put("location", lat + "," + lng);
        r.put("key", k);
        String sign = SecureUtil.md5(url + coverMap2String(r) + SK);
        r.put("sig", sign);
        String result = HttpUtil.get(locationUrl, r);
 
        return result;
    }
 
    /**
     * 由文字地址到经纬度的转换能力,并同时提供结构化的省市区地址信息。
     * @param address
     * @return
     */
    public static String geocoder(String address) {
        //组装数据
        Map<String, Object> r = new HashMap<>();
        String url = "/ws/geocoder/v1?";
        r.put("address", address);
        r.put("key", k);
        String sign = SecureUtil.md5(url + coverMap2String(r) + SK);
        r.put("sig", sign);
        String result = HttpUtil.get(locationUrl, r);
 
        return result;
    }
 
    /**
     * 将参数按key进行字典升序排列key1=value1
     */
    public static String coverMap2String(Map<String, Object> data) {
        TreeMap<String, Object> tree = new TreeMap<>();
        Iterator<Map.Entry<String, Object>> it = data.entrySet().iterator();
        while (it.hasNext()) {
            Map.Entry<String, Object> en = it.next();
            tree.put(en.getKey(), en.getValue());
        }
        it = tree.entrySet().iterator();
        StringBuffer sf = new StringBuffer(512);
        while (it.hasNext()) {
            Map.Entry<String, Object> en = it.next();
            sf.append(en.getKey() + "=" + en.getValue()
                    + "&");
        }
        return sf.substring(0, sf.length() - 1);
    }
 
 
    public static void main(String[] args) {
        System.out.println("is result:" + getLocation("34.799145", "113.649445"));
    }
 
 
}