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
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);
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|