123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127 |
- 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<String> 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;
- }
- }
|