|
@@ -27,8 +27,6 @@ public interface ITurnPointCalculator {
|
|
|
if (Func.isNotEmpty(data) && configMap != null) {
|
|
|
/*重置*/
|
|
|
levelInfo.reset();
|
|
|
- /* LevelInfo levelInfo = new LevelInfo();
|
|
|
- levelInfo.setDx(g8pcfw);*/
|
|
|
List<TurnPoint> tmp = new ArrayList<>();
|
|
|
/*是否尝试初步补充数据*/
|
|
|
boolean checked=true;
|
|
@@ -72,7 +70,6 @@ public interface ITurnPointCalculator {
|
|
|
return Collections.emptyList();
|
|
|
}
|
|
|
|
|
|
-
|
|
|
/**判断是否保留原来的转点*/
|
|
|
static boolean persist(List<TurnPoint> list){
|
|
|
/*在补充计算之前进行完整性校验,如果成功则不会再生成任何新转点*/
|
|
@@ -254,6 +251,13 @@ public interface ITurnPointCalculator {
|
|
|
} else if (tp.getType().equals(TurnPoint.BMD)) {
|
|
|
/*水准点处理*/
|
|
|
tpHandlerBmd(tp);
|
|
|
+ Double milestone= info.getBmMap().get(tp.getName().trim());
|
|
|
+ if(milestone!=null) {
|
|
|
+ /*如果水准点包含里程信息就会启动距离计算转点 200米一个点,配合高差按多的那个算*/
|
|
|
+ info.setDistance(true);
|
|
|
+ /*设置初始里程*/
|
|
|
+ info.setMilestone(milestone);
|
|
|
+ }
|
|
|
}
|
|
|
/*把数据放到输出缓存*/
|
|
|
putCache(tp);
|
|
@@ -271,7 +275,6 @@ public interface ITurnPointCalculator {
|
|
|
return Collections.emptyList();
|
|
|
}
|
|
|
|
|
|
-
|
|
|
static void tpHandlerBmd(TurnPoint tp){
|
|
|
TurnPoint st = new TurnPoint(tp.getLevelInfo(), new HashMap<>());
|
|
|
st.setBmd(tp.getBmd());
|
|
@@ -352,13 +355,52 @@ public interface ITurnPointCalculator {
|
|
|
if (!tp.isVisible(negative)) {
|
|
|
result.addAll(tp.limit(negative));
|
|
|
}
|
|
|
+ double x=tp.tooFar();
|
|
|
+ if(x>0){
|
|
|
+ /*距离超过两百米需要转点*/
|
|
|
+ List<TurnPoint> closeZd= info.getCloseZd();
|
|
|
+ TurnPoint last = closeZd.get(closeZd.size()-1);
|
|
|
+ int n = (int)Math.ceil(x/200);
|
|
|
+ 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());
|
|
|
+ }
|
|
|
+ list.add(zd);
|
|
|
+ }
|
|
|
+ if(list.size()>0){
|
|
|
+ result.addAll(list);
|
|
|
+ closeZd.addAll(list);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
/**验证当前测点数据的合理性*/
|
|
|
static boolean finalizeCe(TurnPoint tp){
|
|
|
if(Func.isNotBlank(tp.getSc())&&Func.isNotBlank(tp.getSj())&&Func.isNotBlank(tp.getQ())&&Func.isNotBlank(tp.getDx())){
|