Browse Source

更新松江居委和初始化逻辑

DESKTOP-6LTVLN7\Liumouren 1 tháng trước cách đây
mục cha
commit
919cafeef2

+ 10 - 1
src/main/java/com/skyversation/poiaddr/addquery/AddressQueryEngine.java

@@ -274,6 +274,15 @@ public class AddressQueryEngine {
             AreaService areaService = AreaService.getInstance();
             for (AddressResult.ContentBean content : result.getData()) {
                 if (content.getLat() != null && content.getLon() != null) {
+//                  调整逻辑,不管有没有居委信息全部都以geojson的定位为准,如果有定位和地址不匹配的情况,就属于地址库中的脏数据(直接在数据库中找到这条记录并删除旧好了),这样调整之后就会导致普遍查询时间变长
+                    /*GeoJsonBean cjBean = areaService.isInResidentialCommitteePolygon(content.getLon(), content.getLat());
+                    if (cjBean != null && cjBean.getProperties() != null) {
+                        content.setPname("上海市");
+                        content.setCityname(cjBean.getProperties().getString("所属区"));
+                        content.setAdname(cjBean.getProperties().getString("所属街"));
+                        content.setCommunityCode(cjBean.getProperties().getString("居委会"));
+                        content.setCommunity(cjBean.getProperties().getString("居委_1"));
+                    }*/
 //                  判断是否存在村居数据
                     if (content.getCommunity() == null || content.getCommunity().isEmpty()) {
                         GeoJsonBean cjBean = areaService.isInResidentialCommitteePolygon(content.getLon(), content.getLat());
@@ -297,7 +306,7 @@ public class AddressQueryEngine {
                     }
 
                     if ((content.getAdname() == null || content.getAdname().isEmpty() || content.getCityname() == null || content.getCityname().isEmpty() || content.getCommunity() == null || content.getCommunity().isEmpty())) {
-//                  判断是否存在行政区划数据
+//                      判断是否存在行政区划数据
                         if (content.getCityname() == null || content.getCityname().isEmpty()) {
                             GeoJsonBean adBean = areaService.isInadPolygon(content.getLon(), content.getLat());
                             if (adBean != null && adBean.getProperties() != null) {

+ 16 - 6
src/main/java/com/skyversation/poiaddr/controller/CorporateLibraryController.java

@@ -94,6 +94,8 @@ public class CorporateLibraryController {
     /**
      * 数据清洗:
      * 首先遍历缓存中的所有地址,然后得到经纬度,如果经纬度得到的区划和街镇和字段中的区划和街镇不一致或者和地址中的区划和街镇(优先以地址中的区划和街镇为准)不一致,先修改数据库中对应的数据状态
+     * 数据库中的有些定位落点返回的居委会返回xx公司、xx商务区、xx工作站,但是实际上定位没啥问题,主要是geojson的问题。建议重新替换一个新的geojson文件,然后输出就以新的geojson为准
+     * 如果新的geojson没有问题的话就全部把地址库中的居委、街镇、行政区划替换为定位获取到的并更新到地址库。
      *
      * @return
      */
@@ -101,7 +103,7 @@ public class CorporateLibraryController {
     public String dmdzAddressClear() {
         long sum = 0L;
         List<YyskDmdzAddressStandardization> updateDatas = new ArrayList<>();
-        List<String> errorAddress = new ArrayList<>();
+//        List<String> errorAddress = new ArrayList<>();
         for (String addressStr : ScheduledTasks.allDmdzData.keySet()) {
             List<YyskDmdzAddressStandardization> yyskDmdzAddressStandardizations = ScheduledTasks.allDmdzData.get(addressStr);
             if (ScheduledTasks.addressClearStatus) {
@@ -117,12 +119,20 @@ public class CorporateLibraryController {
                         Double lonDb = Double.parseDouble(lon.toString());
                         Double latDb = Double.parseDouble(lat.toString());
                         GeoJsonBean cjBean = AreaService.getInstance().isInResidentialCommitteePolygon(lonDb, latDb);
-                        if (cjBean != null && cjBean.getProperties() != null && (!cjBean.getProperties().getString("所属区").contains(xzqh) || !cjBean.getProperties().getString("所属街").contains(town))) {
+                        if (xzqh.equals("松江区") || (cjBean != null && cjBean.getProperties() != null && cjBean.getProperties().getString("所属区").contains("松江区"))) {
+                            if (!StringUtils.hasText(item.getCommunity()) || (cjBean != null && cjBean.getProperties() != null && cjBean.getProperties().getString("居委_1").contains(item.getCommunity()))) {
+                                sum++;
+                                item.setTown(cjBean.getProperties().getString("所属街"));
+                                item.setCommunity(cjBean.getProperties().getString("居委_1"));
+                                updateDatas.add(item);
+                            }
+                        }
+                        /*if (cjBean != null && cjBean.getProperties() != null && (!cjBean.getProperties().getString("所属区").contains(xzqh) || !cjBean.getProperties().getString("所属街").contains(town))) {
                             item.setType("zl_lonLatErr");
                             sum++;
                             updateDatas.add(item);
                             errorAddress.add(item.getSourceaddress());
-                        }
+                        }*/
                     } catch (Exception e) {
                         continue;
                     }
@@ -133,12 +143,12 @@ public class CorporateLibraryController {
 //          更新数据
             AreaService.getInstance().updateYyszAddressRepository(updateDatas);
         }
-        if (errorAddress.size() > 0) {
+        /*if (errorAddress.size() > 0) {
             for (String addr : errorAddress) {
                 AreaService.getInstance().callBackErrorAddr(addr);
             }
-        }
-        return MessageManage.getInstance().getResultContent(Constant.SUCCESS, "清洗了经纬度错误的地址" + sum + "条", "成功");
+        }*/
+        return MessageManage.getInstance().getResultContent(Constant.SUCCESS, "清洗了居委错误的地址" + sum + "条", "成功");
     }
 
     //    地址查询

+ 63 - 1
src/main/java/com/skyversation/poiaddr/service/AreaService.java

@@ -2,6 +2,7 @@ package com.skyversation.poiaddr.service;
 
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
+import com.fasterxml.jackson.databind.ObjectMapper;
 import com.skyversation.poiaddr.addquery.AddressQueryEngine;
 import com.skyversation.poiaddr.addquery.Constant;
 import com.skyversation.poiaddr.bean.*;
@@ -11,6 +12,7 @@ import com.skyversation.poiaddr.service.impl.PgTableRepository;
 import com.skyversation.poiaddr.service.impl.TAddressCallbackRepository;
 import com.skyversation.poiaddr.service.impl.YyszAddressRepository;
 import com.skyversation.poiaddr.util.AddrSplitLmrMap;
+import com.skyversation.poiaddr.util.ExcelReaderUtils;
 import com.skyversation.poiaddr.util.ShanghaiAddressSplitUtil;
 import com.skyversation.poiaddr.util.SplitAddress;
 import com.skyversation.poiaddr.util.tasks.ScheduledTasks;
@@ -29,6 +31,9 @@ import org.springframework.util.StringUtils;
 import javax.annotation.PostConstruct;
 import javax.annotation.Resource;
 import java.io.*;
+import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
+import java.nio.file.Paths;
 import java.util.*;
 
 @Service
@@ -78,6 +83,63 @@ public class AreaService {
     public List<GeoJsonBean> wgPolygonList = new ArrayList<>();
     public List<GeoJsonBean> wgwPolygonList = new ArrayList<>();
     public List<GeoJsonBean> zhwgPolygonList = new ArrayList<>();
+    public StringBuffer geojsonStr = new StringBuffer();
+
+    /**
+     * 加载村居边界geojson文件获取所有的居委并进行统计
+     * 找出所有有问题(xx公司、xx工作站、xx区)的居委,并列出
+     *
+     * @param args
+     */
+    public static void main(String[] args) {
+        // JSON文件路径
+        String appendFilePath = "C:\\Users\\Liumouren\\Desktop\\GWS84(国际通用)sj_jw_0416.json";
+        String filePath = "C:\\Users\\Liumouren\\Desktop\\上海市_村居边界.geojson";
+        // 创建ObjectMapper实例
+        ObjectMapper objectMapper = new ObjectMapper();
+        try {
+            JSONObject resData = new JSONObject();
+            resData.put("type", "FeatureCollection");
+            resData.put("name", "cj_3857");
+            // 读取JSON文件并转换为String
+            String appendJsonContent = objectMapper.readTree(new File(appendFilePath)).toString();
+            String jsonContent = objectMapper.readTree(new File(filePath)).toString();
+//          暂存所有新松江数据
+            JSONArray appendFeatures = JSONObject.parseObject(appendJsonContent).getJSONArray("features");
+            JSONObject oldJsonContet = JSONObject.parseObject(jsonContent);
+            for (int i = 0; i < appendFeatures.size(); i++) {
+                JSONObject featureItem = appendFeatures.getJSONObject(i);
+//              替换属性中的key,不影响旧代码使用
+                JSONObject properties = featureItem.getJSONObject("properties");
+                properties.put("所属区", properties.getString("district"));
+                properties.put("所属街", properties.getString("subdistric"));
+                properties.put("居委会", properties.getString("code"));
+                properties.put("居委_1", properties.getString("name"));
+            }
+            JSONArray oldFeaturesJson = oldJsonContet.getJSONArray("features");
+            for (int i = 0; i < oldFeaturesJson.size(); i++) {
+                JSONObject properties = oldFeaturesJson.getJSONObject(i).getJSONObject("properties");
+                if (!properties.getString("所属区").equals("松江区")) {
+                    appendFeatures.add(oldFeaturesJson.getJSONObject(i));
+                }
+            }
+            resData.put("features", appendFeatures);
+            String fileOutPath = "output/new_sj_jw.json";
+            try {
+                // 直接将字符串写入文件,指定字符集
+                Files.write(
+                        Paths.get(fileOutPath),          // 文件路径
+                        JSONObject.toJSONString(resData).getBytes(StandardCharsets.UTF_8)  // 字符串转字节数组(指定编码)
+                );
+                System.out.println("文件保存成功!路径:" + filePath);
+            } catch (IOException e) {
+                System.err.println("文件保存失败:" + e.getMessage());
+                e.printStackTrace();
+            }
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+    }
 
     @PostConstruct
     public void initGeoData() {
@@ -342,7 +404,7 @@ public class AreaService {
         }
         Map<String, String> roadInfos = AddrSplitLmrMap.parseAddress(addr2);
         if (roadInfos != null && roadInfos.containsKey("路名") && roadInfos.get("路名") != null && StringUtils.hasText(roadInfos.get("路名"))) {
-            addr2 = roadInfos.get("路名");
+            addr2 = roadInfos.get("路名") + (StringUtils.hasText(roadInfos.get("弄号")) ? roadInfos.get("弄号") : "");
         }
         List<YyskDmdzAddressStandardization> returnDatas = new ArrayList<>();
         if (ScheduledTasks.allDmdzData.containsKey(addr2)) {

+ 10 - 16
src/main/java/com/skyversation/poiaddr/util/AddressTools.java

@@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.skyversation.poiaddr.addquery.AddressQueryEngine;
 import com.skyversation.poiaddr.bean.AddressResult;
+import com.skyversation.poiaddr.entity.AddrBean;
 import com.skyversation.poiaddr.service.AreaService;
 import org.springframework.util.StringUtils;
 
@@ -596,14 +597,15 @@ public class AddressTools {
      */
     private double calculateNumberMatchScore(String addressNumber, String addrNumber) {
         if (addressNumber == null || addrNumber == null) {
-            return 1; // 都没有数字或其中一个没有,认为这一步匹配满分
+            return 0; // 都没有数字或其中一个没有,认为这一步匹配满分
         }
         if (addressNumber.equals(addrNumber)) {
             return 1;
         }
         try {
-            int num1 = Integer.parseInt(addressNumber);
-            int num2 = Integer.parseInt(addrNumber);
+            // 使用正则表达式替换所有非数字字符为空字符串
+            int num1 = Integer.parseInt(addressNumber.replaceAll("[^0-9]", ""));
+            int num2 = Integer.parseInt(addrNumber.replaceAll("[^0-9]", ""));
             int diff = Math.abs(num1 - num2);
             if (diff <= 200) {
                 return 1 - (double) diff / 200;
@@ -821,7 +823,8 @@ public class AddressTools {
         JSONArray resultArray = new JSONArray();
         double maxTotalScore = 0;
         // 处理输入地址的分词和数字前文本
-        AddressInfo addressInfo = processAddress(address);
+        SplitAddress addrBean = ShanghaiAddressSplitUtil.splitBestAddress(address);
+        AddressInfo addressInfo = processAddress(addrBean.getAddr());
         for (int i = 0; i < array.size(); i++) {
             JSONObject obj = array.getJSONObject(i);
             obj.put("searchAddress", address);
@@ -829,6 +832,7 @@ public class AddressTools {
             if (obj.containsKey(param) && obj.get(param) != null && !obj.getString(param).trim().isEmpty()) {
 //              得到返回的地址
                 String addr = obj.getString(param);
+                SplitAddress addrBean2 = ShanghaiAddressSplitUtil.splitBestAddress(addr);
 //              规则4判断
 //              TODO 添加校验逻辑(首先使用第4校验规则匹配,匹配不到使用第二规则,还匹配不到的话就使用打分规则)
                 Set<String> addressString = AddressQueryEngine.tokenizeString(AddressQueryEngine.townReplaceAll(addr)).get(0);
@@ -874,10 +878,10 @@ public class AddressTools {
                     continue;
                 }
 
-                AddressInfo addrInfo = processAddress(addr);
+                AddressInfo addrInfo = processAddress(addrBean2.getAddr());
 
                 // 第一步:全词匹配比例
-                double score1 = calculateFullWordMatchScore(address, addr);
+                double score1 = calculateFullWordMatchScore(addrBean.getAddr(), addrBean2.getAddr());
 
                 // 第二步:数字匹配得分
                 double score2 = calculateNumberMatchScore(addressInfo.firstNumber, addrInfo.firstNumber);
@@ -889,9 +893,6 @@ public class AddressTools {
 
                 if (totalScore > maxTotalScore) {
                     maxTotalScore = totalScore;
-                    obj.put("计分1", score1);
-                    obj.put("计分2", score2);
-                    obj.put("计分3", score3);
                     obj.put("总分", totalScore);
                     resultArray.add(obj);
                 }
@@ -997,11 +998,4 @@ public class AddressTools {
         return content;
     }
 
-    //    测试两个坐标系转换,结果
-    public static void main(String[] args) {
-        double testLon = Double.parseDouble("121.3197545220033");
-        double testLat = Double.parseDouble("31.152147246991994");
-        System.out.println(Arrays.toString(Coordinate.wgs84_to_shcj(testLon, testLat)));
-        System.out.println(Arrays.toString(CoordTransform2.getInstance().wgs84_to_shcj(testLon, testLat)));
-    }
 }

+ 239 - 0
src/main/java/com/skyversation/poiaddr/util/DreamTest.java

@@ -0,0 +1,239 @@
+package com.skyversation.poiaddr.util;
+
+import org.springframework.util.StringUtils;
+
+import java.util.*;
+
+/**
+ * 多看书、多睡觉、少做白日梦
+ */
+public class DreamTest {
+
+    /**
+     * 计算双色球中奖金额
+     *
+     * @param yourNumbers    你的号码数组,前6个为红球(1-33,不重复),第7个为蓝球(1-16)
+     * @param winningNumbers 中奖号码数组,前6个为红球,第7个为蓝球
+     * @return 中奖金额(元),未中奖返回0,输入无效返回-1
+     */
+    public static double calculateBonus(int[] yourNumbers, int[] winningNumbers) {
+        // 验证输入数组长度
+        if (yourNumbers == null || winningNumbers == null ||
+                yourNumbers.length != 7 || winningNumbers.length != 7) {
+            return -1; // 输入无效
+        }
+
+        // 分离红球和蓝球
+        int[] yourRed = new int[6];
+        int yourBlue = yourNumbers[6];
+        System.arraycopy(yourNumbers, 0, yourRed, 0, 6);
+
+        int[] winningRed = new int[6];
+        int winningBlue = winningNumbers[6];
+        System.arraycopy(winningNumbers, 0, winningRed, 0, 6);
+
+        // 验证号码范围
+        if (!isValidRedBalls(yourRed) || !isValidBlueBall(yourBlue) ||
+                !isValidRedBalls(winningRed) || !isValidBlueBall(winningBlue)) {
+            return -1; // 号码范围无效
+        }
+
+        // 计算红球匹配数
+        int redMatches = countRedMatches(yourRed, winningRed);
+        // 计算蓝球是否匹配
+        boolean blueMatched = (yourBlue == winningBlue);
+
+        // 获取实时奖池金额(实际应用中应从官方API获取)
+        double jackpot = getJackpotAmount();
+
+        // 根据中奖规则计算奖金
+        if (redMatches == 6 && blueMatched) {
+            // 一等奖:奖池30%,最高1000万
+            return Math.min(jackpot * 0.3, 10000000);
+        } else if (redMatches == 6 && !blueMatched) {
+            // 二等奖:奖池15%
+            return jackpot * 0.15;
+        } else if (redMatches == 5 && blueMatched) {
+            // 三等奖:3000元
+            return 3000;
+        } else if ((redMatches == 5 && !blueMatched) || (redMatches == 4 && blueMatched)) {
+            // 四等奖:200元
+            return 200;
+        } else if ((redMatches == 4 && !blueMatched) || (redMatches == 3 && blueMatched)) {
+            // 五等奖:10元
+            return 10;
+        } else if ((redMatches == 2 && blueMatched) ||
+                (redMatches == 1 && blueMatched) ||
+                (redMatches == 0 && blueMatched)) {
+            // 六等奖:5元
+            return 5;
+        } else {
+            // 未中奖
+            return 0;
+        }
+    }
+
+    /**
+     * 验证红球是否有效(1-33,不重复)
+     */
+    private static boolean isValidRedBalls(int[] redBalls) {
+        Set<Integer> uniqueCheck = new HashSet<>();
+        for (int ball : redBalls) {
+            if (ball < 1 || ball > 33 || !uniqueCheck.add(ball)) {
+                return false;
+            }
+        }
+        return true;
+    }
+
+    /**
+     * 验证蓝球是否有效(1-16)
+     */
+    private static boolean isValidBlueBall(int blueBall) {
+        return blueBall >= 1 && blueBall <= 16;
+    }
+
+    /**
+     * 计算红球匹配数量
+     */
+    private static int countRedMatches(int[] yourRed, int[] winningRed) {
+        Set<Integer> winningSet = new HashSet<>();
+        for (int ball : winningRed) {
+            winningSet.add(ball);
+        }
+
+        int count = 0;
+        for (int ball : yourRed) {
+            if (winningSet.contains(ball)) {
+                count++;
+            }
+        }
+        return count;
+    }
+
+    private static double getJackpotAmount() {
+        // 此处仅为示例,返回一个模拟值
+        return 2427919422.0;
+    }
+
+    public static int[] generateRandomRedBalls(List<Integer> number, Integer number2) {
+        // 创建1-33的数字列表
+        List<Integer> numbers = new ArrayList<>();
+        for (int i = 1; i <= 33; i++) {
+            if (number != null && number.size() > 0) {
+                if (!number.contains(i)) {
+                    numbers.add(i);
+                }
+            } else {
+                numbers.add(i);
+            }
+        }
+
+        List<Integer> numbers2 = new ArrayList<>();
+        for (int i = 1; i <= 16; i++) {
+            if (number2 == null || i != number2) {
+                numbers2.add(i);
+            }
+        }
+        // 打乱列表顺序
+        Collections.shuffle(numbers, new Random());
+        Collections.shuffle(numbers2, new Random());
+        // 取前6个数字
+        int[] result = new int[6];
+        for (int i = 0; i < 6; i++) {
+            result[i] = numbers.get(i);
+        }
+        // 排序结果
+        Arrays.sort(result);
+        int[] result2 = new int[7];
+        for (int i = 0; i < 6; i++) {
+            result2[i] = result[i];
+        }
+        result2[6] = numbers2.get(0);
+        return result2;
+    }
+
+    public static double test(int hfSum, int bs) {
+        int sumMn = hfSum / 2 / bs;
+        double re = 0;
+        List<Integer> upList = new ArrayList<>();
+        Integer endNumber = null;
+        String upNumbers = "";
+        String[] upStringList = upNumbers.split(", ");
+        if (upStringList.length > 0) {
+            for (int i = 0; i < upStringList.length; i++) {
+                if (i == upStringList.length - 1) {
+                    if (StringUtils.hasText(upStringList[i])) {
+                        endNumber = Integer.valueOf(upStringList[i]);
+                    }
+                } else {
+                    if (StringUtils.hasText(upStringList[i])) {
+                        upList.add(Integer.valueOf(upStringList[i]));
+                    }
+                }
+            }
+        }
+        int[] winningNumbers = generateRandomRedBalls(null, null);
+        List<int[]> myNumbersList = new ArrayList<>();
+        while (sumMn > 0) {
+            int[] myNumbers = generateRandomRedBalls(upList, endNumber);
+            if (delLpNumbers(myNumbers) && !myNumbersList.contains(myNumbers)) {
+                myNumbersList.add(myNumbers);
+                sumMn--;
+                double bonus = calculateBonus(myNumbers, winningNumbers);
+                if (bonus != -1 && bonus != 0) {
+                    re += bs * bonus;
+                }
+            }
+        }
+        return re;
+    }
+
+    public static boolean delLpNumbers(int[] numbers) {
+        if (numbers[5] - numbers[0] < 11) {
+            System.out.println(Arrays.toString(numbers));
+            return false;
+        }
+        int lh = 0;
+        int cz = 1;
+        for (int i = 0; i < 6; i++) {
+            if (numbers[i + 1] - numbers[i] == cz) {
+                lh++;
+                if (lh >= 4) {
+                    System.out.println(Arrays.toString(numbers));
+                    return false;
+                }
+            } else {
+                lh = 0;
+                cz = numbers[i + 1] - numbers[i];
+            }
+        }
+        return true;
+    }
+
+    // 示例用法1849397248分之一
+    public static void main(String[] args) {
+//      测试次数(一周两次的话,需要testCount/2/4/12,普通人一生也就最多10000次)一年100次左右
+        int testCount = 100;
+//      人数
+        int pNum = 1000;
+//      每人金额
+        int cSum = 100;
+//      单次总金额
+        int allSum = cSum * pNum;
+//      倍率
+        int bs = 1;
+//      总中奖
+        double res = 0.0;
+        for (int i = 0; i < testCount; i++) {
+            res += test(allSum, bs);
+        }
+        System.out.println("----------------------年总结----------------------");
+        System.out.println(pNum + "人参与!");
+        System.out.println("每次每人投入" + cSum + "元!");
+        System.out.println("每次" + bs + "倍," + (allSum / 2 / bs) + "注,单次金额:" + allSum);
+        System.out.println("一年买了" + testCount + "次,总金额:" + allSum * testCount + ",中了:" + res + ",回本率:" + (res / allSum / testCount));
+        double edOrHd = (res / pNum) - (testCount * cSum);
+        System.out.println("每人总投注:" + testCount * cSum + ",每人" + (edOrHd > 0 ? "赚了" : "亏了") + edOrHd);
+    }
+}

+ 2 - 2
src/main/java/com/skyversation/poiaddr/util/ShanghaiAddressSplitUtil.java

@@ -596,7 +596,7 @@ public class ShanghaiAddressSplitUtil {
         System.out.println("AddrBean:" + lmrAddrBean);
         System.out.println(AddrSplitLmrMap.parseAddress(lmrAddrBean.getAddress()));*/
 
-        AddressResult.ContentBean test = new AddressResult.ContentBean();
+        /*AddressResult.ContentBean test = new AddressResult.ContentBean();
         test.setRoomNumber("1551");
         test.setDistance("");
         test.setLon(121.18766784667969);
@@ -615,7 +615,7 @@ public class ShanghaiAddressSplitUtil {
         test.setY(22674.637411829084);
         test.setLocation("121.18767,31.439653");
         test.setCommunityCode("141348");
-        AddressTools.ifTrueAddressByBeans(test);
+        AddressTools.ifTrueAddressByBeans(test);*/
 /*//      数据总条数
         int dataSize = 2158170;
         int numberSize = 100000;

+ 3 - 2
src/main/java/com/skyversation/poiaddr/util/tasks/ScheduledTasks.java

@@ -280,6 +280,7 @@ public class ScheduledTasks {
     public static void yyskDmdzAddressStandardizationPutDmdz(YyskDmdzAddressStandardization yyskDmdzAddressStandardization) {
         if (yyskDmdzAddressStandardization.getSourceaddress() != null && StringUtils.hasText(yyskDmdzAddressStandardization.getSourceaddress())) {
             SplitAddress splitAddress = ShanghaiAddressSplitUtil.splitBestAddress(yyskDmdzAddressStandardization.getSourceaddress());
+//          如果再加入一个弄号的话,数据量可能会变大,但是搜索效率会变快。
             if (splitAddress.getAddr().length() > 2) {
                 putAllDmdzData(splitAddress.getAddr(), yyskDmdzAddressStandardization);
             } else {
@@ -299,14 +300,14 @@ public class ScheduledTasks {
     public static void putAllDmdzData(String addr, YyskDmdzAddressStandardization item) {
         Map<String, String> roadInfos = AddrSplitLmrMap.parseAddress(addr);
         if (roadInfos != null && StringUtils.hasText(roadInfos.get("路名"))) {
-            addr = roadInfos.get("路名");
+            addr = roadInfos.get("路名") + (StringUtils.hasText(roadInfos.get("弄号")) ? roadInfos.get("弄号") : "");
         }
         if (StringUtils.hasText(addr)) {
             if (!ScheduledTasks.allDmdzData.containsKey(addr)) {
                 List<YyskDmdzAddressStandardization> datas = new ArrayList<>();
                 datas.add(item);
                 ScheduledTasks.allDmdzData.put(addr, datas);
-            } else if (ScheduledTasks.allDmdzData.get(addr).size() < 1000) {
+            } else if (ScheduledTasks.allDmdzData.get(addr).size() < 50) {
                 ScheduledTasks.allDmdzData.get(addr).add(item);
             }
         }

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 0
src/main/resources/geojson/上海市_村居边界.geojson


Một số tệp đã không được hiển thị bởi vì quá nhiều tập tin thay đổi trong này khác