package com.stylefeng.guns.modular.system.util; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.stylefeng.guns.core.util.SpringContextHolder; import org.apache.http.HttpEntity; import org.apache.http.client.config.RequestConfig; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.util.EntityUtils; import java.io.IOException; public class GaoDeMapUtil { public static void main(String[] args) { // 地址名称 String address = "深圳市"; // 调用自己写好的封装方法 JSONObject positionObj = getLngAndLat(address); String longitude = positionObj.getString("longitude"); String latitude = positionObj.getString("latitude"); System.out.println("经度:" + longitude); System.out.println("纬度:" + latitude); } /** * 获取GDKeyManager(非Spring环境下返回null,如main测试) */ private static GDKeyManager getKeyManager() { try { return SpringContextHolder.getBean(GDKeyManager.class); } catch (Exception e) { return null; } } /** * 根据地址查询经纬度 * key次数用完时自动切换可用key重试 * * @param address * @return */ public static JSONObject getLngAndLat(String address) { JSONObject positionObj = new JSONObject(); GDKeyManager keyManager = getKeyManager(); int maxAttempts = 5; for (int i = 0; i < maxAttempts; i++) { String key = keyManager != null ? keyManager.getKey() : GDKeyManager.FALLBACK_KEY; try { // 拼接请求高德的url String url = "http://restapi.amap.com/v3/geocode/geo?address=" + address + "&output=JSON&key=" + key; // 请求高德接口 String result = sendHttpGet(url); JSONObject resultJOSN = JSON.parseObject(result); System.out.println("高德接口返回原始数据:"); System.out.println(resultJOSN); if (GDKeyManager.isWebKeyExhausted(resultJOSN)) { if (keyManager != null) { keyManager.reportExhausted(key); } continue; } JSONArray geocodesArray = resultJOSN.getJSONArray("geocodes"); if (geocodesArray != null && geocodesArray.size() > 0) { String position = geocodesArray.getJSONObject(0).getString("location"); String[] lngAndLat = position.split(","); String longitude = lngAndLat[0]; String latitude = lngAndLat[1]; positionObj.put("longitude", longitude); positionObj.put("latitude", latitude); } break; } catch (Exception e) { e.printStackTrace(); } } return positionObj; } /** * 发送Get请求 * * @param url * @return */ public static String sendHttpGet(String url) { HttpGet httpGet = new HttpGet(url); RequestConfig defaultRequestConfig = RequestConfig.custom() .setConnectTimeout(3000) .setSocketTimeout(10000) .build(); CloseableHttpClient httpClient = HttpClients.custom().setDefaultRequestConfig(defaultRequestConfig).build(); String result = ""; try { CloseableHttpResponse closeableHttpResponse = httpClient.execute(httpGet); HttpEntity entity = closeableHttpResponse.getEntity(); result = EntityUtils.toString(entity, "UTF-8"); } catch (IOException e) { e.printStackTrace(); } return result; } }