瀏覽代碼

公式相关:转点公式优化

yangyj 1 年之前
父節點
當前提交
1df21d9138

+ 34 - 16
blade-service/blade-manager/src/main/java/org/springblade/manager/formula/ITurnPointCalculator.java

@@ -70,35 +70,45 @@ public interface ITurnPointCalculator {
     }
 
 
+    /**判断是否保留原来的转点*/
     static boolean persist(List<TurnPoint> list){
-        /*在补充计算之前进行完整性校验,如果成功不会再生成任何新转点*/
-        if(list.stream().anyMatch(e->ZD.equals(e.getType()))){
+        /*在补充计算之前进行完整性校验,如果成功不会再生成任何新转点*/
+        if(Func.isNotEmpty(list)){
               LevelInfo tmp = new LevelInfo();
               LevelInfo info = list.get(0).getLevelInfo();
               tmp.setSightHeight(info.getSightHeight());
               for(TurnPoint tp:list){
                   if(CE.equals(tp.getType())||CLOSE.equals(tp.getType())){
-                     boolean pass;
+                     boolean pass=false;
                      if(BaseUtils.isNumber(tp.getSc())&&BaseUtils.isNumber(tp.getQ())){
                          pass=tmp.getSightHeight()-tp.getQ0L()==tp.getSc0L();
                      }else {
                          /*是否是负前视*/
-                         boolean nagetive =false;
+                         boolean negative =false;
                          if(BaseUtils.isNumber(tp.getSc())){
                              tp.setQ(tmp.getSightHeight()-tp.getSc0L());
                          }else if(BaseUtils.isNumber(tp.getQ())){
-                               nagetive=tp.getQ0L()<0;
-                         }else if(BaseUtils.isNumber(tp.getSj())&&BaseUtils.isNumber(tp.getDx())){
-                             tp.setSc(tp.getSj0L()+tp.getDx0L());
-                             tp.setQ(tmp.getSightHeight()-tp.getSc0L());
+                             negative=tp.getQ0L()<0;
+                         }else if(BaseUtils.isNumber(tp.getSj())){
+                             if(BaseUtils.isNumber(tp.getDx())){
+                                 tp.setSc(tp.getSj0L()+tp.getDx0L());
+                             }else{
+                                 tp.setSc(tp.getSj0L()+Double.parseDouble(rangeList(1, 0, info.getDx(), 0.001, 3, 1).get(0).toString()));
+                             }
+                             double q=tmp.getSightHeight()-tp.getSc0L();
+                             if(q>info.getMin()) {
+                                 tp.setQ(q);
+                             }
                          }
-                         double q=tp.getQ0L();
-                         if(nagetive){
-                             /*负前视是倒尺计算,要取绝对值比较*/
-                             q=Math.abs(q);
+                         if(BaseUtils.isNumber(tp.getQ())) {
+                             double q = tp.getQ0L();
+                             if (negative) {
+                                 /*负前视是倒尺计算,要取绝对值比较*/
+                                 q = Math.abs(q);
+                             }
+                             /*判断前视是否在合理范围*/
+                             pass = q >= info.getMin() && q <= info.getStep();
                          }
-                         /*判断前视是否在合理范围*/
-                         pass= q>=info.getMin()&&q<=info.getStep();
                      }
                      if(!pass){
                          return false;
@@ -314,8 +324,16 @@ public interface ITurnPointCalculator {
                     tp.setDx(dx);
                 }
                 if(StringUtils.isNotEmpty(tp.getQ())){
-                    tp.setSc(info.getSightHeight()-tp.getQ0L());
-                    tp.setDx(tp.getSj0L()-tp.getSj0L());
+                    double sc=info.getSightHeight()-tp.getQ0L();
+                    if(BaseUtils.isNumber(tp.getSj())){
+                        if(info.isRangeOfDx(sc-tp.getSj0L())){
+                            tp.setSc(sc);
+                            tp.setDx(tp.getSc0L()-tp.getSj0L());
+                        }else{
+                            tp.setSc(tp.getSj0L()+tp.getDx0L());
+                        }
+                    }
+
                 }else{
                     tp.setSc(tp.getSj0L() + tp.getDx0L());
                     tp.setQ(info.getSightHeight() - tp.getSc0L());

+ 11 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/formula/LevelInfo.java

@@ -1,6 +1,7 @@
 package org.springblade.manager.formula;
 
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
 
 /**
@@ -158,5 +159,15 @@ public class LevelInfo implements  Cloneable {
     public void setPersist(boolean persist) {
         this.persist = persist;
     }
+    /**判断高程偏差是否在限定范围*/
+    public boolean isRangeOfDx(double x){
+        try {
+            double[] dxArr = Arrays.stream(getDx().split(",")).mapToDouble(Double::parseDouble).map(e->e*0.001).toArray();
+            return dxArr[0]<=x&&x<=dxArr[1];
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+        return true;
+    }
 
 }

+ 1 - 1
blade-service/blade-manager/src/main/java/org/springblade/manager/formula/TurnPoint.java

@@ -282,7 +282,7 @@ public class TurnPoint {
     }*/
 
     public static Random r = new Random();
-    /*转点的核心处理算法,当测点不在测量范围会触发*/
+    /**转点的核心处理算法,当测点不在测量范围会触发*/
     public List<TurnPoint> limit(Boolean negative) {
         List<TurnPoint> result = new ArrayList<>();
         double step = levelInfo.getStep();