TransfromDataTool.java 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. package com.skyversation.poiaddr.addquery;
  2. import com.alibaba.fastjson.JSONArray;
  3. import com.alibaba.fastjson.JSONObject;
  4. import com.skyversation.poiaddr.bean.AddressResult;
  5. import com.skyversation.poiaddr.util.AddressTools;
  6. import com.skyversation.poiaddr.util.SplitAddress;
  7. import com.skyversation.poiaddr.util.status.AddressResultEnum;
  8. import java.util.ArrayList;
  9. import java.util.HashSet;
  10. import java.util.Set;
  11. public class TransfromDataTool {
  12. public static void main(String[] args) {
  13. // 搜索地址
  14. String searchAddress = "王家浜路130号101室";
  15. System.out.println("》》搜索地址:" + searchAddress);
  16. System.out.println();
  17. // 返回的参考地址列表
  18. Set<String> arrayAddress = new HashSet<>();
  19. arrayAddress.add("旗杆村平桥王家浜路658号");
  20. arrayAddress.add("王家浜路与光星路交叉口东200米");
  21. arrayAddress.add("上海市松江区叶榭镇四村村701号102室");
  22. System.out.println("》》返回参考地址列表:" + arrayAddress);
  23. System.out.println();
  24. // 新建JSONArray对象
  25. JSONArray array = new JSONArray();
  26. // 把Set对象转换为接口接收的JSONArray对象
  27. for (String key : arrayAddress) {
  28. JSONObject item_ = new JSONObject();
  29. item_.put("sourceaddress", key);
  30. array.add(item_);
  31. }
  32. JSONArray reData = AddressTools.getInstance().findBestMatch2(searchAddress, array, "sourceaddress");
  33. System.out.println("------------------打分后从高到低显示》》》》》》》》》》》》");
  34. System.out.println();
  35. for (int i = 0; i < reData.size(); i++) {
  36. JSONObject jo = reData.getJSONObject(i);
  37. System.out.println("返回参考地址:" + jo.getString("sourceaddress") + "\t打分:" + jo.getString("总分"));
  38. }
  39. }
  40. public AddressResult dbResultToResult(SplitAddress SplitAddress, String searchAddress, JSONArray array) {
  41. AddressResult result = new AddressResult();
  42. try {
  43. if (array == null || array.size() < 1) {
  44. AddressResult addressResult = new AddressResult();
  45. addressResult.setCode(AddressResultEnum.RESULT_NULL);
  46. return result;
  47. }
  48. // 打分(应该从大到小)
  49. JSONArray resultArray = AddressTools.getInstance().findBestMatch2(searchAddress, array, "sourceaddress");
  50. for (int i = 0; i < resultArray.size(); i++) {
  51. JSONObject jsonObject = resultArray.getJSONObject(i);
  52. if (jsonObject != null && jsonObject.containsKey("总分") && jsonObject.get("总分") != null && !jsonObject.getString("总分").isEmpty()) {
  53. // TODO 映射输出
  54. AddressResult.ContentBean content = AddressTools.getInstance().addressToContentBean(SplitAddress, jsonObject);
  55. if (result.getData() == null) {
  56. result.setData(new ArrayList<>());
  57. }
  58. result.getData().add(content);
  59. }
  60. }
  61. } catch (Exception e) {
  62. e.printStackTrace();
  63. System.err.println("gdV3ResultToResult err:" + e);
  64. }
  65. result.setCode(AddressResultEnum.GDV3_SUCCESS);
  66. result.setMessage("数据库查询成功!");
  67. return result;
  68. }
  69. public static AddressResult szxResultToResult(JSONObject json, String searchAddress) {
  70. AddressResult result = new AddressResult();
  71. JSONArray array = json.getJSONArray("result");
  72. if (array == null || array.size() < 1) {
  73. result.setCode(AddressResultEnum.RESULT_NULL);
  74. return result;
  75. }
  76. JSONArray jsonArray = com.skyversation.poiaddr.util.AddressTools.getInstance().findBestMatch2(searchAddress, array, "address");
  77. if (jsonArray.size() > 0) {
  78. JSONObject jsonObject = jsonArray.getJSONObject(0);
  79. if (jsonObject.containsKey("总分") && jsonObject.get("总分") != null && !jsonObject.getString("总分").isEmpty()) {
  80. AddressResult.ContentBean content = new AddressResult.ContentBean();
  81. content.setScore(jsonObject.getString("总分"));
  82. content.setSearchAddress(jsonObject.getString("searchAddress"));
  83. content.setType(jsonObject.getString("type_name"));
  84. content.setAddress(jsonObject.getString("address"));
  85. content.setName(jsonObject.getString("name"));
  86. // 使用分词方法得到区名是镇名
  87. content.setCityname(AddressTools.parseAddressCJ(jsonObject.getString("address"))[1]);
  88. double[] points = new double[]{jsonObject.getJSONObject("location").getDouble("lng"),
  89. jsonObject.getJSONObject("location").getDouble("lat")};
  90. content.setLon(points[0]);
  91. content.setLat(points[1]);
  92. if (jsonObject.get("point_x") != null && jsonObject.get("point_y") != null) {
  93. content.setLocation(jsonObject.getDouble("point_x") + "," + jsonObject.getDouble("point_y"));
  94. }
  95. content.setAdname(AddressTools.parseAddressCJ(jsonObject.getString("address"))[2]);
  96. if (jsonObject.containsKey("ext_data")) {
  97. JSONObject extData = jsonObject.getJSONObject("ext_data");
  98. if (extData.containsKey("region_jw") && !extData.getString("region_jw").isEmpty()) {
  99. content.setCommunity(extData.getString("region_jw"));
  100. }
  101. // 如果评分大于1.6,那么就使用接口返回的街镇,否则使用源搜索地址的街镇
  102. if (jsonObject.getString("总分").contains("rule_") || Float.parseFloat(jsonObject.getString("总分")) > 1.6) {
  103. if (extData.containsKey("region_jd") && !extData.getString("region_jd").isEmpty()) {
  104. content.setAdname(extData.getString("region_jd"));
  105. }
  106. } else if (AddressTools.parseAddressCJ(searchAddress)[2] != null && !AddressTools.parseAddressCJ(searchAddress)[2].isEmpty()) {
  107. content.setAdname(AddressTools.parseAddressCJ(searchAddress)[2]);
  108. }
  109. }
  110. if (result.getData() == null) {
  111. result.setData(new ArrayList<>());
  112. }
  113. result.getData().add(content);
  114. result.setCode(AddressResultEnum.SZX_SUCCESS);
  115. }
  116. } else {
  117. result.setCode(AddressResultEnum.RESULT_NULL);
  118. }
  119. return result;
  120. }
  121. }