ProvinceUtils.java 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. package com.fdkankan.manage.util;
  2. import cn.hutool.http.HttpUtil;
  3. import com.alibaba.fastjson.JSON;
  4. import com.alibaba.fastjson.JSONArray;
  5. import com.alibaba.fastjson.JSONObject;
  6. import com.fdkankan.manage.vo.response.AddressComponent;
  7. import lombok.extern.slf4j.Slf4j;
  8. import java.io.UnsupportedEncodingException;
  9. import java.net.URL;
  10. import java.net.URLEncoder;
  11. import java.util.Objects;
  12. @Slf4j
  13. public class ProvinceUtils {
  14. public static void main(String[] args) {
  15. //{
  16. // "altitude": 22.34735107421875,
  17. // "horizontalAccuracy": 4.9379683,
  18. // "latitude": 22.36707762,
  19. // "longitude": 113.59580565,
  20. // "timestamp": 1638779141699,
  21. // "verticalAccuracy": 7.5588307
  22. //}
  23. AddressComponent addressComponent = pointsToLocationsAll("113.595673,22.36707762");
  24. System.out.println(addressComponent);
  25. }
  26. private static String getProvince(String log, String lat ){
  27. //lat 小 log 大
  28. //参数解释: 纬度,经度 type 001 (100代表道路,010代表POI,001代表门址,111可以同时显示前三项)
  29. String urlString = "http://gc.ditu.aliyun.com/regeocoding?l="+lat+","+log+"&type=010";
  30. String res = "";
  31. try {
  32. URL url = new URL(urlString);
  33. java.net.HttpURLConnection conn = (java.net.HttpURLConnection)url.openConnection();
  34. conn.setDoOutput(true);
  35. conn.setRequestMethod("POST");
  36. java.io.BufferedReader in = new java.io.BufferedReader(new java.io.InputStreamReader(conn.getInputStream(),"UTF-8"));
  37. String line;
  38. while ((line = in.readLine()) != null) {
  39. res += line+"\n";
  40. }
  41. in.close();
  42. } catch (Exception e) {
  43. System.out.println("error in wapaction,and e is " + e.getMessage());
  44. }
  45. System.out.println(res);
  46. JSONObject jsonObject = JSONObject.parseObject(res);
  47. JSONArray jsonArray = JSON.parseArray(jsonObject.getString("addrList"));
  48. JSONObject jsonObject1 = jsonArray.getJSONObject(0);
  49. String arr[] = jsonObject1.get("admName").toString().split(",");
  50. System.out.println(arr[0]);
  51. return arr[0];
  52. }
  53. /**
  54. * 根据经纬度转地址
  55. * @param points
  56. * @return
  57. */
  58. public static String amapKey = "3609daa52e8ae4493393292213e2fb98";
  59. //经度和纬度用","分割,经度在前,纬度在后,经纬度小数点后不得超过6位。多个坐标对之间用”|”进行分隔最多支持40对坐标。
  60. public static AddressComponent pointsToLocationsAll(String points) {
  61. //将GPS坐标转化为高德地图坐标的URL后再去请求位置信息
  62. try {
  63. points = URLEncoder.encode(points,"UTF-8");
  64. String convertUrl =
  65. "https://restapi.amap.com/v3/assistant/coordinate/convert?locations="+points+"&coordsys=gps&key="+amapKey;
  66. //GPS坐标转为高德地图坐标
  67. String s = HttpUtil.get(convertUrl);
  68. JSONObject jsonObject = JSON.parseObject(s);
  69. String status = (String) jsonObject.get("status");
  70. if(Objects.equals(status,"0")){
  71. throw new RuntimeException("远程调用经纬度转化出错");
  72. }
  73. String locations = (String) jsonObject.get("locations");
  74. String formattedAmapPoints = null;
  75. try {
  76. formattedAmapPoints = URLEncoder.encode(locations.replaceAll(";", "|"), "UTF-8");
  77. } catch (UnsupportedEncodingException e) {
  78. throw new RuntimeException(e.getMessage());
  79. }
  80. String locationUrl = "https://restapi.amap.com/v3/geocode/regeo?output=json&location="+formattedAmapPoints+"&key="+amapKey+"&radius=1000&batch=true";
  81. String s1 = HttpUtil.get(locationUrl);
  82. System.out.println(s1);
  83. //获取转地址后的结果
  84. JSONObject parseObject = JSON.parseObject(s1);
  85. String status1 = (String) parseObject.get("status");
  86. if(Objects.equals(status1,"0")){
  87. throw new RuntimeException("根据经纬度获取具体地址出错");
  88. }
  89. JSONArray regeocodes = parseObject.getJSONArray("regeocodes");
  90. String formattedAddress = "";
  91. AddressComponent addressComponent = null;
  92. for (Object regeocode : regeocodes) {
  93. JSONObject object = (JSONObject) regeocode;
  94. formattedAddress = (String)object.get("formatted_address");
  95. JSONObject jsonObject1 = (JSONObject) object.get("addressComponent");
  96. addressComponent = JSONObject.toJavaObject(jsonObject1, AddressComponent.class);
  97. }
  98. log.info("经纬度【{}】转化为具体地点【{}】",points,formattedAddress);
  99. return addressComponent;
  100. } catch (Exception e) {
  101. log.info("经纬度转换错误error:{}",e);
  102. }
  103. return null;
  104. }
  105. }