From aa925d851857f50eff0556411366690d9a78a0e5 Mon Sep 17 00:00:00 2001 From: 44323 <443237572@qq.com> Date: 星期一, 27 十一月 2023 17:30:26 +0800 Subject: [PATCH] Merge branch 'master' of http://120.76.84.145:10101/gitblit/r/java/PlayPai --- cloud-server-activity/src/main/java/com/dsh/activity/util/GeodesyUtil.java | 64 ++++++++++++++++++++++++++++++++ 1 files changed, 64 insertions(+), 0 deletions(-) diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/util/GeodesyUtil.java b/cloud-server-activity/src/main/java/com/dsh/activity/util/GeodesyUtil.java new file mode 100644 index 0000000..e9048f2 --- /dev/null +++ b/cloud-server-activity/src/main/java/com/dsh/activity/util/GeodesyUtil.java @@ -0,0 +1,64 @@ +package com.dsh.activity.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<String, Double> 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<String, Double> 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(); + } + +} -- Gitblit v1.7.1