package com.dsh.course.util; import org.gavaghan.geodesy.Ellipsoid; import org.gavaghan.geodesy.GeodeticCalculator; import org.gavaghan.geodesy.GeodeticCurve; import org.gavaghan.geodesy.GlobalCoordinates; import java.util.HashMap; import java.util.Map; /** * 计算两个金纬度坐标之间的直线距离 */ public class GeodesyUtil { /** * 获取直线距离 * * @param fromLonLat * @param toLonLat * @return */ public static Map getDistance(String fromLonLat, String toLonLat) { String[] from = fromLonLat.split(","); String[] to = toLonLat.split(","); GlobalCoordinates source = new GlobalCoordinates(Double.valueOf(from[1]), Double.valueOf(from[0])); GlobalCoordinates target = new GlobalCoordinates(Double.valueOf(to[1]), Double.valueOf(to[0])); double Sphere = getDistanceMeter(source, target, Ellipsoid.Sphere); double WGS84 = getDistanceMeter(source, target, Ellipsoid.WGS84); double GRS80 = getDistanceMeter(source, target, Ellipsoid.GRS80); double GRS67 = getDistanceMeter(source, target, Ellipsoid.GRS67); double ANS = getDistanceMeter(source, target, Ellipsoid.ANS); double WGS72 = getDistanceMeter(source, target, Ellipsoid.WGS72); double Clarke1858 = getDistanceMeter(source, target, Ellipsoid.Clarke1858); double Clarke1880 = getDistanceMeter(source, target, Ellipsoid.Clarke1880); // System.out.println("Sphere坐标系计算结果:"+Sphere + "米"); // System.out.println("WGS84坐标系计算结果:"+WGS84 + "米"); // System.out.println("GRS80坐标系计算结果:"+GRS80 + "米"); // System.out.println("GRS67坐标系计算结果:"+GRS67 + "米"); // System.out.println("ANS坐标系计算结果:"+ANS + "米"); // System.out.println("WGS72坐标系计算结果:"+WGS72 + "米"); // System.out.println("Clarke1858坐标系计算结果:"+Clarke1858 + "米"); // System.out.println("Clarke1880坐标系计算结果:"+Clarke1880 + "米"); Map map = new HashMap<>(); map.put("Sphere", Sphere); map.put("WGS84", WGS84); map.put("GRS80", GRS80); map.put("GRS67", GRS67); map.put("ANS", ANS); map.put("WGS72", WGS72); map.put("Clarke1858", Clarke1858); map.put("Clarke1880", Clarke1880); return map; } private static double getDistanceMeter(GlobalCoordinates gpsFrom, GlobalCoordinates gpsTo, Ellipsoid ellipsoid) { //创建GeodeticCalculator,调用计算方法,传入坐标系、经纬度用于计算距离 GeodeticCurve geoCurve = new GeodeticCalculator().calculateGeodeticCurve(ellipsoid, gpsFrom, gpsTo); return geoCurve.getEllipsoidalDistance(); } }