|
@@ -5,6 +5,7 @@ import com.mixsmart.utils.ListUtils;
|
|
import com.mixsmart.utils.StringUtils;
|
|
import com.mixsmart.utils.StringUtils;
|
|
import org.springblade.common.utils.BaseUtils;
|
|
import org.springblade.common.utils.BaseUtils;
|
|
import org.springblade.core.tool.utils.Func;
|
|
import org.springblade.core.tool.utils.Func;
|
|
|
|
+import org.springframework.beans.BeanUtils;
|
|
|
|
|
|
import java.math.BigDecimal;
|
|
import java.math.BigDecimal;
|
|
import java.util.*;
|
|
import java.util.*;
|
|
@@ -59,12 +60,16 @@ public interface ITurnPointCalculator {
|
|
return tmp;
|
|
return tmp;
|
|
}
|
|
}
|
|
/*判断是否可推导*/
|
|
/*判断是否可推导*/
|
|
- /*levelInfo.setPersist(persist(tmp));问题多多,暂时关闭*/
|
|
|
|
|
|
+ levelInfo.setPersist(persist(tmp));
|
|
|
|
+ List<TurnPoint> result;
|
|
if (levelInfo.isNotPersist()) {
|
|
if (levelInfo.isNotPersist()) {
|
|
/*不可推导的情况移除转点,fill阶段自动生成*/
|
|
/*不可推导的情况移除转点,fill阶段自动生成*/
|
|
tmp.removeIf(e -> ZD.equals(e.getType()));
|
|
tmp.removeIf(e -> ZD.equals(e.getType()));
|
|
|
|
+ result= fill(tmp);
|
|
|
|
+ }else{
|
|
|
|
+ tmp.forEach(ITurnPointCalculator::putCache);
|
|
|
|
+ result=tmp;
|
|
}
|
|
}
|
|
- List<TurnPoint> result = fill(tmp);
|
|
|
|
if (ListUtils.isNotEmpty(result)) {
|
|
if (ListUtils.isNotEmpty(result)) {
|
|
return result;
|
|
return result;
|
|
}
|
|
}
|
|
@@ -76,77 +81,36 @@ public interface ITurnPointCalculator {
|
|
}
|
|
}
|
|
|
|
|
|
/**判断是否保留原来的转点*/
|
|
/**判断是否保留原来的转点*/
|
|
- static boolean persist(List<TurnPoint> list){
|
|
|
|
- /*在补充计算之前进行完整性校验,如果成功则不会再生成任何新转点*/
|
|
|
|
- if(Func.isNotEmpty(list)){
|
|
|
|
|
|
+ static boolean persist(List<TurnPoint> sourceList){
|
|
|
|
+ /*在补充计算之前对副本进行完整性校验(只校验不改数据),如果成功则不会执行转点计算*/
|
|
|
|
+ if(Func.isNotEmpty(sourceList)){
|
|
LevelInfo tmp = new LevelInfo();
|
|
LevelInfo tmp = new LevelInfo();
|
|
- LevelInfo info = list.get(0).getLevelInfo();
|
|
|
|
- tmp.setSightHeight(info.getSightHeight());
|
|
|
|
- for(TurnPoint tp:list){
|
|
|
|
|
|
+ LevelInfo info = sourceList.get(0).getLevelInfo();
|
|
|
|
+ BeanUtils.copyProperties(info,tmp);
|
|
|
|
+ List<TurnPoint> list =BaseUtils.copyList(sourceList);
|
|
|
|
+ assert list != null;
|
|
|
|
+ list.forEach(tp->tp.setLevelInfo(tmp));
|
|
|
|
+ boolean pass=false;
|
|
|
|
+ for(TurnPoint tp:list){
|
|
if(CE.equals(tp.getType())||CLOSE.equals(tp.getType())){
|
|
if(CE.equals(tp.getType())||CLOSE.equals(tp.getType())){
|
|
- boolean pass=false;
|
|
|
|
- if(BaseUtils.isNumber(tp.getSc())&&BaseUtils.isNumber(tp.getQ())){
|
|
|
|
- pass=tmp.getSightHeight()-tp.getQ0L()==tp.getSc0L();
|
|
|
|
- }else {
|
|
|
|
- /*是否是负前视*/
|
|
|
|
- boolean negative =false;
|
|
|
|
- if(BaseUtils.isNumber(tp.getSc())){
|
|
|
|
- tp.setQ(tmp.getSightHeight()-tp.getSc0L());
|
|
|
|
- }else if(BaseUtils.isNumber(tp.getQ())){
|
|
|
|
- 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);
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- if(BaseUtils.isNumber(tp.getQ())) {
|
|
|
|
- double q = tp.getQ0L();
|
|
|
|
- if (negative) {
|
|
|
|
- /*负前视是倒尺计算,要取绝对值比较*/
|
|
|
|
- q = Math.abs(q);
|
|
|
|
- }
|
|
|
|
- /*判断前视是否在合理范围*/
|
|
|
|
- pass = q >= info.getMin() && q <= info.getStep();
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- if(!pass){
|
|
|
|
- return false;
|
|
|
|
- }
|
|
|
|
|
|
+ pass=tp.isCompletedCe()&&tp.isRealScMatch();
|
|
}else if(ZD.equals(tp.getType())){
|
|
}else if(ZD.equals(tp.getType())){
|
|
- boolean pass;
|
|
|
|
- if(BaseUtils.isNumber(tp.getBmd())&&BaseUtils.isNumber(tp.getQ())&&BaseUtils.isNumber(tp.getH())){
|
|
|
|
- /*视线高、前后视都存在*/
|
|
|
|
- pass=tp.isWithinRangeValueZd(tp.getQ())&&tp.isWithinRangeValueZd(tp.getH())&&tmp.getSightHeight()-tp.getQ0L()==tp.getBmd0L();
|
|
|
|
- } else{
|
|
|
|
- if(!BaseUtils.isNumber(tp.getBmd())&&BaseUtils.isNumber(tp.getQ())&&BaseUtils.isNumber(tp.getH())){
|
|
|
|
- /*视线高不存在、前后视都存在*/
|
|
|
|
- tp.setBmd(tmp.getSightHeight()+tp.getH0L()-tp.getQ0L());
|
|
|
|
- }else if(BaseUtils.isNumber(tp.getSc())&&!BaseUtils.isNumber(tp.getQ())&&BaseUtils.isNumber(tp.getH())){
|
|
|
|
- /*前视不存在、视线高后视都存在*/
|
|
|
|
- tp.setQ(tmp.getSightHeight()+tp.getH0L()-tp.getBmd0L());
|
|
|
|
- }else if(BaseUtils.isNumber(tp.getSc())&&BaseUtils.isNumber(tp.getQ())&&!BaseUtils.isNumber(tp.getH())){
|
|
|
|
- /*前视不存在、视线高后视都存在*/
|
|
|
|
- tp.setH(tmp.getSightHeight()-tp.getQ0L()-tp.getBmd0L());
|
|
|
|
- }
|
|
|
|
- pass=tp.isWithinRangeValueZd(tp.getQ())&&tp.isWithinRangeValueZd(tp.getH());
|
|
|
|
- }
|
|
|
|
- if(!pass){
|
|
|
|
- return false;
|
|
|
|
|
|
+ pass=tp.isCompletedZd()&&tp.isWithinRangeValueZd(tp.getQ())&&tp.isWithinRangeValueZd(tp.getH())&&tp.isRealZdMatch();
|
|
|
|
+ if(pass) {
|
|
|
|
+ tmp.setSightHeight(tp.getBmd0L());
|
|
}
|
|
}
|
|
- tmp.setSightHeight(tp.getBmd0L());
|
|
|
|
|
|
+ }else if(BMD.equals(tp.getType())){
|
|
|
|
+ pass= tp.isCompletedBm()&&tp.isRealBmMatch();
|
|
|
|
+ }
|
|
|
|
+ if(!pass){
|
|
|
|
+ return false;
|
|
}
|
|
}
|
|
-
|
|
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return true;
|
|
return true;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+
|
|
static boolean identifying(LevelInfo levelInfo, List<TurnPoint> tmp,TurnPoint tp,boolean isHead,boolean isTail ){
|
|
static boolean identifying(LevelInfo levelInfo, List<TurnPoint> tmp,TurnPoint tp,boolean isHead,boolean isTail ){
|
|
if (isHead) {
|
|
if (isHead) {
|
|
if (tp.checkBmd()) {
|
|
if (tp.checkBmd()) {
|
|
@@ -236,7 +200,7 @@ public interface ITurnPointCalculator {
|
|
List<TurnPoint> result = new ArrayList<>();
|
|
List<TurnPoint> result = new ArrayList<>();
|
|
TurnPoint lastCd = turnPointList.stream().filter(TurnPoint::isCe).reduce((a, b) -> b).orElse(null);
|
|
TurnPoint lastCd = turnPointList.stream().filter(TurnPoint::isCe).reduce((a, b) -> b).orElse(null);
|
|
/*checked==false的情况下不再计算个点数据,但需要把已有数据放回输出缓存,否则改组数据会被置空*/
|
|
/*checked==false的情况下不再计算个点数据,但需要把已有数据放回输出缓存,否则改组数据会被置空*/
|
|
- boolean checked=true;
|
|
|
|
|
|
+ /* boolean checked=true;*/
|
|
for (TurnPoint tp : turnPointList) {
|
|
for (TurnPoint tp : turnPointList) {
|
|
try {
|
|
try {
|
|
if (tp.equals(lastCd)) {
|
|
if (tp.equals(lastCd)) {
|
|
@@ -369,43 +333,6 @@ public interface ITurnPointCalculator {
|
|
int n=tp.tooFar();
|
|
int n=tp.tooFar();
|
|
if(n!=0){
|
|
if(n!=0){
|
|
result.addAll(tp.limitOfRange(n));
|
|
result.addAll(tp.limitOfRange(n));
|
|
- /*List<TurnPoint> closeZd= info.getCloseZd();
|
|
|
|
- TurnPoint last = closeZd.get(closeZd.size()-1);
|
|
|
|
- List<TurnPoint> list = new ArrayList<>();
|
|
|
|
- for(int i=0;i<n;i++){
|
|
|
|
- TurnPoint zd = new TurnPoint(info, new HashMap<>());
|
|
|
|
- zd.setName("ZD"+closeZd.size());
|
|
|
|
- double dx = Math.random() * 0.07 * (RD.nextBoolean() ? -1 : 1);
|
|
|
|
- zd.setBmd(StringUtils.number2StringZero(Double.parseDouble(last.getBmd()) + dx, 3));
|
|
|
|
- double ddx = info.getSightHeight() - zd.getBmd0L();
|
|
|
|
- double xx = Math.abs(ddx);
|
|
|
|
- double small = BigDecimal.valueOf(r.nextDouble() * (info.getStep() - info.getMin() - xx) + info.getMin()).setScale(info.getScale(), ROUND_HALF_UP).doubleValue();
|
|
|
|
- double big = small + xx;
|
|
|
|
- if (ddx < 0) {
|
|
|
|
- *//*后大前小,取高*//*
|
|
|
|
- zd.setQ(small);
|
|
|
|
- zd.setH(big);
|
|
|
|
- } else {
|
|
|
|
- *//*前大后小,趋低*//*
|
|
|
|
- zd.setQ(big);
|
|
|
|
- zd.setH(small);
|
|
|
|
- }
|
|
|
|
- info.setSightHeight(zd.getBmd0L());
|
|
|
|
- zd.getDataMap().put(CD, zd.getName());
|
|
|
|
- zd.getDataMap().put(YG, zd.getBmd());
|
|
|
|
- zd.getDataMap().put(QS, zd.getQ());
|
|
|
|
- zd.getDataMap().put(HS, zd.getH());
|
|
|
|
- if(i==n-1) {
|
|
|
|
- *//*最后一个重新计算前视,因为是微调所以不再判断高差是否在范围*//*
|
|
|
|
- tp.setQ(info.getSightHeight() - tp.getSc0L());
|
|
|
|
- }
|
|
|
|
- closeZd.add(zd.clone());
|
|
|
|
- *//*info.setMilestone(info.getMilestone() + 200*(x/Math.abs(x)));tooFar里已经重置仪器里程,这里专注转点*//*
|
|
|
|
- list.add(zd);
|
|
|
|
- }
|
|
|
|
- if(list.size()>0){
|
|
|
|
- result.addAll(list);
|
|
|
|
- }*/
|
|
|
|
}
|
|
}
|
|
|
|
|
|
}
|
|
}
|