|
@@ -21,51 +21,55 @@ public interface ITurnPointCalculator {
|
|
|
String ZD_REG="(?i)zd\\d+";
|
|
|
/*核心计算*/
|
|
|
static List<TurnPoint> create(List<Map<String, Object>> data, LinkedHashMap<String, String> configMap,LevelInfo levelInfo) {
|
|
|
- /*1.验证数据的合理性,如果已经合理则不需要计算
|
|
|
- * 2.尝试补充数据,如果不合理则重新生成转点,并用正尺方式生成
|
|
|
- * 3.合理性定义:(测点前视不存在或者非负数则视线高-测点实测高程在【0.5~4.8】范围,如果前视为负数则视线高-实际高程在【-0.5~-4.8】范围)*/
|
|
|
- if (Func.isNotEmpty(data) && configMap != null) {
|
|
|
- /*重置*/
|
|
|
- levelInfo.reset();
|
|
|
- List<TurnPoint> tmp = new ArrayList<>();
|
|
|
- /*是否尝试初步补充数据*/
|
|
|
- boolean checked=true;
|
|
|
- for (int i = 0; i < data.size(); i++) {
|
|
|
- Map<String, Object> dm = data.get(i);
|
|
|
- Map<String, Object> dataMap = new HashMap<>(configMap.size() * 2);
|
|
|
- TurnPoint tp = new TurnPoint(levelInfo, dataMap);
|
|
|
- /*V判断*/
|
|
|
- tp.setVertical(StringUtils.isEquals(1, dm.get("vertical")));
|
|
|
- /*属性赋值*/
|
|
|
- property(configMap,dataMap,dm,tp);
|
|
|
- if(checked) {
|
|
|
- boolean isHead = (i == 0);
|
|
|
- boolean isTail = (i == data.size() - 1);
|
|
|
- /*检验水准点数据合法性&节点定性&补充缺失闭合点*/
|
|
|
- checked = identifying(levelInfo, tmp, tp, isHead, isTail);
|
|
|
- if(!checked){
|
|
|
- /*checked失败需要主动加入tmp,后续不执行identifying直接add*/
|
|
|
+ try {
|
|
|
+ /*1.验证数据的合理性,如果已经合理则不需要计算
|
|
|
+ * 2.尝试补充数据,如果不合理则重新生成转点,并用正尺方式生成
|
|
|
+ * 3.合理性定义:(测点前视不存在或者非负数则视线高-测点实测高程在【0.5~4.8】范围,如果前视为负数则视线高-实际高程在【-0.5~-4.8】范围)*/
|
|
|
+ if (Func.isNotEmpty(data) && configMap != null) {
|
|
|
+ /*重置*/
|
|
|
+ levelInfo.reset();
|
|
|
+ List<TurnPoint> tmp = new ArrayList<>();
|
|
|
+ /*是否尝试初步补充数据*/
|
|
|
+ boolean checked = true;
|
|
|
+ for (int i = 0; i < data.size(); i++) {
|
|
|
+ Map<String, Object> dm = data.get(i);
|
|
|
+ Map<String, Object> dataMap = new HashMap<>(configMap.size() * 2);
|
|
|
+ TurnPoint tp = new TurnPoint(levelInfo, dataMap);
|
|
|
+ /*V判断*/
|
|
|
+ tp.setVertical(StringUtils.isEquals(1, dm.get("vertical")));
|
|
|
+ /*属性赋值*/
|
|
|
+ property(configMap, dataMap, dm, tp);
|
|
|
+ if (checked) {
|
|
|
+ boolean isHead = (i == 0);
|
|
|
+ boolean isTail = (i == data.size() - 1);
|
|
|
+ /*检验水准点数据合法性&节点定性&补充缺失闭合点*/
|
|
|
+ checked = identifying(levelInfo, tmp, tp, isHead, isTail);
|
|
|
+ if (!checked) {
|
|
|
+ /*checked失败需要主动加入tmp,后续不执行identifying直接add*/
|
|
|
+ tmp.add(tp);
|
|
|
+ }
|
|
|
+ } else {
|
|
|
tmp.add(tp);
|
|
|
}
|
|
|
- }else{
|
|
|
- tmp.add(tp);
|
|
|
+ }
|
|
|
+ if (!checked) {
|
|
|
+ /*直接写入输出缓存,不作任何计算*/
|
|
|
+ tmp.forEach(ITurnPointCalculator::putCache);
|
|
|
+ return tmp;
|
|
|
+ }
|
|
|
+ /*判断是否可推导*/
|
|
|
+ /*levelInfo.setPersist(persist(tmp));问题多多,暂时关闭*/
|
|
|
+ if (levelInfo.isNotPersist()) {
|
|
|
+ /*不可推导的情况移除转点,fill阶段自动生成*/
|
|
|
+ tmp.removeIf(e -> ZD.equals(e.getType()));
|
|
|
+ }
|
|
|
+ List<TurnPoint> result = fill(tmp);
|
|
|
+ if (ListUtils.isNotEmpty(result)) {
|
|
|
+ return result;
|
|
|
}
|
|
|
}
|
|
|
- if(!checked){
|
|
|
- /*直接写入输出缓存,不作任何计算*/
|
|
|
- tmp.forEach(ITurnPointCalculator::putCache);
|
|
|
- return tmp;
|
|
|
- }
|
|
|
- /*判断是否可推导*/
|
|
|
- /*levelInfo.setPersist(persist(tmp));问题多多,暂时关闭*/
|
|
|
- if(levelInfo.isNotPersist()) {
|
|
|
- /*不可推导的情况移除转点,fill阶段自动生成*/
|
|
|
- tmp.removeIf(e-> ZD.equals(e.getType()));
|
|
|
- }
|
|
|
- List<TurnPoint> result = fill(tmp);
|
|
|
- if (ListUtils.isNotEmpty(result)) {
|
|
|
- return result;
|
|
|
- }
|
|
|
+ }catch (Exception e){
|
|
|
+ e.printStackTrace();
|
|
|
}
|
|
|
return Collections.emptyList();
|
|
|
}
|
|
@@ -360,7 +364,7 @@ public interface ITurnPointCalculator {
|
|
|
/*距离超过两百米需要转点*/
|
|
|
List<TurnPoint> closeZd= info.getCloseZd();
|
|
|
TurnPoint last = closeZd.get(closeZd.size()-1);
|
|
|
- int n = (int)Math.ceil(x/200);
|
|
|
+ int n = (int)Math.ceil(Math.abs(x)/200);
|
|
|
List<TurnPoint> list = new ArrayList<>();
|
|
|
for(int i=0;i<n;i++){
|
|
|
TurnPoint zd = new TurnPoint(info, new HashMap<>());
|
|
@@ -390,11 +394,8 @@ public interface ITurnPointCalculator {
|
|
|
tp.setQ(info.getSightHeight() - tp.getSc0L());
|
|
|
}
|
|
|
closeZd.add(zd.clone());
|
|
|
- /*设置当前里程*/
|
|
|
- if(info.isDistance()) {
|
|
|
- /*没转一次点相当于往前推进两百米*/
|
|
|
- info.setMilestone(info.getMilestone()+200);
|
|
|
- }
|
|
|
+ /*设置新的仪器里程,没转一次点相当于减少两百米的间隔,正向+负向-*/
|
|
|
+ info.setMilestone(info.getMilestone() + 200*(x/Math.abs(x)));
|
|
|
list.add(zd);
|
|
|
}
|
|
|
if(list.size()>0){
|