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"));
|
}
|
|
|
}
|