燕山石化溯源三维电子沙盘-【后端】-服务
1
13693261870
2024-11-13 2f55cebbad3dea187a5f91d16ec80a9677dab699
src/main/java/com/yssh/utils/CalculateUtils.java
@@ -1,7 +1,6 @@
package com.yssh.utils;
import java.awt.geom.Point2D;
import java.text.SimpleDateFormat;
import java.util.*;
import com.yssh.entity.Coordinate;
@@ -13,31 +12,14 @@
import org.geotools.referencing.crs.DefaultGeographicCRS;
import org.opengis.referencing.crs.CoordinateReferenceSystem;
@SuppressWarnings("ALL")
public class CalculateUtils {
   private final static SimpleDateFormat ymdh = new SimpleDateFormat("yyyyMMddHH");
   /**
    * 获取年月日时
    */
   public static String getYearMonthDayHour(Date date) {
      return ymdh.format(date);
   }
   /**
    * 默认地球半径,赤道半径(单位m)
    */
   private final static double EARTH_RADIUS1 = 6371000;
   /**
    * 转化为弧度(rad)
    */
   private static double rad(double d) {
      return d * Math.PI / 180.0;
   }
   /**
    * 计算距离1
    */
   public static double getDistance1(double lon1, double lat1, double lon2, double lat2) {
      double radLat1 = rad(lat1);
      double radLat2 = rad(lat2);
@@ -50,9 +32,6 @@
      return round2(s);
   }
   /**
    * 计算距离2
    */
   public static double getDistance2(double x1, double y1, double x2, double y2) {
      // 84坐标系构造GeodeticCalculator
      GeodeticCalculator geodeticCalculator = new GeodeticCalculator(DefaultGeographicCRS.WGS84);
@@ -69,23 +48,14 @@
      return round2(distance);
   }
   /**
    * 保留2位小数
    */
   public static double round2(double d) {
      return ((long) (d * 100)) / 100D;
   }
   /**
    * 保留6位小数
    */
   public static double round6(double d) {
      return ((long) (d * 1000000)) / 1000000D;
   }
   /**
    * 计算角度
    */
   public static double getAngle(double x1, double y1, double x2, double y2) {
      try {
         CoordinateReferenceSystem crs = CRS.decode("EPSG:4326");
@@ -104,9 +74,6 @@
      }
   }
   /**
    * 计算角度2
    */
   public static double getAngle2(double x1, double y1, double x2, double y2) {
      try {
         DirectPosition2D p1 = new DirectPosition2D(x1, y1);
@@ -124,12 +91,6 @@
      }
   }
   /**
    * 获取坐标
    *
    * @param su
    * @return
    */
   public static Coordinate getCoordinate(DistanceSuYuan su) {
      String[] sirs = su.getId().split("_");
@@ -141,17 +102,6 @@
      return new Coordinate(lon, lat);
   }
   /**
    * 计算经度
    *
    * @param @param  x
    * @param @param  y
    * @param @return 参数
    * @return double 返回类型
    * @throws
    * @Title: getLon
    * @Description: 计算经度
    */
   public static double getLon(int x, int y) {
      double lon = 115.9165227 + 0.000116732 * (x - 0.5) + 0.00000116862 * (y - 0.5);
      if (lon < 115 || lon > 116) {
@@ -161,17 +111,6 @@
      return round6(lon);
   }
   /**
    * 计算维度
    *
    * @param @param  x
    * @param @param  y
    * @param @return 参数
    * @return double 返回类型
    * @throws
    * @Title: getLat
    * @Description: 计算维度
    */
   public static double getLat(int x, int y) {
      double lat = 39.77250000 + 0.000001000 * (x - 0.5) - 0.00009000000 * (y - 0.5);
      if (lat < 39 || lat > 40) {
@@ -181,14 +120,6 @@
      return round6(lat);
   }
   /**
    * @param @param  checkPoints
    * @param @return 参数
    * @return List<String> 返回类型
    * @throws
    * @Title: assembleId
    * @Description: 组装id
    */
   public static List<String> assembleId(List<MonitorPointPosition> checkPoints) {
      List<String> ids2d = new ArrayList<>();
      for (MonitorPointPosition point : checkPoints) {
@@ -198,15 +129,6 @@
      return ids2d;
   }
   /**
    * @param @param  checkPoint
    * @param @param  range
    * @param @return 参数
    * @return List<String> 返回类型
    * @Title: aloneCrosswiseScope
    * @Description: 单独点位横向范围扩展
    * @backup 强制将层级改为 0
    */
   public static List<String> aloneCrosswiseExtend(MonitorPointPosition checkPoint, int range) {
      List<String> ids = new ArrayList<>();
      Integer x = checkPoint.getX();
@@ -218,6 +140,13 @@
         }
      }
      return ids;
   }
   public static String getFilterByExtend(MonitorPointPosition point, int range) {
      Integer x = point.getX();
      Integer y = point.getY();
      return String.format("x between %d and %d and y between %d and %d", x - range / 2, x + range / 2, y - range / 2, y + range / 2);
   }
   public static List<String> temporary(MonitorPointPosition point, int range) {
@@ -235,9 +164,6 @@
      return ids3d;
   }
   /**
    * 获取方向
    */
   public static String getDir(double direction) {
      if (direction < 0) {
         direction = direction + 360;
@@ -264,9 +190,6 @@
      return "北";
   }
   /**
    * 计算X、Y值的矩形框
    */
   public static List<Coordinate> calcRect(double x, double y) {
      double buffer = 10;
      double dis = round6(Math.sqrt(Math.pow(buffer / 2, 2) * 2));
@@ -280,9 +203,6 @@
      return list;
   }
   /**
    * 根据距离和角度获取目标点
    */
   private static Coordinate getPointByDisAndAngle(double x, double y, double angle, double dis) {
      try {
         DirectPosition2D p1 = new DirectPosition2D(x, y);
@@ -301,26 +221,10 @@
      }
   }
   /**
    * @param @return 参数
    * @return Double 返回类型
    * @throws
    * @Title: getWindSpeed
    * @Description: 计算风速
    */
   public static Double getWindSpeed(double v, double u) {
      return round6(Math.sqrt(v * v + u * u));
   }
   /**
    * @param @param  v
    * @param @param  u
    * @param @return 参数
    * @return double 返回类型
    * @throws
    * @Title: getWindDirection
    * @Description: 计算风向
    */
   public static double getWindDirection(double v, double u) {
      double result = Math.atan(u / (v + Math.pow(10, -5))) / Math.PI * 180;
      if (result < 0) {
@@ -332,16 +236,6 @@
      return round6(result);
   }
   /**
    * @param @param  list 排序对象
    * @param @param  property 排序参数
    * @param @param  order 排序顺序
    * @param @return 参数
    * @return List<Map < String, Object>> 返回类型
    * @throws
    * @Title: sort
    * @Description: 排序
    */
   public static List<Map<String, Object>> sort(List<Map<String, Object>> list, final String property, final boolean order) {
      if (list == null || property == null) {
         return null;