diff --git a/ebike-maintenance/src/main/java/com/cdzy/ebikemaintenance/utils/GeoCodingUtil.java b/ebike-maintenance/src/main/java/com/cdzy/ebikemaintenance/utils/GeoCodingUtil.java index a3c2a044..c5e722eb 100644 --- a/ebike-maintenance/src/main/java/com/cdzy/ebikemaintenance/utils/GeoCodingUtil.java +++ b/ebike-maintenance/src/main/java/com/cdzy/ebikemaintenance/utils/GeoCodingUtil.java @@ -11,6 +11,7 @@ import java.util.Arrays; /** * 地址解析、反解析工具类。 + * 目前实现的高德地图webservice,位置是[经度, 维度], 腾讯地图webservice的位置是[维度, 经度] * * @author dingchao * @date 2025/4/3 @@ -19,8 +20,16 @@ import java.util.Arrays; @Slf4j @Service public class GeoCodingUtil { - private final static String LOCATION_TO_ADDRESS = "location"; - private final static String ADDRESS_TO_LOCATION = "address"; + // webservice接口;腾讯地图webservice 为空 + private final static String LOCATION_TO_ADDRESS = "regeo"; + private final static String ADDRESS_TO_LOCATION = "geo"; + private final static String STATUS_KEY = "status"; + // 结果键 高德地图webservice 为geocodes、regeocode,腾讯地图webservice为result + private final static String ADDRESS_RESULT_KEY = "regeocode"; + private final static String LOCATION_RESULT_KEY = "geocodes"; + //private final static String RESULT_KEY = "geocodes"; + // 成功状态码 高德地图webservice 为1,腾讯地图webservice为0 + private final static int CODE_STATUS_SUCCESS = 1; private final String url; private final String accessKey; @@ -47,15 +56,16 @@ public class GeoCodingUtil { */ public String getLocationToAddress(JSONObject location) { Request request = new Request.Builder() - .url(url + "/?"+LOCATION_TO_ADDRESS+"=" + String.format("%f,%f", location.getDouble("lat"), location.getDouble("lng")) + "&key=" + accessKey) + .url(url + "/"+LOCATION_TO_ADDRESS + "?"+"location=" + String.format("%f,%f", location.getDouble("lng"), location.getDouble("lat")) + "&key=" + accessKey) .build(); try(Response response = client.newCall(request).execute()) { if(response.isSuccessful()) { if (response.body()!= null) { String result = response.body().string(); JSONObject jsonObject = JSONObject.parseObject(result); - if (jsonObject.getInteger("status") == 0) { - return jsonObject.getJSONObject("result").getJSONObject("formatted_addresses").getString("standard_address"); + if (jsonObject.getInteger(STATUS_KEY) == CODE_STATUS_SUCCESS) { + //return jsonObject.getJSONObject(RESULT_KEY).getJSONObject("formatted_addresses").getString("standard_address"); + return jsonObject.getJSONObject(ADDRESS_RESULT_KEY).getString("formatted_address"); } logError("地址解析失败==>{}", jsonObject.getString("message")); return null; @@ -79,20 +89,23 @@ public class GeoCodingUtil { */ public JSONObject getLocationToAddressDetails(JSONObject location) { Request request = new Request.Builder() - .url(url + "/?"+LOCATION_TO_ADDRESS+"=" + String.format("%f,%f", location.getDouble("lat"), location.getDouble("lng")) + "&key=" + accessKey) + .url(url + "/"+LOCATION_TO_ADDRESS + "?location=" + String.format("%f,%f", location.getDouble("lng"), location.getDouble("lat")) + "&key=" + accessKey) .build(); try(Response response = client.newCall(request).execute()) { if(response.isSuccessful()) { if (response.body()!= null) { String result = response.body().string(); JSONObject jsonObject = JSONObject.parseObject(result); - if (jsonObject.getInteger("status") == 0) { + if (jsonObject.getInteger(STATUS_KEY) == CODE_STATUS_SUCCESS) { JSONObject address = new JSONObject(); - String detail = jsonObject.getJSONObject("result").getJSONObject("formatted_addresses").getString("standard_address"); + //String detail = jsonObject.getJSONObject("result").getJSONObject("formatted_addresses").getString("standard_address"); + String detail = jsonObject.getJSONObject(ADDRESS_RESULT_KEY).getString("formatted_address"); address.put("detail", detail); - String district = jsonObject.getJSONObject("result").getJSONObject("ad_info").getString("district"); + //String district = jsonObject.getJSONObject("result").getJSONObject("ad_info").getString("district"); + String district = jsonObject.getJSONObject(ADDRESS_RESULT_KEY).getJSONObject("addressComponent").getString("district"); address.put("district", district); - String adcode = jsonObject.getJSONObject("result").getJSONObject("ad_info").getString("adcode"); + //String adcode = jsonObject.getJSONObject("result").getJSONObject("ad_info").getString("adcode"); + String adcode = jsonObject.getJSONObject(ADDRESS_RESULT_KEY).getJSONObject("addressComponent").getString("adcode"); address.put("adcode", adcode); return address; } @@ -118,15 +131,21 @@ public class GeoCodingUtil { */ public JSONObject getAddressToLocation(String address) { Request request = new Request.Builder() - .url(url + "/?"+ADDRESS_TO_LOCATION+"=" + address + "&key=" + accessKey) + .url(url + "/"+ADDRESS_TO_LOCATION + "?address=" + address + "&key=" + accessKey) .build(); try(Response response = client.newCall(request).execute()) { if(response.isSuccessful()) { if (response.body() != null) { String result = response.body().string(); JSONObject jsonObject = JSONObject.parseObject(result); - if (jsonObject.getInteger("status") == 0) { - return jsonObject.getJSONObject("result").getJSONObject("location"); + if (jsonObject.getInteger(STATUS_KEY) == CODE_STATUS_SUCCESS) { + //return jsonObject.getJSONObject(LOCATION_RESULT_KEY).getJSONObject("location"); + String loc = jsonObject.getJSONArray(LOCATION_RESULT_KEY).getJSONObject(0).getString("location"); + String[] locArr = loc.split(","); + JSONObject location = new JSONObject(); + location.put("lng", Double.valueOf(locArr[0])); + location.put("lat", Double.valueOf(locArr[1])); + return location; }else{ logError("位置解析失败==>{}", jsonObject.getString("message")); return null; diff --git a/ebike-maintenance/src/main/resources/application-dev.yml b/ebike-maintenance/src/main/resources/application-dev.yml index 6e979c01..835f55d7 100644 --- a/ebike-maintenance/src/main/resources/application-dev.yml +++ b/ebike-maintenance/src/main/resources/application-dev.yml @@ -3,7 +3,7 @@ spring: name: ebike-maintenance cloud: nacos: - server-addr: 192.168.2.226:8848 # nacos + server-addr: 127.0.0.1:8848 # nacos username: nacos password: nacos jackson: @@ -84,5 +84,5 @@ minio: secret-key: Zg6X6j0kgUT1fGsGSgoCZWu6fgL8F3Kw1FfoX4yJ # 私有密钥 bucket-name: test geo-coding: - api-url: https://apis.map.qq.com/ws/geocoder/v1 - access-key: BECBZ-EJIEQ-LUU5N-B5ISQ-3TLMZ-BXFLG + api-url: https://restapi.amap.com/v3/geocode + access-key: 14c06210d417b30fb8a66d27b0b31a62