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 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 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 data) { TreeMap tree = new TreeMap<>(); Iterator> it = data.entrySet().iterator(); while (it.hasNext()) { Map.Entry en = it.next(); tree.put(en.getKey(), en.getValue()); } it = tree.entrySet().iterator(); StringBuffer sf = new StringBuffer(512); while (it.hasNext()) { Map.Entry 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")); } }