package com.ard.utils.util; import org.gavaghan.geodesy.Ellipsoid; import org.gavaghan.geodesy.GeodeticCalculator; import org.gavaghan.geodesy.GlobalCoordinates; import org.gavaghan.geodesy.GlobalPosition; /** * @Description: gis工具类 * @ClassName: GisUtils * @Author: 刘苏义 * @Date: 2023年07月03日15:23 * @Version: 1.0 **/ public class GisUtils { public static GeodeticCalculator geodeticCalculator = new GeodeticCalculator(); /** * 根据经纬度,计算两点间的距离 * * @param From 第一个点的经纬度 * @param To 第二个点的经纬度 * @return 返回距离 单位米 */ public static double getDistance(double[] From, double[] To) { double longitudeFrom = From[0]; double latitudeFrom = From[1]; double longitudeTo = To[0]; double latitudeTo = To[1]; GlobalCoordinates source = new GlobalCoordinates(latitudeFrom, longitudeFrom); GlobalCoordinates target = new GlobalCoordinates(latitudeTo, longitudeTo); return geodeticCalculator.calculateGeodeticCurve(Ellipsoid.WGS84, source, target).getEllipsoidalDistance(); } /** * 通过A点坐标,长度和Y轴角度计算B点坐标 */ public static Double[] CalculateCoordinates(Double[] radarCoordinates, double distance, Double angle) { //double[] to_wgs84 = LonlatConver.gcj02_To_Wgs84(radarCoordinates[0], radarCoordinates[1]); double Ax = radarCoordinates[0]; // A 点的 X 坐标 double Ay = radarCoordinates[1]; // A 点的 Y 坐标 double AB = distance; // AB 的长度 double angleWithYAxisDegrees = angle; // AB 与 Y 轴的角度(以度数表示) GeodeticCalculator calculator = new GeodeticCalculator(); GlobalCoordinates globalCoordinates = new GlobalCoordinates(Ay, Ax); GlobalCoordinates globalCoordinates1 = calculator.calculateEndingGlobalCoordinates(Ellipsoid.WGS84, globalCoordinates, angleWithYAxisDegrees, AB); return new Double[]{globalCoordinates1.getLongitude(), globalCoordinates1.getLatitude()}; } /** * 计算从from到to方向的直线与正北方向夹角 * * @param longitudeFrom 第一个点的经度 * @param latitudeFrom 第一个点的纬度 * @param longitudeTo 第二个点的经度 * @param latitudeTo 第二个点的纬度 * @return 返回角度 */ public static double getNorthAngle(double longitudeFrom, double latitudeFrom, double longitudeTo, double latitudeTo) { GlobalPosition source = new GlobalPosition(latitudeFrom, longitudeFrom, 0); GlobalPosition target = new GlobalPosition(latitudeTo, longitudeTo, 0); return geodeticCalculator.calculateGeodeticMeasurement(Ellipsoid.WGS84, source, target).getAzimuth(); } }