package com.ard.utils.other;
|
|
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();
|
}
|
|
}
|