| 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.ToolUtil; | 
| import com.stylefeng.guns.modular.system.service.IGDInterfaceService; | 
| import org.springframework.beans.factory.annotation.Autowired; | 
| import org.springframework.stereotype.Component; | 
| import org.springframework.web.client.RestTemplate; | 
|   | 
| import java.util.ArrayList; | 
| import java.util.HashMap; | 
| import java.util.List; | 
| import java.util.Map; | 
|   | 
| /** | 
|  * 高德地图的地理编码工具类 | 
|  */ | 
| @Component | 
| public class GDMapGeocodingUtil { | 
|   | 
|     private String key = "e17d799b2506d05faf7f88320a266803"; | 
|   | 
|     @Autowired | 
|     private RestTemplate restTemplate; | 
|   | 
|     @Autowired | 
|     private IGDInterfaceService gdInterfaceService; | 
|   | 
|   | 
|     /** | 
|      * 将行政区域名称转化为坐标 | 
|      * @param province | 
|      * @param city | 
|      * @param county | 
|      * @param address | 
|      * @return | 
|      */ | 
|     public Map<String, Object> geocoding(String province, String city, String county, String address){ | 
|         Map<String, Object> map = new HashMap<>(); | 
|         if(ToolUtil.isEmpty(province)){ | 
|             map.put("status", -1); | 
|             map.put("data", "省不能为空"); | 
|             return map; | 
|         } | 
|         if((ToolUtil.isEmpty(city) && ToolUtil.isNotEmpty(county)) || (ToolUtil.isEmpty(city) && ToolUtil.isNotEmpty(address))){ | 
|             map.put("status", -1); | 
|             map.put("data", "市不能为空"); | 
|             return map; | 
|         } | 
|         if((ToolUtil.isEmpty(county) && ToolUtil.isNotEmpty(address))){ | 
|             map.put("status", -1); | 
|             map.put("data", "县/区不能为空"); | 
|             return map; | 
|         } | 
|   | 
|         String url = "https://restapi.amap.com/v3/geocode/geo?key=" + key + "&output=JSON"; | 
|         url += "&address=" + province + (ToolUtil.isNotEmpty(city) ? city : "") + (ToolUtil.isNotEmpty(county) ? county : "") + (ToolUtil.isNotEmpty(address) ? address : ""); | 
|         String forObject = restTemplate.getForObject(url, String.class); | 
|         JSONObject jsonObject = JSON.parseObject(forObject); | 
|         String status = jsonObject.getString("status"); | 
|         List<String> list = new ArrayList<>(); | 
|   | 
|         gdInterfaceService.saveData("https://restapi.amap.com/v3/geocode/geo", "行政区域转经纬度"); | 
|   | 
|         if(status.equals("1")){ | 
|             JSONArray geocodes = jsonObject.getJSONArray("geocodes"); | 
|             for(int i = 0; i < geocodes.size(); i++){ | 
|                 String location = geocodes.getJSONObject(i).getString("location"); | 
|                 list.add(location); | 
|             } | 
|         } | 
|         map.put("status", 0); | 
|         map.put("data", list); | 
|         return map; | 
|     } | 
|   | 
|   | 
|   | 
|     public Map<String, Object> geocoding(String address){ | 
|         Map<String, Object> map = new HashMap<>(); | 
|         String url = "https://restapi.amap.com/v3/geocode/geo?key=" + key + "&output=JSON&address=" + address; | 
|         String forObject = restTemplate.getForObject(url, String.class); | 
|         JSONObject jsonObject = JSON.parseObject(forObject); | 
|         String status = jsonObject.getString("status"); | 
|         List<String> list = new ArrayList<>(); | 
|   | 
|         gdInterfaceService.saveData("https://restapi.amap.com/v3/geocode/geo", "行政区域转经纬度"); | 
|   | 
|         if(status.equals("1")){ | 
|             JSONArray geocodes = jsonObject.getJSONArray("geocodes"); | 
|             for(int i = 0; i < geocodes.size(); i++){ | 
|                 String location = geocodes.getJSONObject(i).getString("location"); | 
|                 list.add(location); | 
|             } | 
|         } | 
|         map.put("status", 0); | 
|         map.put("data", list); | 
|         return map; | 
|     } | 
|   | 
|   | 
|   | 
|     /** | 
|      * 根据经纬度获取行政区域信息 | 
|      * @param lon | 
|      * @param lan | 
|      * @return | 
|      * @throws Exception | 
|      */ | 
|     public Map<String, String> geocode(String lon, String lan) throws Exception{ | 
|         String url = "https://restapi.amap.com/v3/geocode/regeo?key=" + key + "&location=" + lon + "," + lan; | 
|         String forObject = restTemplate.getForObject(url, String.class); | 
|         JSONObject jsonObject = JSON.parseObject(forObject); | 
|         Map<String, String> map = new HashMap<>(); | 
|   | 
|         gdInterfaceService.saveData("https://restapi.amap.com/v3/geocode/regeo", "经纬度转行政区域"); | 
|   | 
|         if(jsonObject.getString("status").equals("1")){ | 
|             JSONObject regeocode = jsonObject.getJSONObject("regeocode"); | 
|             JSONObject addressComponent = regeocode.getJSONObject("addressComponent"); | 
|             String address = regeocode.getString("formatted_address"); | 
|             map.put("address", address); | 
|             String code = addressComponent.getString("adcode"); | 
|             String province = addressComponent.getString("province"); | 
|             String city = addressComponent.getString("city"); | 
|             String district = addressComponent.getString("district"); | 
|             map.put("province", province); | 
|             map.put("provinceCode", code.substring(0, 2) + "0000"); | 
|             map.put("city", city); | 
|             map.put("cityCode", code.substring(0, 4) + "00"); | 
|             map.put("district", district); | 
|             map.put("districtCode", code); | 
|         } | 
|         return map; | 
|     } | 
| } |