|
@@ -0,0 +1,65 @@
|
|
|
+package com.ruoyi.common;
|
|
|
+
|
|
|
+import com.alibaba.fastjson.JSON;
|
|
|
+import com.alibaba.fastjson.JSONArray;
|
|
|
+import com.alibaba.fastjson.JSONObject;
|
|
|
+import com.ruoyi.common.monitoringAlarms.utils.HttpUtil;
|
|
|
+import org.springframework.beans.factory.annotation.Value;
|
|
|
+import org.springframework.context.annotation.Configuration;
|
|
|
+
|
|
|
+import java.io.UnsupportedEncodingException;
|
|
|
+import java.net.URLEncoder;
|
|
|
+import java.util.Objects;
|
|
|
+
|
|
|
+@Configuration
|
|
|
+public class MapUtils {
|
|
|
+
|
|
|
+ @Value("${spring.gaode.key}")
|
|
|
+ private String key;
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 坐标转地址
|
|
|
+ * @param points 坐标
|
|
|
+ * @return 地址
|
|
|
+ * @throws Exception
|
|
|
+ */
|
|
|
+ public String pointsToLocationsAll(String points) throws Exception {
|
|
|
+
|
|
|
+ //将GPS坐标转化为高德地图坐标的URL后再去请求位置信息
|
|
|
+ try {
|
|
|
+ points = URLEncoder.encode(points, "UTF-8");
|
|
|
+ } catch (UnsupportedEncodingException e) {
|
|
|
+ throw new RuntimeException(e.getMessage());
|
|
|
+ }
|
|
|
+ String convertUrl = "https://restapi.amap.com/v3/assistant/coordinate/convert?locations=" + points + "&coordsys=gps&key=" + key;
|
|
|
+ //GPS坐标转为高德地图坐标
|
|
|
+ String s = HttpUtil.get(convertUrl);
|
|
|
+ JSONObject jsonObject = JSON.parseObject(s);
|
|
|
+ String status = (String) jsonObject.get("status");
|
|
|
+ if (Objects.equals(status, "0")) {
|
|
|
+ throw new RuntimeException("远程调用经纬度转化出错");
|
|
|
+ }
|
|
|
+ String locations = (String) jsonObject.get("locations");
|
|
|
+ String formattedAmapPoints = null;
|
|
|
+ try {
|
|
|
+ formattedAmapPoints = URLEncoder.encode(locations.replaceAll(";", "|"), "UTF-8");
|
|
|
+ } catch (UnsupportedEncodingException e) {
|
|
|
+ throw new RuntimeException(e.getMessage());
|
|
|
+ }
|
|
|
+ String locationUrl = "https://restapi.amap.com/v3/geocode/regeo?output=json&location=" + formattedAmapPoints + "&key=" + key + "&radius=1000&batch=true";
|
|
|
+ String s1 = HttpUtil.get(locationUrl);
|
|
|
+ //获取转地址后的结果
|
|
|
+ JSONObject parseObject = JSON.parseObject(s1);
|
|
|
+ String status1 = (String) parseObject.get("status");
|
|
|
+ if (Objects.equals(status1, "0")) {
|
|
|
+ throw new RuntimeException("根据经纬度获取具体地址出错");
|
|
|
+ }
|
|
|
+ JSONArray regeocodes = parseObject.getJSONArray("regeocodes");
|
|
|
+ String formattedAddress = "";
|
|
|
+ for (Object regeocode : regeocodes) {
|
|
|
+ JSONObject object = (JSONObject) regeocode;
|
|
|
+ formattedAddress = (String) object.get("formatted_address");
|
|
|
+ }
|
|
|
+ return formattedAddress;
|
|
|
+ }
|
|
|
+}
|