package com.skyversation.poiaddr.addquery; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.skyversation.poiaddr.bean.AddressResult; import com.skyversation.poiaddr.util.AddressTools; import com.skyversation.poiaddr.util.SplitAddress; import com.skyversation.poiaddr.util.status.AddressResultEnum; import java.util.ArrayList; import java.util.HashSet; import java.util.Set; public class TransfromDataTool { public static void main(String[] args) { // 搜索地址 String searchAddress = "王家浜路130号101室"; System.out.println("》》搜索地址:" + searchAddress); System.out.println(); // 返回的参考地址列表 Set arrayAddress = new HashSet<>(); arrayAddress.add("旗杆村平桥王家浜路658号"); arrayAddress.add("王家浜路与光星路交叉口东200米"); arrayAddress.add("上海市松江区叶榭镇四村村701号102室"); System.out.println("》》返回参考地址列表:" + arrayAddress); System.out.println(); // 新建JSONArray对象 JSONArray array = new JSONArray(); // 把Set对象转换为接口接收的JSONArray对象 for (String key : arrayAddress) { JSONObject item_ = new JSONObject(); item_.put("sourceaddress", key); array.add(item_); } JSONArray reData = AddressTools.getInstance().findBestMatch2(searchAddress, array, "sourceaddress"); System.out.println("------------------打分后从高到低显示》》》》》》》》》》》》"); System.out.println(); for (int i = 0; i < reData.size(); i++) { JSONObject jo = reData.getJSONObject(i); System.out.println("返回参考地址:" + jo.getString("sourceaddress") + "\t打分:" + jo.getString("总分")); } } public AddressResult dbResultToResult(SplitAddress SplitAddress, String searchAddress, JSONArray array) { AddressResult result = new AddressResult(); try { if (array == null || array.size() < 1) { AddressResult addressResult = new AddressResult(); addressResult.setCode(AddressResultEnum.RESULT_NULL); return result; } // 打分(应该从大到小) JSONArray resultArray = AddressTools.getInstance().findBestMatch2(searchAddress, array, "sourceaddress"); for (int i = 0; i < resultArray.size(); i++) { JSONObject jsonObject = resultArray.getJSONObject(i); if (jsonObject != null && jsonObject.containsKey("总分") && jsonObject.get("总分") != null && !jsonObject.getString("总分").isEmpty()) { // TODO 映射输出 AddressResult.ContentBean content = AddressTools.getInstance().addressToContentBean(SplitAddress, jsonObject); if (result.getData() == null) { result.setData(new ArrayList<>()); } result.getData().add(content); } } } catch (Exception e) { e.printStackTrace(); System.err.println("gdV3ResultToResult err:" + e); } result.setCode(AddressResultEnum.GDV3_SUCCESS); result.setMessage("数据库查询成功!"); return result; } public static AddressResult szxResultToResult(JSONObject json, String searchAddress) { AddressResult result = new AddressResult(); JSONArray array = json.getJSONArray("result"); if (array == null || array.size() < 1) { result.setCode(AddressResultEnum.RESULT_NULL); return result; } JSONArray jsonArray = com.skyversation.poiaddr.util.AddressTools.getInstance().findBestMatch2(searchAddress, array, "address"); if (jsonArray.size() > 0) { JSONObject jsonObject = jsonArray.getJSONObject(0); if (jsonObject.containsKey("总分") && jsonObject.get("总分") != null && !jsonObject.getString("总分").isEmpty()) { AddressResult.ContentBean content = new AddressResult.ContentBean(); content.setScore(jsonObject.getString("总分")); content.setSearchAddress(jsonObject.getString("searchAddress")); content.setType(jsonObject.getString("type_name")); content.setAddress(jsonObject.getString("address")); content.setName(jsonObject.getString("name")); // 使用分词方法得到区名是镇名 content.setCityname(AddressTools.parseAddressCJ(jsonObject.getString("address"))[1]); double[] points = new double[]{jsonObject.getJSONObject("location").getDouble("lng"), jsonObject.getJSONObject("location").getDouble("lat")}; content.setLon(points[0]); content.setLat(points[1]); if (jsonObject.get("point_x") != null && jsonObject.get("point_y") != null) { content.setLocation(jsonObject.getDouble("point_x") + "," + jsonObject.getDouble("point_y")); } content.setAdname(AddressTools.parseAddressCJ(jsonObject.getString("address"))[2]); if (jsonObject.containsKey("ext_data")) { JSONObject extData = jsonObject.getJSONObject("ext_data"); if (extData.containsKey("region_jw") && !extData.getString("region_jw").isEmpty()) { content.setCommunity(extData.getString("region_jw")); } // 如果评分大于1.6,那么就使用接口返回的街镇,否则使用源搜索地址的街镇 if (jsonObject.getString("总分").contains("rule_") || Float.parseFloat(jsonObject.getString("总分")) > 1.6) { if (extData.containsKey("region_jd") && !extData.getString("region_jd").isEmpty()) { content.setAdname(extData.getString("region_jd")); } } else if (AddressTools.parseAddressCJ(searchAddress)[2] != null && !AddressTools.parseAddressCJ(searchAddress)[2].isEmpty()) { content.setAdname(AddressTools.parseAddressCJ(searchAddress)[2]); } } if (result.getData() == null) { result.setData(new ArrayList<>()); } result.getData().add(content); result.setCode(AddressResultEnum.SZX_SUCCESS); } } else { result.setCode(AddressResultEnum.RESULT_NULL); } return result; } }