| | |
| | | package com.yssh.utils; |
| | | |
| | | import java.text.SimpleDateFormat; |
| | | import java.awt.geom.Point2D; |
| | | import java.util.*; |
| | | |
| | | import com.yssh.entity.Coordinate; |
| | |
| | | import org.opengis.referencing.crs.CoordinateReferenceSystem; |
| | | |
| | | public class CalculateUtils { |
| | | private final static SimpleDateFormat ymdh = new SimpleDateFormat("yyyyMMddHH"); |
| | | |
| | | /** |
| | | * 获取年月日时 |
| | | */ |
| | | public static String getYearMonthDayHour(Date date) { |
| | | return ymdh.format(date); |
| | | } |
| | | |
| | | /** |
| | | * 默认地球半径,赤道半径(单位m) |
| | | */ |
| | |
| | | /** |
| | | * 转化为弧度(rad) |
| | | */ |
| | | private static double rad(double d) |
| | | { |
| | | private static double rad(double d) { |
| | | return d * Math.PI / 180.0; |
| | | } |
| | | |
| | |
| | | * 保留2位小数 |
| | | */ |
| | | public static double round2(double d) { |
| | | return ((long)(d * 100)) / 100D; |
| | | return ((long) (d * 100)) / 100D; |
| | | } |
| | | |
| | | /** |
| | | * 保留6位小数 |
| | | */ |
| | | public static double round6(double d) { |
| | | return ((long)(d * 1000000)) / 1000000D; |
| | | return ((long) (d * 1000000)) / 1000000D; |
| | | } |
| | | |
| | | /** |
| | |
| | | /** |
| | | * 计算角度2 |
| | | */ |
| | | public static double getAngle2(double x1, double y1, double x2, double y2){ |
| | | public static double getAngle2(double x1, double y1, double x2, double y2) { |
| | | try { |
| | | DirectPosition2D p1 = new DirectPosition2D( x1, y1); |
| | | DirectPosition2D p1 = new DirectPosition2D(x1, y1); |
| | | DirectPosition2D p2 = new DirectPosition2D(x2, y2); |
| | | |
| | | GeodeticCalculator gc = new GeodeticCalculator(); |
| | |
| | | double angle = gc.getAzimuth(); |
| | | |
| | | return round2(angle); |
| | | }catch (Exception ex){ |
| | | } catch (Exception ex) { |
| | | return 0; |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 获取坐标 |
| | | * |
| | | * @param su |
| | | * @return |
| | | */ |
| | |
| | | |
| | | /** |
| | | * 计算经度 |
| | | * |
| | | * @param @param x |
| | | * @param @param y |
| | | * @param @return 参数 |
| | |
| | | |
| | | /** |
| | | * 计算维度 |
| | | * |
| | | * @param @param x |
| | | * @param @param y |
| | | * @param @return 参数 |
| | |
| | | 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) { |
| | | List<String> ids3d = new ArrayList<>(); |
| | | Integer x = point.getX(); |
| | |
| | | } |
| | | |
| | | /** |
| | | * 计算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)); |
| | | |
| | | List<Coordinate> list = new ArrayList<>(); |
| | | list.add(getPointByDisAndAngle(x, y, 315, dis)); |
| | | list.add(getPointByDisAndAngle(x, y, 45, dis)); |
| | | list.add(getPointByDisAndAngle(x, y, 135, dis)); |
| | | list.add(getPointByDisAndAngle(x, y, 225, dis)); |
| | | |
| | | return list; |
| | | } |
| | | |
| | | /** |
| | | * 根据距离和角度获取目标点 |
| | | */ |
| | | private static Coordinate getPointByDisAndAngle(double x, double y, double angle, double dis) { |
| | | try { |
| | | DirectPosition2D p1 = new DirectPosition2D(x, y); |
| | | |
| | | GeodeticCalculator gc = new GeodeticCalculator(); |
| | | gc.setStartingGeographicPoint(p1); |
| | | gc.setDirection(angle, dis); |
| | | |
| | | Point2D dest = gc.getDestinationGeographicPoint(); |
| | | double newX = round6(dest.getX()); |
| | | double newY = round6(dest.getY()); |
| | | |
| | | return new Coordinate(newX, newY); |
| | | } catch (Exception ex) { |
| | | return new Coordinate(); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * @param @return 参数 |
| | | * @return Double 返回类型 |
| | | * @throws |