济菏高速数据中心代码
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

111 lines
3.5 KiB

package com.ruoyi.common.utils;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.regex.Pattern;
/**
* @Description 桩号工具
*
* @author liuwenge
* @date 2024/1/17 14:43
*/
public class StakeMarkUtils {
/**
* @Description 桩号格式校验
*
* 正确格式: K060+010
* @author liuwenge
* @date 2024/3/22 20:05
* @param stakeMark
* @return boolean
*/
public static boolean checkStakeMark(String stakeMark){
if (StringUtils.isEmpty(stakeMark)){
return false;
}
Pattern pattern = Pattern.compile("^K\\d{3}\\+\\d{3}$");
return pattern.matcher(stakeMark).matches();
}
/**
* @Description 桩号转公里数
*
* @author liuwenge
* @date 2024/3/6 11:06
* @param stakeMark 桩号:"K123+123"
* @return 公里数:123.123
*/
public static String formatKilometre(String stakeMark){
if (!checkStakeMark(stakeMark)){
return "";
}
return stakeMark.toLowerCase().replace("k","").replace("+",".");
}
/**
* @Description 桩号转米
*
* @author liuwenge
* @date 2024/3/6 11:06
* @param stakeMark 桩号:"K123+123"
* @return 公里数:123123
*/
public static String formatMetre(String stakeMark){
if (!checkStakeMark(stakeMark)){
return "";
}
return stakeMark.toLowerCase().replace("k","").replace("+","");
}
/**
* @Description 计算桩号距离(公里)
*
* @author liuwenge
* @date 2024/1/17 14:45
* @param startStakeMark 开始桩号
* @param endStakeMark 结束桩号
* @return java.math.BigDecimal 距离
*/
public static BigDecimal getKilometre(String startStakeMark, String endStakeMark){
if (!checkStakeMark(startStakeMark) || !checkStakeMark(endStakeMark)){
return BigDecimal.ZERO;
}
String start = startStakeMark.toLowerCase().replace("k","").replace("+",".");
String end = endStakeMark.toLowerCase().replace("k","").replace("+",".");
BigDecimal startKilometre = new BigDecimal(start);
BigDecimal endKilometre = new BigDecimal(end);
if (startKilometre.compareTo(endKilometre) > 0){
return startKilometre.subtract(endKilometre).setScale(3, RoundingMode.HALF_UP);
} else {
return endKilometre.subtract(startKilometre).setScale(3, RoundingMode.HALF_UP);
}
}
/**
* @Description 计算桩号距离(米)
*
* @author liuwenge
* @date 2024/1/17 15:04
* @param startStakeMark 开始桩号
* @param endStakeMark 结束桩号
* @return java.math.BigDecimal 距离
*/
public static BigDecimal getMetre(String startStakeMark, String endStakeMark){
if (!checkStakeMark(startStakeMark) || !checkStakeMark(endStakeMark)){
return BigDecimal.ZERO;
}
String start = startStakeMark.toLowerCase().replace("k","").replace("+",".");
String end = endStakeMark.toLowerCase().replace("k","").replace("+",".");
BigDecimal startKilometre = new BigDecimal(start);
BigDecimal endKilometre = new BigDecimal(end);
if (startKilometre.compareTo(endKilometre) > 0){
return startKilometre.subtract(endKilometre).multiply(new BigDecimal("1000")).setScale(0, RoundingMode.HALF_UP);
} else {
return endKilometre.subtract(startKilometre).multiply(new BigDecimal("1000")).setScale(0, RoundingMode.HALF_UP);
}
}
}